找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1453|回复: 5
打印 上一主题 下一主题
收起左侧

MODBUS接收不定长数据只能接收第一个字符?

[复制链接]
跳转到指定楼层
楼主
ID:74687 发表于 2024-5-16 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原程序是这样的void USART1_IRQHandler(void)
{
if(__HAL_UART_GET_FLAG(&Uart1Handle, UART_FLAG_RXNE))
{   
         uint8_t ch = READ_REG(Uart1Handle.Instance->DR);
         WRITE_REG(Uart1Handle.Instance->DR,ch);


这样是可以将接收到的数据完整发送出去。我的想法,是将接收到的数据保存至数组缓冲区,但是我改成以下这样就会出现问题,只能接收到一帧数据的第一个字符,问题还未定位到。

void USART1_IRQHandler(void)
{
if(__HAL_UART_GET_FLAG(&Uart1Handle, UART_FLAG_RXNE))
{   
         RS485_RX_Buffer[g_cntRxd]=(uint8_t)(Uart1Handle.Instance->DR&(uint8_t)0x00FF);
         g_cntRxd++;


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:879809 发表于 2024-5-17 01:58 | 只看该作者
接收中断里面应该清除相关标志位才能继续接收。
回复

使用道具 举报

板凳
ID:384109 发表于 2024-5-17 09:50 | 只看该作者
HAL库要接收完再启动接收才会继续接收的
回复

使用道具 举报

地板
ID:74687 发表于 2024-5-17 12:53 | 只看该作者
应该不是上面这个原因,应该是定时器和串口中断的冲突导致收不到数据的。
回复

使用道具 举报

5#
ID:879809 发表于 2024-5-17 20:29 | 只看该作者
zyftank 发表于 2024-5-17 12:53
应该不是上面这个原因,应该是定时器和串口中断的冲突导致收不到数据的。

你原来是轮询,继续用这种方式好了。
回复

使用道具 举报

6#
ID:74687 发表于 2024-5-25 16:46 | 只看该作者
rundstedt 发表于 2024-5-17 20:29
你原来是轮询,继续用这种方式好了。

已经调试好了,是定时器初始化卡死了。
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表