当前位置: 首页 > 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 的值是否小于 50if(usrxclear < 50)// 如果小于 50,函数直接返回,不执行后续的重置操作return;else// 当 usrxclear 大于等于 50 时,将 usrxclear 重置为 0usrxclear = 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://www.lryc.cn/news/536085.html

相关文章:

  • 数据结构-链式二叉树
  • 【git-hub项目:YOLOs-CPP】本地实现01:项目构建
  • 250213-RHEL8.8-外接SSD固态硬盘
  • 如何本地部署DeepSeek?
  • leetcode:627. 变更性别(SQL解法)
  • 51单片机(国信长天)矩阵键盘的基本操作
  • 封装一个sqlite3动态库
  • Transformer以及BERT阅读参考博文
  • AI学习记录 - 最简单的专家模型 MOE
  • 急停信号的含义
  • 单调队列queue
  • 【漫话机器学习系列】091.置信区间(Confidence Intervals)
  • UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x99
  • DeepSeek应用——与word的配套使用
  • 递归乘法算法
  • 【免费】2004-2020年各省废气中废气中二氧化硫排放量数据
  • CNN-LSSVM卷积神经网络最小二乘支持向量机多变量多步预测,光伏功率预测
  • 【油猴脚本/Tampermonkey】DeepSeek 服务器繁忙无限重试(20250213优化)
  • 单调栈及相关题解
  • 每日温度问题:如何高效解决?
  • #渗透测试#批量漏洞挖掘#致远互联AnalyticsCloud 分析云 任意文件读取
  • 统计安卓帧率和内存
  • 大数据学习之PB级百战出行网约车二
  • C语言第18节:自定义类型——联合和枚举
  • C++病毒(^_^|)(2)
  • 在vscode中拉取gitee里的项目并运行
  • centos7 防火墙开放指定端口
  • Day42(补)【AI思考】-编译过程中语法分析及递归子程序分析法的系统性解析
  • AI成为基础设施有哪些研究方向:模型的性能、可解释性,算法偏见
  • 写一个鼠标拖尾特效