GD32F103调试485通讯怎么也不进中断

[复制链接]
1001|13
 楼主| Aist2018 发表于 2023-12-25 14:19 | 显示全部楼层 |阅读模式
  1. /* enable USART and GPIOA clock */
  2.     rcu_periph_clock_enable(RCU_GPIOB);
  3.     rcu_periph_clock_enable(RCU_USART2);
  4.                
  5.     gpio_pin_remap_config( GPIO_USART2_PARTIAL_REMAP,ENABLE); //引脚重映射
  6.                 gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
  7.                 gpio_bit_reset(GPIOB, GPIO_PIN_1);
  8.     /* configure USART2 Tx as alternate function push-pull */
  9.     gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
  10.     /* configure USART2 Rx as alternate function push-pull */
  11.     gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

  12. void initUART() {
  13.   /* USART interrupt configuration */
  14.         nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
  15.   nvic_irq_enable(USART2_IRQn, 1, 1);
  16.   /* configure COM0 */
  17.   //gd_eval_com_init(EVAL_COM0);
  18.   usart_baudrate_set(USART2, 115200U);
  19.         usart_parity_config(USART2, USART_PM_NONE);//无奇偶检验
  20.                 usart_word_length_set(USART2, USART_WL_8BIT);//8位数据
  21.                 usart_stop_bit_set(USART2, USART_STB_1BIT);//一个停止位
  22.                 usart_hardware_flow_rts_config(USART2,USART_RTS_DISABLE);//无硬件数据流
  23.           usart_hardware_flow_cts_config(USART2, USART_CTS_DISABLE);  // 硬件流控制CTS
  24.     usart_receive_config(USART2, USART_RECEIVE_ENABLE);//串口接收
  25.     usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);//串口发送
  26.       
  27.         //usart_halfduplex_enable(USART2);
  28.       
  29.   usart_interrupt_enable(USART2, USART_INT_RBNE);
  30.       
  31.         usart_enable(USART2);
  32. }


  33. void UART2_IRQHandler(void) {
  34.     static int dataLen = 0;
  35.           dataRev = 0x11;
  36.           if(SET == usart_interrupt_flag_get(USART2, USART_INT_FLAG_TBE)){
  37.                           usart_interrupt_flag_clear(USART2,USART_INT_FLAG_TBE);
  38.         /* transmit data */
  39.         usart_data_transmit(USART2, txbuffer[txcount++]);
  40.         if(txcount == tx_size){
  41.             usart_interrupt_disable(USART2, USART_INT_TBE);
  42.                                           gpio_bit_reset(GPIOB, GPIO_PIN_1);
  43.         }
  44.     }
  45.     if((SET == usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE))||(SET == usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE_ORERR))) {
  46.         dataRev = usart_data_receive(USART2);
  47.                           
  48.                           usart_interrupt_flag_clear(USART2,USART_INT_FLAG_RBNE);
zeshoufx 发表于 2023-12-25 14:32 | 显示全部楼层
看不到其他配置不好说什么,,,进不了中断是进不了哪个中断?
 楼主| Aist2018 发表于 2023-12-25 14:33 | 显示全部楼层
所有配置就这些,进不了收中断,发中断也进不去。
 楼主| Aist2018 发表于 2023-12-25 14:34 | 显示全部楼层
进不去  void UART2_IRQHandler(void)
zeshoufx 发表于 2023-12-26 08:36 | 显示全部楼层
Aist2018 发表于 2023-12-25 14:33
所有配置就这些,进不了收中断,发中断也进不去。

那没看到你的485是工作在接收或者发送啊,,,一般485是半双工的,,需要控制收发引脚去接收或发送
 楼主| Aist2018 发表于 2023-12-26 09:11 | 显示全部楼层
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);

                gpio_bit_reset(GPIOB, GPIO_PIN_1);       PB1是485的使能引脚, 这不是设置为可以接收吗?发的时候gpio_bit_set(GPIOB, GPIO_PIN_1);
zeshoufx 发表于 2023-12-26 09:52 | 显示全部楼层
Aist2018 发表于 2023-12-26 09:11
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);

                gpio_bit_reset(G ...

收发确实是这样控制,,看一下收发引脚上的波形,,不会硬件上出问题了吧
 楼主| Aist2018 发表于 2023-12-26 10:01 | 显示全部楼层
示波器看输入引脚有数据,无论如何应该进中断啊,怎么就不进中断呢?是否初始化时结束要清一下中断标志?放在哪里?上面我给出的初始化代码没什么需要调整的吧?
 楼主| Aist2018 发表于 2023-12-26 10:23 | 显示全部楼层
清标志位还是不行,引脚有数据怎么就不进中断呢?
 楼主| Aist2018 发表于 2023-12-26 11:17 | 显示全部楼层
gpio_pin_remap_config( GPIO_USART2_PARTIAL_REMAP,ENABLE); //引脚重映射   ------------- 这行我去掉了,手册不映射时PB10 PB11,还是不行
 楼主| Aist2018 发表于 2023-12-26 11:34 | 显示全部楼层
*(volatile uint32_t  *)AFIO_PCF0 &= 0xFFFFFFCF;   ----------- 直接把USART2_REMAP [1:0] =
“00” (没有映射)
- -
PB10(USART2_TX)
PB11(USART2_RX)     ----------------  按手册,还不行啊
 楼主| Aist2018 发表于 2023-12-26 13:37 | 显示全部楼层
GD32是不是支持USART2有问题啊?拜托高人指教啊
sagade 发表于 2023-12-26 14:13 | 显示全部楼层
void UART2_IRQHandler(void) 这个不对吧,应该是USART2_IRQHandler
 楼主| Aist2018 发表于 2023-12-26 14:28 | 显示全部楼层
的确函数名写错,谢谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

90

帖子

0

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