打印
[STM32F1]

stm32f103zet6在freertos环境使用freemodbus协议栈不通

[复制链接]
766|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2023-9-25 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在freertos中移植的freemodbus协议按照协议栈初始化了发送的串口,以及485控制引脚,但是通过modbus poll ping 不通,一直显示timeout, 检查并没有发现那里有明显的错误,**有移植过freemodbus协议栈的大佬能指点一下,万分感谢
BOOLxMBPortTimersInit( USHORT usTim1Timerout50us ){    uint16_t PrescalerValue = 0;    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);    PrescalerValue = (uint16_t)(SystemCoreClock / 20000) - 1;    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;    TIM_TimeBaseStructure.TIM_Period = usTim1Timerout50us;    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;    TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);    TIM_ARRPreloadConfig(TIM6, ENABLE);    NVIC_InitTypeDef NVIC_InitStructure;    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    TIM_ClearITPendingBit(TIM6,TIM_IT_Update);    TIM_ITConfig(TIM6, TIM_IT_Update, DISABLE);    TIM_Cmd(TIM6,DISABLE);    return TRUE;}voidvMBPortTimersEnable(  ){    TIM_ClearITPendingBit(TIM6, TIM_IT_Update);    TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);    TIM_SetCounter(TIM6,0x0000);    TIM_Cmd(TIM6, ENABLE);}voidvMBPortTimersDisable(  ){    TIM_ClearITPendingBit(TIM6, TIM_IT_Update);    TIM_ITConfig(TIM6, TIM_IT_Update, DISABLE);    TIM_SetCounter(TIM6,0x0000);    TIM_Cmd(TIM6, DISABLE);}void TIM6_IRQHandler(void){  if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)  {    TIM_ClearITPendingBit(TIM6, TIM_IT_Update);    prvvTIMERExpiredISR( );  }}BOOLxMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity ){    (void)ucPORT;    (void)ucDataBits;    (void)eParity;    GPIO_InitTypeDef GPIO_InitStructure;    USART_InitTypeDef USART_InitStructure;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOA, &GPIO_InitStructure);    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    GPIO_Init(GPIOA, &GPIO_InitStructure);    USART_InitStructure.USART_BaudRate = ulBaudRate;    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    USART_InitStructure.USART_StopBits = USART_StopBits_1;    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    USART_InitStructure.USART_Parity = USART_Parity_No;    USART_InitStructure.USART_WordLength = USART_WordLength_8b;    USART_Init(USART2, &USART_InitStructure);    USART_Cmd(USART2, ENABLE);    NVIC_InitTypeDef NVIC_InitStructure;    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    NVIC_Init(&NVIC_InitStructure);    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOC, &GPIO_InitStructure);    return TRUE;}BOOLxMBPortSerialPutByte( CHAR ucByte ){    USART_SendData(USART2, ucByte);    return TRUE;}BOOLxMBPortSerialGetByte( CHAR * pucByte ){    *pucByte = USART_ReceiveData( USART2 );    return TRUE;}voidvMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable ){    if( xRxEnable )    {        USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);        RS485_Rx;    }    else    {        USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);        RS485_Tx;    }    if( xTxEnable )    {        USART_ITConfig(USART2, USART_IT_TC, ENABLE);    }    else    {        USART_ITConfig(USART2, USART_IT_TC, DISABLE);    }}void USART2_IRQHandler(void){    if( USART_GetITStatus(USART2, USART_IT_RXNE) == SET )    {        prvvUARTRxISR();        USART_ClearITPendingBit(USART2, USART_IT_RXNE);    }    if( USART_GetITStatus(USART2, USART_IT_TC) == SET )    {        prvvUARTTxReadyISR();        USART_ClearITPendingBit(USART2, USART_IT_TC);    }}



使用特权

评论回复
沙发
我吃小朋友| | 2023-10-20 21:29 | 只看该作者
不通的话,看看硬件是否接的正确?

使用特权

评论回复
板凳
她已醉| | 2023-10-21 02:00 | 只看该作者
你这超时了,可能还是硬件的原因吧

使用特权

评论回复
地板
月亮一键变蓝| | 2023-10-21 04:00 | 只看该作者
你用逻辑分析仪抓波形看看呢?

使用特权

评论回复
5
一只眠羊| | 2023-10-21 06:00 | 只看该作者
没移植过,不过我觉得这个应该有现成的吧,你直接拿来用都是OK的

使用特权

评论回复
6
未说出口的像你| | 2023-10-21 08:00 | 只看该作者
网上找个例程,先跑一下呗,看看硬件是否都接的OK

使用特权

评论回复
7
温室雏菊| | 2023-10-21 11:00 | 只看该作者
超时的话是不是时序没对应上呢?

使用特权

评论回复
8
春日负喧| | 2023-10-21 15:00 | 只看该作者
一般来说modbus好像是有协议的,协议对不上也是超时的存在

使用特权

评论回复
9
故意相遇| | 2023-10-21 17:00 | 只看该作者
是不是有个ff还是00的唤醒关键字?我忘记了,不过一定要尊重协议来说

使用特权

评论回复
10
白马过平川| | 2023-10-21 21:00 | 只看该作者
这个你先用串口对接,看看数据是否能正常交互,然后再移植modbus

使用特权

评论回复
11
在曼谷的春| | 2023-10-21 23:30 | 只看该作者
其实你仿真一下看看数据好寄存器就好了

使用特权

评论回复
12
BullTalented| | 2023-10-23 11:25 | 只看该作者
检查一下硬件有没有接正确

使用特权

评论回复
13
cr315| | 2023-11-8 10:02 | 只看该作者
检查连接线是否松动、断路或短路。

使用特权

评论回复
14
两只袜子| | 2023-11-8 10:03 | 只看该作者
Modbus从站的地址是否正确。

使用特权

评论回复
15
jcky001| | 2023-11-8 10:03 | 只看该作者
检查FreeModbus的头文件和源代码,确保它们与您的FreeRTOS版本和STM32F103ZET6 MCU相匹配。

使用特权

评论回复
16
Clyde011| | 2024-2-1 07:24 | 只看该作者

然后将其用作在PCB组装过程中放置在另一个板上的独立部件。

使用特权

评论回复
17
公羊子丹| | 2024-2-1 08:17 | 只看该作者

选择测试方法和测试参数是检测过程中的重要步骤

使用特权

评论回复
18
万图| | 2024-2-1 09:20 | 只看该作者

它产生的噪声是对地噪声

使用特权

评论回复
19
Uriah| | 2024-2-1 10:23 | 只看该作者

然后在专用站中检查每个半孔,

使用特权

评论回复
20
帛灿灿| | 2024-2-1 12:19 | 只看该作者

抑制各种高速信号产生的电磁波向外发射

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

983

主题

3060

帖子

7

粉丝