完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 STM32WB5MMG,但我认为这个问题与 MCU 的无线电部分无关,所以我在更一般的社区发帖。我希望没关系。
我正在使用 HAL_UART_Receive_DMA 函数通过 UART 从 GPS 接收器读取数据。数据以 230400 波特率传入。DMA 配置为 512 字节的简单(非循环)缓冲区。在 HAL_UART_RxCpltCallback 处理程序中,我再次调用 HAL_UART_Receive_DMA 以开始新的传输。 我这样做(而不是使用循环模式),以便我可以通过计算 512 字节的完整“帧”数并添加 (512 - CNDTR) 来计算传输的字节总数。我担心的是,如果我使用循环缓冲区,那么相对于 CNDTR 更新的帧数更新时间会有些模糊。 通常,这工作正常。但是在接收数据几分钟后,CNDTR 似乎停止了更新。我已经检查过 GPS 模块仍然有数据传入。奇怪的是,当CNDTR停止更新时,它总是等于511(即比缓冲区长度小1)。 我偶然发现了一种获得类似结果的方法......
但是,永远不会调用 HAL_UART_ErrorCallback,并且当错误发生时,似乎没有任何寄存器指示溢出(具体查看 DMA2 和 DMAMUX1 SFR)。 粗略地说,这是我的代码结构:
|
|
相关推荐
1个回答
|
|
最有可能的是 UART 溢出,CNDTR 一直低于满意味着这是 DMA 重启不够快的结果(难怪,考虑到 Cube/HAL 膨胀)。坚持循环 DMA,学习处理潜在的 NDTR 环绕。
> 然而,HAL_UART_ErrorCallback 从未被调用, 调试吧,Cube是开源的。溢出不是 DMA/DMAMUX“功能”,而是 UART,所以看那里。RM 是你的朋友。检查,如果底层 UART ISR 被调用,如果是,问题出在 Cube 的 harness 中,如果没有,调试通常中断被调试。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2754 浏览 1 评论
3246 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1817 浏览 1 评论
3657 浏览 6 评论
6048 浏览 21 评论
1345浏览 4评论
204浏览 3评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
360浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
453浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
278浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 02:27 , Processed in 1.176123 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号