OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3188|回复: 5

关于STM32F4的MODBUS程序接收不到数据的问题

[复制链接]

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
发表于 2020-7-22 16:17:33 | 显示全部楼层 |阅读模式
44金钱
新人小白一枚,我查了相关资料,自己写了个HAL库的MODBUS通信程序,使用的是STM32F411的开发板,但是一直接收不到数据。进不去串口中断是什么原因啊。
有没有大神能帮我看一下哪里出问题了,跪求UART_HandleTypeDef UART2_Handler; //UART句柄

void RS485_Init(void)
{
                        __HAL_RCC_USART2_CLK_ENABLE();
          UART2_Handler.Instance=USART2;                                            //USART2
           UART2_Handler.Init.BaudRate=RS485_Baudrate;                                    //波特率
          UART2_Handler.Init.WordLength=UART_WORDLENGTH_8B;   //字长为8位数据格式
          UART2_Handler.Init.StopBits=UART_STOPBITS_1;            //一个停止位
        switch(RS485_Parity)
        {
                case 0:UART2_Handler.Init.Parity=USART_PARITY_NONE;break;//无校验
                case 1:UART2_Handler.Init.Parity=USART_PARITY_ODD;break;//奇校验
                case 2:UART2_Handler.Init.Parity=USART_PARITY_EVEN;break;//偶校验
        }       

          UART2_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控
          UART2_Handler.Init.Mode=UART_MODE_TX_RX;                    //收发模式

          HAL_UART_Receive_IT(&UART2_Handler, (u8 *)a485RxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数
    HAL_NVIC_SetPriority(USART2_IRQn,2,2);           //抢占优先级为2,子优先级为1
    HAL_NVIC_EnableIRQ(USART2_IRQn);
          HAL_UART_Init(&UART2_Handler);                                            //HAL_UART_Init()会使能UART
    RS485_RX_EN();//默认为接收模式
//          Modbus_RegMap();
        TIM3_Init();//定时器3初始化,用于监视空闲时间
                               
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
        GPIO_InitTypeDef GPIO_Initure;
                if(huart->Instance==USART2)//如果是串口2,进行串口2 MSP初始化
        {
                __HAL_RCC_GPIOA_CLK_ENABLE();                        //使能GPIOA时钟
       
    GPIO_Initure.Pin=GPIO_PIN_2;            //PA2
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;     //复用推挽输出
          GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
//                GPIO_Initure.Alternate=GPIO_AF7_USART2;        //复用为USART2
          HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//默认高电平
          HAL_GPIO_Init(GPIOA,&GPIO_Initure);
          
          GPIO_Initure.Pin=GPIO_PIN_3;            //PA3
    GPIO_Initure.Mode=GPIO_MODE_INPUT;     //浮空输入
          HAL_GPIO_Init(GPIOA,&GPIO_Initure);
          
    GPIO_Initure.Pin=GPIO_PIN_0;            //PA0
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;     //推挽输出
          GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
          HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//默认低电平
          HAL_GPIO_Init(GPIOA,&GPIO_Initure);
               
        }

}


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        if(huart->Instance==USART2)//如果是串口2
        {
                       
                        if(RS485_RX_CNT<256)
                        {
                        RS485_RX_BUFF[RS485_RX_CNT] = a485RxBuffer[0];
                        RS485_RX_CNT++;
                        HAL_UART_Receive_IT(&UART2_Handler,(uint8_t *)a485RxBuffer,RXBUFFERSIZE);
                        __HAL_TIM_CLEAR_FLAG(&TIM3_Handler,TIM_FLAG_UPDATE);
                        __HAL_TIM_SET_COUNTER(&TIM3_Handler,0);
                        HAL_TIM_Base_Start_IT(&TIM3_Handler);
                        }
   }
        }



这是有关串口初始化的程序。进不去串口中断。

F4-MODBUS-slave.zip

9.91 MB, 下载次数: 33

最佳答案

查看完整内容[请看2#楼]

没人。。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
 楼主| 发表于 2020-7-22 16:17:34 | 显示全部楼层
回复

使用道具 举报

6

主题

412

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2704
金钱
2704
注册时间
2019-8-14
在线时间
414 小时
发表于 2020-7-22 20:37:16 | 显示全部楼层
帮顶~~
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
 楼主| 发表于 2020-7-23 08:56:54 | 显示全部楼层
有人吗
回复

使用道具 举报

31

主题

158

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2020-4-30
在线时间
111 小时
发表于 2020-7-23 17:05:39 | 显示全部楼层
我有做过429的485 modbus      用的是IDLE中断   
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
 楼主| 发表于 2020-7-23 17:09:35 | 显示全部楼层
2721978231 发表于 2020-7-23 17:05
我有做过429的485 modbus      用的是IDLE中断

老哥有程序吗?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-30 19:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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