找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 624|回复: 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++;


回复

使用道具 举报

ID:74687 发表于 2024-5-25 16:46 | 显示全部楼层
rundstedt 发表于 2024-5-17 20:29
你原来是轮询,继续用这种方式好了。

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

使用道具 举报

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

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

使用道具 举报

ID:74687 发表于 2024-5-17 12:53 | 显示全部楼层
应该不是上面这个原因,应该是定时器和串口中断的冲突导致收不到数据的。
回复

使用道具 举报

ID:384109 发表于 2024-5-17 09:50 | 显示全部楼层
HAL库要接收完再启动接收才会继续接收的
回复

使用道具 举报

ID:879809 发表于 2024-5-17 01:58 | 显示全部楼层
接收中断里面应该清除相关标志位才能继续接收。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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