第七集:串口的轮询模式(定长数据)
串口的轮询模式(Polling Mode)是串口通信中一种常见的数据处理方式,指通过周期性主动查询的方式,检查串口是否有数据到达、发送缓冲区是否空闲等状态,从而完成数据的接收或发送。除了轮询模式外还有中断、DMA等等原理图引脚功能图芯片实现功能电脑发送数据控制指定小灯的亮灭情况,stm32开发板需要回复电脑当前收到的指令发送R0,回复R0(发送什么回复什么两个字节的数据[0]选择要控制的小灯,R代
什么是串口,串口有哪些
串口的核心特点
- 串行传输:数据通过单条数据线(或一对差分线)逐位发送,而非并行接口的多条线同时传输。
- 全双工 / 半双工:支持双向通信,全双工模式下可同时发送和接收数据(如 RS-232),半双工则需交替进行(如 RS-485)。
- 硬件协议依赖:需通过特定协议定义数据格式(如起始位、数据位、校验位、停止位),确保收发双方同步。
- 广泛兼容性:历史悠久,支持多种设备和工业场景,至今仍在嵌入式系统、工业控制等领域大量使用。

什么是轮询模式
串口的轮询模式(Polling Mode)是串口通信中一种常见的数据处理方式,指通过周期性主动查询的方式,检查串口是否有数据到达、发送缓冲区是否空闲等状态,从而完成数据的接收或发送。
除了轮询模式外还有中断、DMA等等

原理图



引脚功能图

芯片:
STM32F103C8T6
实现功能:
电脑发送数据控制指定小灯的亮灭情况,stm32开发板需要回复电脑当前收到的指令
发送R0,回复R0(发送什么回复什么)
两个字节的数据
[0] 选择要控制的小灯,R代表红色小灯,G代表绿色小灯,B代表蓝色小灯
[1] 0代表关,1代表开
文件
serial
需要用到的配件
STM32 开发板、ST-Link或USB 数据线、开发板自带ttl串口转usb模块、typec线

ttl串口转usb模块
CubeMX 设置
芯片配置
点击PA7,选择GPIO_Output
点击PA6,选择GPIO_Output
点击PB0,选择GPIO_Output
在引脚上右键选择Enter User Label
PA6设置为LED_BLUE
PA7设置为LED_GREEN
PB0设置为LED_RED
System Core系统内核
SYS配置:
Debug:Serial Wire
Connectivity通信
UART配置
根据引脚图
将USART2的Mode改成ttl串口的模式异步通信(Asynchronous)
保证两设备的波特率(baud rate)相同
原理与函数
ttl串口 异步通信(Asynchronous)
电压反应的是电势差,所以一定要有同样的标准,那么两设备一定要共地。

TX发送;RX接收
一定一定要设置STLink模式(保证可以多次烧录程序)

串口数据发送函数 HAL_UART_Transmit();
串口接收数据函数HAL_UART_Receive();
写入GPIO口的函数HAL_GPIO_WritePin();
最后一个参数GPIO_PinState
高电平:GPIO_PIN_SET
低电平:GPIO_PIN_RESET
最大值:Hal_MAX_DElAY(0xFFFFFFFF)
计算长度函数strlen(),需要声明include“string.h”
预处理命令要在USER CODE BEGIN Includes和END之间
/* USER CODE BEGIN Includes */
#include<string.h>
/* USER CODE END Includes */
在串口发送函数 HAL_UART_Transmit()注意参数类型,比如它的第二个参数是一个uint8_t的指针
对于char这种数据,和unit8_t*都是八位会出现警告,可以强制转换
比如定义了一个char message[]="hello world"
那么此时第二个数据应该强转 (unit8_t*)message
在电脑上查看stm32发送的信息需要借助串口助手波特律动 串口助手 - 直接在浏览器使用的串口调试工具波特律动串口助手是一款直接在浏览器使用的串口调试工具,支持串口通信、数据收发、协议解析。无需安装,浏览器直接使用,适用于嵌入式开发、硬件调试、物联网设备测试。
https://serial.baud-dance.com/
这个博主真的是大大的良心(๑•̀ㅂ•́)و✧,每次打开这个在线的串口助手都会有界面更新
关于这个在线串口调试工具的介绍
代码
/* USER CODE BEGIN 2 */
uint8_t receiveData[2];
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_UART_Receive(&huart2,reciveData,2,HAL_MAX_DELAY);
HAL_UART_Transmit(&huart2,reciveData,2,100);
//GPIO_PinState是用于表示gpio高低电平的变量类型
GPIO_PinState state = GPIO_PIN_SET;
if(reciveData[1]=='0')
{
state=GPIO_PIN_RESET;
}
if(reciveData[0]=='R')
{
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, state);
}
else if(reciveData[0]=='G')
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, state);
}
else if(reciveData[0]=='B')
{
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, state);
}
/* USER CODE END WHILE */
快捷键
ctrl+s保存
出现代码提示:Alt+/
Ctrl+点击某函数:可以对该函数进行溯源
对于函数输入参数时但第一个数据输入完毕后,按下Tab直接跳转到第二个数据
面对软件卡顿F5刷新
拓展
ttl肖特基触发器和ttl串口的区别
TTL 肖特基触发器(TTL Schottky Trigger)和 TTL 串口(TTL UART)都属于 TTL(Transistor-Transistor Logic,晶体管 - 晶体管逻辑)电平标准的范畴,但两者的功能和应用场景截然不同,仅在电平特性上存在关联。
两者都遵循 TTL 电平规范,即高电平表示逻辑 1,低电平表示逻辑 0,电平范围兼容(这是最核心的关联)。
更多推荐



所有评论(0)