1. 设计要求

设计使用STM32的USART串口与PC机进行数据收发的模块,在PC机上运行串口调试助手时,该模块可与PC机进行数据双向传输。具体功能包括:

接收PC机发送的以@开头、\r\n结尾的数据包;

在OLED屏分区显示收发数据内容;

自动发送响应信息"received\r\n"给PC机;

实时更新显示内容;

2. 硬件设计

本设计使用STM32F103系列的STM32F103C8T6芯片作为主控制器,系统的硬件电路如图1所示。

图1 系统的电路原理图

2.1 系统元器件参数

核心控制器:

STM32F103C8T6,基于ARM Cortex-M3内核,主频72MHz,64KB Flash,20KB RAM

串口通信模块:

USART1:波特率115200,8位数据位,1位停止位,无校验位;

CH340G USB转串口芯片,提供稳定的USB转TTL通信;

显示模块:

0.96寸OLED显示屏,SSD1306驱动芯片,128×64分辨率,I2C接口;

时钟电路:

8MHz外部晶振,提供系统主时钟;

32.768kHz外部晶振,提供RTC时钟源;

2.2 系统工作原理

系统通过USART1与PC机建立串口通信连接,当PC机发送符合格式要求的数据包时,STM32通过中断方式接收数据,解析数据包内容,并在OLED屏幕上实时显示。同时,系统自动向PC机发送确认响应,实现双向通信功能。

3. 软件设计

3.1 主程序设计

主程序工作过程描述:

1. 初始化OLED显示屏;

2. 初始化串口通信模块;

3. 在OLED上显示固定的标题文字;

4. 进入主循环,持续检测数据接收标志;

5. 当接收到有效数据时,更新OLED显示并发送响应;

图2 主程序流程图

3.2 OLED显示子程序设计

OLED_ShowString()工作过程:

1. 接收行号、列号和字符串指针参数;

2. 遍历字符串中的每个字符;

3. 调用OLED_ShowChar()逐个显示字符;

4. 遇到字符串结束符'\0'时停止;

图3 OLED显示子程序流程图

3.3 串口发送子程序设计

串口发送函数组实现:

- serial_sendbyte(): 发送单个字节,等待发送完成;

- serial_sendstring(): 发送字符串,遍历直到遇到'\0'

- serial_sendarray(): 发送字节数组,指定长度;

- serial_sendnumber(): 发送数字,转换为字符串形式;

- serial_printf(): 格式化输出,支持可变参数;

图4 串口发送子程序流程图

3.4 串口中断处理子程序设计

USART1_IRQHandler()工作过程:

采用状态机方式解析数据包,状态转移如下:

状态0: 等待起始符'@'

状态1: 接收数据内容,遇到'\r'进入状态2

状态2: 等待结束符'\n',完成数据包接收

图5 串口中断处理子程序流程图

  1. 测试结果

OLED屏幕正确分区显示"txpacket"和"rxpacket"标识

接收数据实时显示在指定区域

PC端正确收到"received\r\n"响应信息

什么都没发送,初始状态:

第一次发送“STM32”

第二次发送“F103”

第三次发送“STM32F103”

系统稳定运行,无数据丢失现象

5.main 函数主要代码(更多详细看网盘分享)

int main(void)
{
	OLED_Init();
	serial_void();
	
	OLED_ShowString(1,2,"txpacket");
	OLED_ShowString(2,2,"rxpacket");
	while(1)
	{
		if(serial_rxflag==1)
		{
			OLED_ShowString(4,2,"            ");
			OLED_ShowString(4,2,serial_rxpacket);
			serial_rxflag=0;
			serial_sendstring("recevied\r\n");
		}
	}
}

6.总结

本实验成功实现了STM32与PC机的双向串口通信系统,具备以下特点:

可靠的数据包解析机制,使用状态机确保数据完整性;

实时的OLED显示更新,提供直观的数据监控界面;

灵活的串口发送功能,支持多种数据格式输出;

稳定的中断处理,保证系统响应及时性;

系统具有良好的实用性和扩展性,可为后续嵌入式通信应用开发提供基础框架。

通过网盘分享的文件:PC 机串口通信模块的设计
链接: https://pan.baidu.com/s/19hxp5fX8u5rh9y1wgS-p2g?pwd=iaw2 提取码: iaw2

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐