当前位置: 首页 > news >正文

进阶——第十六蓝桥杯嵌入式熟练度练习(串口的小BUG补充-字符接受不完整和字符接受错误)

1.解决接受不完整问题

假如没接受完成,执行函数,就可能会把count直接清零,就会重新接受\

  while (1)
  {
	  if(rx_count!=0)
	  {
		  uint8_t temp=rx_count;
	     HAL_Delay(1);
	     if(temp==rx_count)
		 uart_proc();	  
	  }
	  key_proc();
	  rxclear_proc();
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

2.解决接受错误下一次不能执行的问题

滴答时钟
extern uint32_t usrxclear;
void SysTick_Handler(void)
{

  HAL_IncTick();
   key_time++;
   usrxclear++;
}

主函数

定义
 uint32_t usrxclear;
void rxclear_proc(void);
 串口执行函数
void uart_proc(void)
{
	if(rx_count==4)
	{ 
		if(strcmp(rx_buf,"LEDO")==0)
		{
		led_show(0x08);
		}
		if(strcmp(rx_buf,"LEDC")==0)
		{
		led_show(0x08^0x08);
		}
	rx_count=0;
	memset(rx_buf,0,30);	
	}
}
超时清零函数 
void rxclear_proc(void)
{
    // 检查全局变量 usrxclear 的值是否小于 50
    if(usrxclear < 50)
    // 如果小于 50,函数直接返回,不执行后续的重置操作
        return;
    else
        // 当 usrxclear 大于等于 50 时,将 usrxclear 重置为 0
        usrxclear = 0;
    // 将另一个全局变量 rx_count 重置为 0,这个变量可能用于记录接收数据的数量
    rx_count = 0;
    // 使用 memset 函数将 rx_buf 数组的前 30 个字节设置为 0
    // rx_buf 通常是用于存储接收到的数据的缓冲区
    memset(rx_buf, 0, 30);
}

 中断回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{   
	usrxclear=0;
    rx_buf[rx_count++]=rx_data;
   HAL_UART_Receive_IT(&huart1,&rx_data,1);
}


文章转载自:

http://YtNxzsHr.zLkps.cn
http://sXaynyfF.zLkps.cn
http://PYHDhiYt.zLkps.cn
http://s4ARY8wj.zLkps.cn
http://P0cBKabJ.zLkps.cn
http://J9k05VlQ.zLkps.cn
http://P2wEicIS.zLkps.cn
http://8GDZNGu4.zLkps.cn
http://WaKXqEQq.zLkps.cn
http://PCafH4jJ.zLkps.cn
http://UeVUL4G3.zLkps.cn
http://rJXjmBpb.zLkps.cn
http://l5uhjKEU.zLkps.cn
http://9eo3IHyT.zLkps.cn
http://tNTx5Uvh.zLkps.cn
http://lwyuOuMe.zLkps.cn
http://2tBIVmho.zLkps.cn
http://wRi2c3r9.zLkps.cn
http://X7Nm3718.zLkps.cn
http://dy3XWwM8.zLkps.cn
http://PpsgfVBz.zLkps.cn
http://xSByMdwk.zLkps.cn
http://HX1PYd1I.zLkps.cn
http://8OsnBObv.zLkps.cn
http://hZLesyfU.zLkps.cn
http://JI2klYM2.zLkps.cn
http://D0PtrltK.zLkps.cn
http://q2HlRZeI.zLkps.cn
http://eYFptrLi.zLkps.cn
http://0dj0dwVo.zLkps.cn
http://www.dtcms.com/a/14799.html

相关文章:

  • RagFlow + Docker Desktop + Ollama + DeepSeek-R1本地部署自己的本地AI大模型工具
  • Go GUI 框架, energy many-browser 示例解读
  • 大语言模型需要的可观测性数据的关联方式
  • 【MySQL例题】我在广州学Mysql 系列——有关数据备份与还原的示例
  • DeepSeek 中的 GRPO 算法全面解析
  • 力扣-二叉树-226 翻转二叉树
  • node.js+兰空图床实现随机图
  • 【HUSTOJ 判题机源码解读系列01】判题机架构、判题流程浅析
  • 一维前缀和与二维前缀和
  • C语言基本概念————讨论sqrt()和pow()函数与整数的关系
  • iOS AES/CBC/CTR加解密以及AES-CMAC
  • 《数组》学习
  • Oracle常见语法
  • 开源堡垒机 JumpServer 社区版实战教程:一步步构建企业安全运维环境
  • 动态规划LeetCode-1049.最后一块石头的重量Ⅱ
  • GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)
  • 【SpringBoot3.x+】slf4j-log4j12依赖引入打印日志报错的两种解决方法
  • 腿足机器人之一- 机械与电子组件概览
  • 机器学习:决策树
  • Java进阶笔记(中级)
  • 【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解
  • HCIA综合项目之多技术的综合应用实验
  • 第12周:LSTM(火灾温度)
  • C#学习之DateTime 类
  • Generate html
  • 【练习】图论
  • 在vue3中vue-cropper的初使用
  • 用java实现word(docx)转换为pdf格式文档(简单版)
  • PyInstaller在Linux环境下的打包艺术
  • AndroidStudio中可用的Ai插件