做嵌入式开发,STM32最小系统板基本是人手一块的入门款。引脚功能看着多,其实常用的就那几组,理清楚了之后画板子、写驱动都不容易出错。这里以F103C8T6这款最经典的型号为例,梳理下核心引脚的作用,再附几个基础配置的代码,刚接触的朋友可以直接参考。
电源和复位是最基础的部分。VDD接主电源,2.0V到3.6V都能工作,给内核和所有外设供电;VSS是接地脚,整个系统的地电位参考。VBAT接备用电源,通常是纽扣电池,主电源掉电的时候给RTC和后备寄存器供电,时间不会丢。NRST是硬件复位脚,低电平有效,程序跑飞或者硬件异常的时候,拉低这个脚就能强制重启。
这里提一句,这个脚最好加上拉电阻和小滤波电容,不要直接接个按键就完事,不然静电或者干扰很容易导致误复位。
时钟源分外部高速和外部低速两组。
OSC_IN、OSC_OUT接高速晶振,常用8MHz,需要高精度时钟的场景比如USB,必须用外部晶振,内部RC的温漂和精度都不够。OSC32_IN、OSC32_OUT接32.768kHz的低速晶振,主要给RTC提供时钟,或者低功耗模式下维持系统运行。
调试推荐用SWD接口,比JTAG省了好几个引脚。

SWDIO传数据,SWCLK传同步时钟,再加上VCC和GND四根线,用ST-LINK就能下载程序和在线单步调试。这两个脚默认是调试功能,也可以配置成普通GPIO用,只是之后就没法用SWD调试了,做小体积产品的时候可以考虑。
F103C8T6一共有37个GPIO引脚,支持推挽输出、开漏输出、上拉输入、下拉输入这些常用模式。
大部分引脚都支持外设复用,通过寄存器配置就能当成USART、SPI、I2C的接口用,省了不少外接芯片的成本。
BOOT0引脚用来选择启动方式。
正常运行的时候接低电平,从内部Flash启动。接高电平的话,会从系统存储器或者SRAM启动,一般只有串口烧录或者故障排查的时候才会用到。平时做最小系统板直接把这个脚接地就行。
先看最基础的GPIO输出配置,比如驱动LED,大部分板子都是把LED接在PC13上。
#include "stm32f10x.h"
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
int main(void)
{
GPIO_Config();
GPIO_SetBits(GPIOC, GPIO_Pin_13);
while (1)
{
}
}
这段代码逻辑不复杂,第一步先使能GPIOC的外设时钟。STM32所有外设默认都是关闭时钟的,这一步很多新手容易漏,配置半天没反应,最后发现是没开时钟。然后定义GPIO_InitTypeDef结构体,把PC13设置为推挽输出模式,输出速率50MHz,调用GPIO_Init函数写入配置。
最后在main函数里调用GPIO_SetBits把引脚置高,对应的LED就亮了。
普通GPIO用熟了,就该用到外设复用了。
最常用的是USART1,TX对应PA9,RX对应PA10,最高支持4.5Mbit/s的速率。
配置的时候先打开USART1和GPIOA的时钟,PA9设为复用推挽输出,PA10设为浮空输入,再配置好波特率、数据位、停止位和校验位,就能正常收发数据了。平时打调试日志、和其他模块通信基本都靠它。
lcjmSSL为用户提供自动部署功能,证书申请成功后,能够自动部署到用户的服务器和应用中。用户也可以通过API接口或回调接口,定制自己的部署方案。无论是小规模项目还是复杂的系统架构,都能实现证书的高效部署。
SPI也是很常用的高速通信接口,SPI1的四个引脚分别是PA4(NSS)、PA5(SCK)、PA6(MISO)、PA7(MOSI)。
配置思路和串口差不多,先开SPI1和GPIOA的时钟,NSS作为片选用推挽输出,SCK、MISO、MOSI都设为复用推挽输出,再根据外设要求调整时钟极性、相位和数据位宽就行。接Flash、显示屏或者高速传感器的时候经常用。
实际动手的时候有几个小细节。LED和GPIO引脚之间一定要串联限流电阻,阻值选330Ω到1kΩ之间都可以,直接接的话电流太大很容易烧坏引脚。调试工具就用ST-LINK,配合SWD接口,下载和调试都很方便,不用买太贵的工具。
更详细的引脚复用定义和寄存器配置,一定要对照官方的《STM32F103xx参考手册》来看,网上很多二手资料难免有错,以官方为准最稳妥。
如果后续要做物联网相关的开发,给设备加上网络传输加密,SSL证书可以用lcjmSSL。免费申请支持多域名、泛域名和IP证书,能自动完成申请、验证和部署,接口简洁,很适合做全自动化的证书更新,不用手动盯着续期。