GD32E230F8P6 USART1配置中断优先级出现BUG

[复制链接]
26|0
zyftank 发表于 2026-4-25 11:40 | 显示全部楼层 |阅读模式
, IO, , ,
本帖最后由 zyftank 于 2026-4-26 18:17 编辑

我使用PA2、PA3复用为USART1,配置如下
  1. void usart_gpio_config(uint32_t band_rate)
  2. {
  3.         /* 开启时钟 */
  4.         rcu_periph_clock_enable(BSP_USART_RCU);         // 开启串口时钟
  5.         rcu_periph_clock_enable(BSP_USART_RX_RCU);      // 开启端口时钟
  6.         rcu_periph_clock_enable(BSP_USART_TX_RCU);      // 开启端口时钟
  7.         rcu_periph_clock_enable(BSP_485_EN_RCU);        // 开启485EN端口时钟
  8.        
  9.         /* 配置GPIO复用功能 */
  10.   gpio_af_set(BSP_USART_TX_PORT,BSP_USART_AF,BSP_USART_TX_PIN);       
  11.         gpio_af_set(BSP_USART_RX_PORT,BSP_USART_AF,BSP_USART_RX_PIN);       
  12.        
  13.         /* 配置GPIO的模式 */
  14.         /* 配置TX为复用模式 上拉模式 */
  15.         gpio_mode_set(BSP_USART_TX_PORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_TX_PIN);
  16.         /* 配置RX为复用模式 上拉模式 */
  17.         gpio_mode_set(BSP_USART_RX_PORT, GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_RX_PIN);
  18.         /* 配置EN为推挽输出模式 */
  19.         gpio_mode_set(BSP_485_EN_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, BSP_485_EN_PIN);
  20.        
  21.         /* 配置TX为推挽输出 50MHZ */
  22.         gpio_output_options_set(BSP_USART_TX_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,BSP_USART_TX_PIN);
  23.         /* 配置RX为推挽输出 50MHZ */
  24.         gpio_output_options_set(BSP_USART_RX_PORT,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_USART_RX_PIN);
  25.         /* 配置485EN为推挽输出 50MHZ */
  26.         gpio_output_options_set(BSP_485_EN_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BSP_485_EN_PIN);
  27.        
  28.         gpio_bit_reset(BSP_485_EN_PORT,BSP_485_EN_PIN);

  29.         /* 配置串口的参数 */
  30.         usart_deinit(BSP_USART);                                 // 复位串口
  31.         usart_baudrate_set(BSP_USART,band_rate);                 // 设置波特率
  32.         usart_parity_config(BSP_USART,USART_PM_NONE);            // 没有校验位
  33.         usart_word_length_set(BSP_USART,USART_WL_8BIT);          // 8位数据位
  34.         usart_stop_bit_set(BSP_USART,USART_STB_1BIT);                              // 1位停止位

  35.   /* 使能串口 */
  36.         usart_transmit_config(BSP_USART,USART_TRANSMIT_ENABLE);  // 使能串口发送
  37.         usart_receive_config(BSP_USART,USART_RECEIVE_ENABLE);    // 使能串口接收
  38.         usart_enable(BSP_USART);                                 // 使能串口
  39.        
  40.         /* 中断配置 */
  41.         usart_interrupt_enable(BSP_USART,USART_INT_RBNE);                                 // 读数据缓冲区非空中断和溢出错误中断
  42.         usart_interrupt_enable(BSP_USART,USART_INT_IDLE);                                 // 空闲检测中断
  43.         //nvic_irq_enable(BSP_USART_IRQ, 2);                                                                              // 配置中断优先级
  44. }



当我注销配置中断优先级时,USART1能正常发送数据,但不能进入中断,不注销配置中断优先级,程序直接BUG。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

32

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0