STM32串口通讯与USART学习指南:HEX和文本数据包的收发详解
目录
stm32 串口通讯 和 USART学习 二(HEX和文本数据包收发)
一、HEX和文本数据包的收发
1)数据包格式
- 对数据进行限幅,避免相同
- 固定数据包的长度
- 增加包头包尾长度,使其尽量为载荷数据无法出现的样子

2)数据包收发逻辑

二、实验
1)串口收发HEX数据包
// 接收信息中断部分
void USART1_IRQHandler(void){
u8 i = 0;
static u8 RxState = 0;
if(USART_GetITStatus(USART1, USART_IT_RXNE)){
u8 RxData = USART_ReceiveData(USART1);
if(RxState == 0){
if(RxData == 0xFF){
RxState = 1;
}
}else if(RxState == 1){
Serial_RxPacket[i++] = RxData;
if(i == 4){
RxState = 2;
i = 0;
}
}else if(RxState == 2){
if(RxData == 0xEF){
RxState = 0;
RxFlag = 1;
}
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
2)串口收发文本数据包
// 主函数循环部分
while(1)
{
if(Serial_RxFlag == 1){
OLED_ShowString(4, 1, " ");
OLED_ShowString(4, 1, Serial_RxPacket);
if(strcmp(Serial_RxPacket, "LED_ON") == 0){
LED1_ON();
Serial_SendString("LED_ON_OK\r\n");
OLED_ShowString(2, 1, " ");
OLED_ShowString(2, 1, "LED_ON_OK");
}else if(strcmp(Serial_RxPacket, "LED_OFF") == 0){
LED1_OFF();
Serial_SendString("LED_OFF_OK\r\n");
OLED_ShowString(2, 1, " ");
OLED_ShowString(2, 1, "LED_OFF_OK");
}else{
Serial_SendString("ERROR_COMMAND\r\n");
OLED_ShowString(2, 1, " ");
OLED_ShowString(2, 1, "ERROR_COMMAND");
}
Serial_RxFlag = 0;
}
}
完整代码见资源绑定
附学习参考网址
- STM32入门教程-2023版 细致讲解 中文字幕
欢迎大家有问题评论交流 (* ^ ω ^)
作者:茯苓gao