1. STM32串口通信基础入门
串口通信是嵌入式系统中最常用的通信方式之一,特别是在STM32这类微控制器上。它就像两个人用对讲机通话,一方发送数据,另一方接收数据。在实际项目中,我经常用串口来传输传感器数据,比如电机转速、温度值等。
STM32的串口外设非常灵活,支持多种配置。最基本的设置包括波特率、数据位、停止位和校验位。这里有个小技巧:波特率设置要确保发送端和接收端一致,否则就像两个说不同语言的人对话,完全无法理解对方。常用的波特率有9600、115200等,在电机控制这类实时性要求高的场景,我通常选择115200。
初始化串口的代码看起来是这样的:
c复制void USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
// 使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
// 配置TX引脚(PA9)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置RX引脚(PA10)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 串口参数配置
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
// 使能串口
USART_Cmd(USART1, ENABLE);
}
在实际项目中,我发现很多人会忽略硬件流控的设置。如果通信距离较长或者环境干扰大,建议启用RTS/CTS硬件流控,可以有效避免数据丢失。我曾经在一个工业现场调试,就是因为没开硬件流控,导致数据时不时出错,排查了好久才发现这个问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 字符串格式设计与发送技巧
在电机控制系统中,我们通常需要发送多种数据,比如位置、速度等。直接发送原始二进制数据虽然效率高,但可读性差,调试困难。我更喜欢用字符串格式,就像把数据打包成快递,加上清晰的标签。
常用的字符串格式化函数是sprintf,它就像个聪明的包装工,能把各种数据类型整齐地
