完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我必须使用 STM32F401 设计一个特殊的 USB <-> RS485 转换器。
我首先使用 STM32F4071G 评估板实现了该项目,该评估板具有 DMA 支持的 USART 功能且没有 RTOS,使用带有 FW-F4_V1.25.1 的 STM32Cube 并且一切正常。 在将软件移植到带有目标 MCU STM32F401 的 Nucleo 评估板后,从 RS485 到 USB 的传输也可以完美地达到 115200 的波特率和每次拍摄千字节的数据。 但是,在将所有数据正确发送到 RS485 端口后,从 USB 到 RS485,调用 UART 溢出 ISR,并且 HAL 保持在永久循环中以重新发送数据,现在立即出现溢出错误,只能通过重置来停止。 该错误的发生与波特率(我尝试将其降至 300)和字节数无关。如果我仅通过 USB 发送一个字节,它会以与发送 64 个字节(一次 USB 传输的最大字节数)相同的方式崩溃。数据将全部传输并到达 RS485 设备,但 HAL_UART_TxCpltCallback 不会被调用,而是溢出中断。 我同时在社区和互联网上搜索解决方案。但是,尽管这个问题经常被不同的用户报告(特别是对于 STM32-HAL),但没有提出解决方案。 系统时钟设置为84MHz,APB1外设时钟设置为42MHz。我可以理解如果 MCU 速度较慢,从 UART 接收数据时可能会出现溢出错误。但是,当通过 UART 仅发送 DMA 支持的一个字节数据时,怎么会发生这种情况呢?我怎样才能防止 HAL 永久且无意义地尝试再次发送数据? |
|
相关推荐
1个回答
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2623 浏览 1 评论
3206 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1779 浏览 1 评论
3605 浏览 6 评论
5984 浏览 21 评论
936浏览 4评论
1311浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
579浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1299浏览 3评论
1354浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 01:51 , Processed in 1.058521 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号