2710|3

36

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ART-Pi评测 串口收发功能及数据帧识别 [复制链接]

 

       按照计划,这次改配置一下串口了。打开CubeMX的工程文件,根据原理图选择输出到调试器的串口号,应该是UART4 ,这样的好处是对照上位机收发方便,无需另外使用USB转串口的线材。如下图配置

       记得开启中断,生成代码后更新一下MDK编辑器就好。然后初始化代码中已经有了UART4的基础配置,这里除了开始接受中断,另外加上空闲中断,以便使用IDLE来做简单的帧识别,也就是能够简单的做到不定长度的帧结构处理。HAL库封装的函数也是用起来比较方便的,在串口初始化的用户代码空间内添加两行

  • __HAL_UART_ENABLE_IT(&huart4,UART_IT_RXNE);
  • __HAL_UART_ENABLE_IT(&huart4,UART_IT_IDLE);

然后就可以写中断服务函数里的处理代码了,这里还是优先测试收发,所以收到的内容再原样发出去,代码如下:

  • void UART4_IRQHandler(void)
  • {
  • /* USER CODE BEGIN UART4_IRQn 0 */
  • static uint8_t RecvBuffer[32], BufferSize;
  • /* USER CODE END UART4_IRQn 0 */
  • //HAL_UART_IRQHandler(&huart4);
  • /* USER CODE BEGIN UART4_IRQn 1 */
  • if(RESET != __HAL_UART_GET_FLAG(&huart4,UART_FLAG_RXNE)){
  • RecvBuffer[BufferSize++] = UART4->RDR;
  • }
  • if(RESET != __HAL_UART_GET_FLAG(&huart4,UART_FLAG_IDLE)){
  • __HAL_UART_CLEAR_IDLEFLAG(&huart4);
  • HAL_UART_Transmit(&huart4,RecvBuffer,BufferSize,0xff);
  • BufferSize = 0;
  • }
  • /* USER CODE END UART4_IRQn 1 */
  • }

可以使用库中原有的HAL_UART_IRQHandler(&huart4);函数,然后重写回调函数,也可以按照我这样的直接粗暴,当然这里用寄存器写是最好不过了。

以上内容做好,就可以用PC上位机来测试一下了,事实与预期一致,收发完全吻合

以上是空闲中断作为不定长度帧的识别方式,但这种方式也并不完美,要根据实际应用来选择,不完美的地方我记得ST有篇官文应用笔记说明过,可以再找出来看看。补充另一种方式,按字节识别的方法,可用于帧结构明确的情况的下的处理。代码结构如下:

  • if(RESET != __HAL_UART_GET_FLAG(&huart4,UART_FLAG_RXNE)){
  • Recv = UART4->RDR;
  • switch(status){
  • case 0:
  • status = 1;
  • break;
  • case 1:
  • status = 2;
  • case 2:
  • RecvBuf[++count] = Recv;
  • //帧结构完整
  • {
  • status =0;
  • count = 0;
  • }
  • break;
  • default:break;
  • }
  • }

串口处理就到这里,基于ST的便捷工具和arm MDK的强大环境,使得开发过程越来越省心,不得不提一下,厂家的板卡也设计的很实在,板载调试器,完美治愈了我这种不喜欢扯很多线的臭毛病。

最新回复

谢谢分享,期待后续!   详情 回复 发表于 2021-6-15 17:27
点赞 关注
 

回复
举报

7020

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

事实与预期一致

不只是ST的便捷工具和arm MDK的强大环境确实很便捷

是楼主技术高

 

点评

着实过奖  详情 回复 发表于 2021-6-13 13:14
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
Jacktang 发表于 2021-6-13 10:58 事实与预期一致 不只是ST的便捷工具和arm MDK的强大环境确实很便捷 是楼主技术高  

着实过奖

 
 
 

回复

7783

帖子

2

TA的资源

五彩晶圆(高级)

4
 

谢谢分享,期待后续!

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖探索 | 和村田一起,深挖 GNSS 开发!
活动时间:即日起-5月11日
活动奖励:智能手环、螺丝刀套装、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 9

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表