你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G431RBT6串口空闲中断接收和结束符接收

[复制链接]
STMCU小助手 发布时间:2023-3-2 13:08
一、定长接收---采用

二、以特定的符号作为结束符

问题:①单个字符接收②转义字符
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
  2.         if(huart->Instance == USART1){
  3.                 Rx_Flag = 1;
  4.         }
  5. }

  6. void UART_Proc_EOC(){
  7.         static int trans_state = 0;
  8.         if(Rx_Flag){
  9.                 Rx_Flag = 0;
  10.                 switch(trans_state){
  11.                         case 0:
  12.                                 if(RxTemp == TRANS_CHAR)//如果接收到的字符是转义字符
  13.                                         trans_state = 1;//就让其标志为1
  14.                                 else if(RxTemp == END_CHAR){//如果接收到的字符是结束符
  15.                                         Update_Flag = 1;//就意味着本次接收已经结束
  16.                                 }
  17.                                 else {
  18.                                         RxBuf[RxCount++] = RxTemp;//如果接收到的是数据,就把该字符放到数组里
  19.                                 }
  20.                                 break;
  21.                         case 1://当接收到的字符是转义字符或者结束字符
  22.                                 if(RxTemp != END_CHAR){//是转义字符但不是结束字符
  23.                                         RxBuf[RxCount++] = TRANS_CHAR;//此转义字符是数据,要将他写进数组
  24.                                         RxBuf[RxCount++] = RxTemp;
  25.                                 }
  26.                                 else {
  27.                                         RxBuf[RxCount++] = RxTemp;
  28.                                 trans_state = 0;
  29.                                 break;
  30.                 }
  31.         }
  32.         if(Update_Flag == 0){//表明还没有遇到结束字符,仍需要继续接收中断
  33.                 HAL_UART_Receive_IT(&huart1, &RxTemp, 1);
  34.         }
  35. }
复制代码

三、采用空闲中断的方式(字符串基本上是连续发送,一旦空闲实践大于某个时间,就认为这串数据接收完了),适用于不定长的接收

①常规配置

119179ed10bb435a8d2805200a5d11c0.png

②中断的方式

2cadacd22b5448ee8007ad8f903801f1.png


函数中
    在中断模式下接收一定量的数据,直到接收到预期数量的数据或者发生空闲中断
    HAL_UART_ReceiveToIdle_IT(&huart1, (uint8_t *)USART_RxBuf, Rx_Len);//IDLE使用

写上这个函数表明接收端已经开启了空闲中断

四、DMA接收,适合接收大量的数据,一般用在报文(协议)的传输,找完整的报文(有格式)
————————————————
版权声明:想要优秀点儿

收藏 评论0 发布时间:2023-3-2 13:08

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版