OpenEdv-开源电子网

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

关于串口进不去中断的问题。

[复制链接]

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
发表于 2020-7-23 15:36:04 | 显示全部楼层 |阅读模式
51金钱
在写modbus通信协议时,使用的串口2,但是接收数据一直进不去中断,有没有大佬帮忙看看怎么个情况。下面是串口初始化的程序:
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;                    //收发模式

    RS485_RX_EN();//默认为接收模式
    TIM3_Init();//定时器3初始化,用于监视空闲时间
                HAL_UART_Receive_IT(&UART2_Handler,(uint8_t *)a485RxBuffer,RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数               
}
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO端口设置
        GPIO_InitTypeDef GPIO_Initure;
        __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_1;            //PA1
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;     //推挽输出
          GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;
          HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//默认低电平
          HAL_GPIO_Init(GPIOA,&GPIO_Initure);
    HAL_NVIC_EnableIRQ(USART2_IRQn);                
    HAL_NVIC_SetPriority(USART2_IRQn,0,0);           //抢占优先级为0,子优先级为

}


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

                        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);
                       
   }
        }


//串口2中断服务程序
void USART2_IRQHandler(void)                       
{
//        u32 timeout=0;
#if SYSTEM_SUPPORT_OS                 //使用OS
        OSIntEnter();   
#endif
       
        HAL_UART_IRQHandler(&UART2_Handler);        //调用HAL库中断处理公用函数

}

最佳答案

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

找到问题了,串口复用的话要配置为复用开漏输出
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
 楼主| 发表于 2020-7-23 15:36:05 | 显示全部楼层
找到问题了,串口复用的话要配置为复用开漏输出
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

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

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-7-23 16:26:02 | 显示全部楼层
不知道
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
 楼主| 发表于 2020-7-23 16:30:05 | 显示全部楼层
我找不到配置哪里出问题了。。。
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
 楼主| 发表于 2020-7-23 17:00:28 | 显示全部楼层
如果大佬们没时间,能不能教我一下解决办法呀....我加断点调试了,初始化函数运行了,但是串口服务函数进不去。
回复

使用道具 举报

1

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2020-5-17
在线时间
123 小时
发表于 2020-7-23 19:10:06 | 显示全部楼层
串口2例程有配置好的,你别改就行了,改了容易出问题
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-5-18
在线时间
35 小时
 楼主| 发表于 2020-7-24 09:08:55 | 显示全部楼层
15042678602 发表于 2020-7-23 19:10
串口2例程有配置好的,你别改就行了,改了容易出问题

我用的STM32F411的开发板,哪个例程里会配置串口2啊?
回复

使用道具 举报

1

主题

38

帖子

0

精华

高级会员

Rank: 4

积分
658
金钱
658
注册时间
2020-5-17
在线时间
123 小时
发表于 2020-7-24 09:21:26 | 显示全部楼层
s5448827 发表于 2020-7-24 09:08
我用的STM32F411的开发板,哪个例程里会配置串口2啊?

485串口2
回复

使用道具 举报

9

主题

53

帖子

0

精华

新手上路

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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