当前位置: 首页 > 产品大全 > STM32学习笔记 基于江协科技教程实现串口通信

STM32学习笔记 基于江协科技教程实现串口通信

STM32学习笔记 基于江协科技教程实现串口通信

一、前言

串口通信(UART)是嵌入式系统中最基础、最常用的通信方式之一,在STM32开发中占有重要地位。它结构简单、易于实现,常用于调试信息输出、与传感器模块通信或与其他微控制器进行数据交换。通过学习江协科技的相关教程,我们可以快速掌握在STM32平台上实现串口通信的核心步骤与技巧。

二、串口通信基本原理

串口通信是一种异步全双工通信方式,主要依靠两根数据线(TX发送、RX接收)进行数据传输,无需时钟线。其核心参数包括:

  • 波特率(Baud Rate):决定通信速度,常见有9600、115200等。
  • 数据位(Data Bits):通常为8位。
  • 停止位(Stop Bits):通常为1位。
  • 奇偶校验位(Parity Bit):用于简单的错误检测,可选。

在STM32中,USART(通用同步异步收发器)模块提供了完整的串口通信硬件支持。

三、硬件连接与初始化(以STM32F103C8T6为例)

1. 硬件连接

通常将开发板的USART1TX(PA9)连接到USB转TTL模块的RX,USART1RX(PA10)连接到USB转TTL模块的TX,并确保共地(GND)。

2. 初始化步骤(基于标准库或HAL库)

以使用STM32CubeMX配合HAL库为例,关键步骤如下:

a. 引脚配置
在CubeMX中使能USART1,并设置模式为“Asynchronous”(异步)。PA9和PA10会自动配置为复用功能。

b. 参数设置
- 波特率:115200 Bits/s
- 字长:8 Bits
- 停止位:1
- 校验位:None
- 硬件流控制:Disable

c. 生成代码与用户代码添加
生成代码后,在main.c的用户代码区添加初始化后测试代码。

四、核心功能代码实现

1. 发送单个字符与字符串

`c // 发送一个字符 HALUARTTransmit(&huart1, (uint8_t *)&ch, 1, 1000);

// 发送字符串(以'\0'结尾)
char msg[] = "Hello STM32!\r\n";
HALUARTTransmit(&huart1, (uint8_t *)msg, strlen(msg), 1000);
`

2. 接收数据(轮询方式)

uint8t rxdata;
if(HALUARTReceive(&huart1, &rxdata, 1, 1000) == HALOK){
// 成功接收到一个字节,存放在rx_data中
}

3. 中断接收(推荐方式)

a. 使能接收中断
在CubeMX的NVIC设置中使能USART1全局中断,或在代码中调用:
`c
_HALUARTENABLEIT(&huart1, UARTITRXNE); // 使能接收中断
`

b. 编写中断回调函数
重写HAL<em>UART</em>RxCpltCallback回调函数来处理接收完成事件:
`c
uint8t rxbuffer[1];
void HALUARTRxCpltCallback(UARTHandleTypeDef *huart){
if(huart->Instance == USART1){
// 处理接收到的数据 rx
buffer[0]
// ... 例如,回显数据
HALUARTTransmit(&huart1, rxbuffer, 1, 1000);
// 重新启动接收,以等待下一个字符
HAL
UARTReceiveIT(&huart1, rxbuffer, 1);
}
}
`
main函数初始化后,需先启动一次中断接收:
HAL</em>UART<em>Receive</em>IT(&huart1, rx_buffer, 1);

4. 重定向printf(方便调试)

usart.c文件中添加以下代码,即可使用printf函数通过串口输出:
`c
#include

#ifdef GNUC

#define PUTCHARPROTOTYPE int ioputchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif

PUTCHARPROTOTYPE{
HAL
UARTTransmit(&huart1, (uint8t *)&ch, 1, 1000);
return ch;
}
`
之后在工程属性中勾选“Use MicroLIB”(针对Keil)或进行相应设置。

五、调试与注意事项

  1. 波特率一致:确保STM32与上位机(如串口助手)的波特率等参数设置完全相同。
  2. 接线正确:TX接RX,RX接TX,切勿接反。
  3. 电压匹配:STM32是3.3V电平,确保USB转TTL模块支持3.3V或已做电平转换。
  4. 中断优先级:如果系统中存在多个中断,需合理配置串口接收中断的优先级。
  5. 缓冲区管理:在中断接收大量数据时,应使用环形缓冲区(Ring Buffer)来避免数据丢失。

六、进阶应用

掌握基础收发后,可以进一步探索:

  • DMA通信:利用DMA进行串口数据收发,极大减轻CPU负担,尤其适合高速或大数据量传输。
  • 自定义通信协议:如设计包含帧头、命令字、数据长度、校验和、帧尾的简单协议,以提高通信可靠性。
  • 多串口协同:STM32通常有多个USART,可同时与不同设备通信。

七、

通过江协科技教程的系统学习,我们从原理到实践完成了STM32串口通信的开发。从简单的引脚配置、参数设置,到轮询与中断两种数据收发方式,再到printf重定向这一实用技巧,构成了串口应用的坚实基础。在实际项目中,应根据具体需求(如速度、实时性、数据量)灵活选择轮询、中断或DMA方式。串口作为嵌入式开发的“万能钥匙”,其稳定实现是后续学习更复杂通信方式(如SPI、I2C、CAN)的重要前提。不断练习并尝试上述进阶应用,将能更深入地理解和驾驭STM32的通信功能。


如若转载,请注明出处:http://www.zhaoniuwang688.com/product/85.html

更新时间:2026-04-22 15:06:06