stm32 串口通讯 和 USART学习 二(HEX和文本数据包收发)

目录

stm32 串口通讯 和 USART学习 二(HEX和文本数据包收发)

一、HEX和文本数据包的收发

1)数据包格式

  • 通常使用包头包尾来区分数据包
  • 如何防止数据中出现包头包尾导致误判
    1. 对数据进行限幅,避免相同
    2. 固定数据包的长度
    3. 增加包头包尾长度,使其尽量为载荷数据无法出现的样子
  • 要根据实际场景设计数据包,HEX计算方便,文本更易读
  • Hex和文本数据包的格式

2)数据包收发逻辑

  • 发送数据包容易,接受困难
  • 使用 状态机+标志位 可以很好的实现收发逻辑
  • Hex和文本数据包的收发逻辑

二、实验

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;
    	}
    }
完整代码见资源绑定

附学习参考网址

  1. STM32入门教程-2023版 细致讲解 中文字幕

欢迎大家有问题评论交流 (* ^ ω ^)

相关推荐
续写烂尾1 小时前
SD NAND存储实测:正点原子STM32精英板SDIO读写验证全流程
stm32·单片机·嵌入式硬件
for_ever_love__2 小时前
python基础语法学习: 数据容器
windows·python·学习
云空3 小时前
《电子专业完整学习路线图(分两套:本科四年版 / 零基础自学速成版)》
科技·学习·学习方法·高考
min(a,b)3 小时前
学习第16天:LangGraph 与 Agent 工作流编排
学习
woshihuanglaoshi3 小时前
鸿蒙技术进阶全景高级成长体系:从初中级到架构师的技能树/学习路径/项目实战/认证体系系统性方法论
学习·华为·harmonyos
AI即插即用3 小时前
即插即用系列 | IEEE TMI PLG-HN:原型学习引导的 CNN-Transformer 混合网络,攻克乳腺肿瘤分割难题
人工智能·深度学习·神经网络·学习·目标检测·cnn·transformer
zlinear数据采集卡3 小时前
USB HS 480M高速传输与SRAM记录仪:DABM-D223数据存储系统全解析
arm开发·嵌入式硬件·fpga开发·开源
wuyk5554 小时前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
Crkylin4 小时前
Cortex-M SysTick系统滴答定时器详解
单片机·嵌入式硬件
for_ever_love__4 小时前
python基础语法学习: 变量, 输入输出, 运算符
网络·python·学习