硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1019|回复: 3
收起左侧

[有问必答] modbus的例程,出现USART_SR_ORE错误

[复制链接]

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2024-7-4 17:05:20 | 显示全部楼层 |阅读模式
请教一下,我在modbus的例程中,为什么bsp_StartHardTimer设置超时时间低于6500us下就会发生USART_SR_ORE错误,高于6500us就没有事前

    bsp_StartHardTimer(2,  ModbusBaudRate.usTimeOut, (void *)MODH_RxTimeOut);



void bsp_StartHardTimer(uint8_t _CC, uint32_t _uiTimeOut, void * _pCallBack)
{
    uint32_t cnt_now;
    uint32_t cnt_tar;
    TIM_TypeDef* TIMx = TIM_HARD;
   
    /* 无需补偿延迟,实测精度正负1us */
   
    cnt_now = TIMx->CNT;
    cnt_tar = cnt_now + _uiTimeOut;         /* 计算捕获的计数器值 */
    if (_CC == 1)
    {
        s_TIM_CallBack1 = (void (*)(void))_pCallBack;

        TIMx->CCR1 = cnt_tar;               /* 设置捕获比较计数器CC1 */
        TIMx->SR = (uint16_t)~TIM_IT_CC1;   /* 清除CC1中断标志 */
        TIMx->DIER |= TIM_IT_CC1;           /* 使能CC1中断 */
    }
    else if (_CC == 2)
    {
        s_TIM_CallBack2 = (void (*)(void))_pCallBack;

        TIMx->CCR2 = cnt_tar;               /* 设置捕获比较计数器CC2 */
        TIMx->SR = (uint16_t)~TIM_IT_CC2;   /* 清除CC2中断标志 */
        TIMx->DIER |= TIM_IT_CC2;           /* 使能CC2中断 */
    }
    else if (_CC == 3)
    {
        s_TIM_CallBack3 = (void (*)(void))_pCallBack;

        TIMx->CCR3 = cnt_tar;               /* 设置捕获比较计数器CC3 */
        TIMx->SR = (uint16_t)~TIM_IT_CC3;   /* 清除CC3中断标志 */
        TIMx->DIER |= TIM_IT_CC3;           /* 使能CC3中断 */
    }
    else if (_CC == 4)
    {
        s_TIM_CallBack4 = (void (*)(void))_pCallBack;

        TIMx->CCR4 = cnt_tar;               /* 设置捕获比较计数器CC4 */
        TIMx->SR = (uint16_t)~TIM_IT_CC4;   /* 清除CC4中断标志 */
        TIMx->DIER |= TIM_IT_CC4;           /* 使能CC4中断 */
    }
    else
    {
        return;
    }
}


回复

使用道具 举报

3

主题

295

回帖

304

积分

高级会员

积分
304
发表于 2024-7-4 17:27:58 | 显示全部楼层
你串口波特率是多少,定时器时钟频率又是多少,确定是1us定时器吗
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2024-7-5 00:56:20 | 显示全部楼层
skyshine 发表于 2024-7-4 17:27
你串口波特率是多少,定时器时钟频率又是多少,确定是1us定时器吗

波特率是115200 是1us 的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-7-5 09:05:02 | 显示全部楼层
skyshine 发表于 2024-7-4 17:27
你串口波特率是多少,定时器时钟频率又是多少,确定是1us定时器吗

ORE错误跟这个定时代码关系不大。你排查下两个地方

1、你的485 PHY收发切换是不是比较长。
2、ORE错误一般是线路有干扰,要用你的硬件上优先排查下,实验环境简单的几个节点测试,不该有这种问题。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 02:47 , Processed in 0.038187 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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