2.1.0SDK-HIF UART通信出现的问题

u010750922 2026-08-26 14:22:15

已经开启了HIF UART通信,串口1通信协议,串口0 printf打印信息

1. HIF UART用底层的LL_UART_TransmitData直接发送70字节的数据时,最后2个字节的数据丢失,但是在前面加一个printf打印出来,却能完整发送,比较奇怪,字节较少的时候,不会出现丢失的情况。

2. 使用HIF UART接收处理函数中,也是加了打印能够完全处理没问题,不加打印时,有时候明明是一起发送的数据,也会直接跳出来-比较奇怪

 

以上两个问题,不知道是不是使用不恰当造成?还是bug?为什么这么要这么做,因为需要传输自己的协议,HIF框架相对而言太啰嗦了。

 

...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayo212 08-26 15:18
  • 打赏
  • 举报
回复

1、UART 的硬件 TxFIFO 大小是 64 字节,如果直接调用 LL_UART_TransmitData 发送数据,可能会因为数据溢出导致丢失部分数据,可以在发送数据之前调用 LL_UART_IsActiveFlag_TXFNF 判断 TxFIFO 是不是可以写入数据,该函数返回非 0 则表示可写入;
2、接收数据时, CPU 处理较快,能够快速读完 RxFIFO 的数据,导致 HAL_UART_IsRxReady 返回值为 0 ,所以提前退出了,加打印后有了延迟,在下一次判断时,返回值非 0 ,所以能够接收完整数据,可尝试按照以下方案修改图中的 for 循环:

while (recvIdx < len) {
    if (HAL_UART_IsRxReady(hifPHYCtrl.hifDev)) {
        pDataBuff[recvIdx++] = HAL_UART_GetRxData(hifPHYCtrl.hifDev);
    }
}
u010750922 08-26 15:43
  • 举报
回复
@nayo212 1. if(LL_UART_IsActiveFlag_TXFNF(uart_instance[temp_dev-&gt;uart_id])!=0) LL_UART_TransmitData(uart_instance[temp_dev-&gt;uart_id], data); 加了这句,还是不能完整打印,每发一个字节,printf打印一个字,不会漏--这个是咋回事?能帮忙分析一下不?解决不了也算了,反正多打印一份问题不大 2. 这个改的话,变成了指定长度接收了,协议是变长度,还要前后补,比较麻烦----还是直接打印吧,反正上报的数据多---
JerryJ_Li 08-26 15:04
  • 打赏
  • 举报
回复

您的协议格式是在HIF上进行修改还是重新重新实现一个私有协议?

u010750922 08-26 15:26
  • 举报
回复
@JerryJ_Li 移植我们一直通用的私有协议,HIF协议也启动了,只是在接收回调的部分加了一个锚点处理我们自己的协议,其余不动。
RuifDu 08-26 14:53
  • 打赏
  • 举报
回复

你好:
请问下这是基于哪个工程修改的呢?

u010750922 08-26 14:55
  • 举报
回复
@RuifDu POSTURE-RS6240

229

社区成员

发帖
与我相关
我的任务
社区描述
欢迎来到正和微芯官方社区,这里是毫米波雷达技术爱好者、开发者、技术专家以及行业领袖的聚集地。我们致力于提供一个开放、合作、创新的交流平台,让每一位成员都能在这里找到价值、获得启发、实现成长。
硬件架构射频工程物联网 企业社区 广东省·珠海市
社区管理员
  • Possumic正和微芯官方
  • sblxk008
  • 波谱Sense
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧