加入QQ群
售前咨询
18604058908
售后热线
13166668196
微信扫一扫
关注沈阳菲尔德
获取更多免费产品
 
Language

基金会现场总线(FF)转Modbus设备的调试

 来源:FieldIoT |  阅读:1265次 |  2023/7/13 9:01:05

最近在进行基金会现场总线(FF)转Modbus设备的调试时,遇到一个很奇怪的问题,如果485串口(Modbus从站)不在通讯的情况下,程序的任何一个地方打断点,没有异常。但在有485串口MODBUS通信的状况下,在程序任意一个地方打断点,程序就跑飞了。经过调试发现,程序一直进入中断,导致不能执行main函数。

开始怀疑时modbus的3.5毫秒定时器的问题,增加了T35定时器导致时序不正确。

void USART1_IRQHandler(void)
{
    if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE))            // 接收非空中断标记被置位
    {
        __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_RXNE);            // 清除中断标记
        prvvUARTRxISR();                                        // 通知modbus有数据到达
    }
    //溢出-如果发生溢出需要先清空SR的溢出位,再读DR寄存器 则可清除不断入中断的问题
    else if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE))//ORE溢出中断,先读SR
        {
            __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_ORE);            // 清除中断标记
        }
        else    if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TXE))    // 发送为空中断标记被置位
            {
                prvvUARTTxReadyISR();                                    // 通知modbus数据可以发松
                __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_TXE);            // 清除中断标记
            }
}
那么在开发modbus设备尤其时从站设备的时候,T35还是建议保留,更符合Modbus通信规范,能够有效保证帧间隔,否则间隔过短,有些主站可能不认。