[研电赛技术支持] GD32F103串口2问题

[复制链接]
6575|1
 楼主| 速度看看 发表于 2021-8-6 16:42 | 显示全部楼层 |阅读模式
项目中使用GD32F103RB单片机,用到USART1、USART2、USART3,其中USART1和USART3都是通的,但是USART2怎么都不通,直接抓取Tx引脚也没无波形,开始怀疑代码问题,反复看了好多遍,找不出问题,先附上代码。
  1. void Foundation_Uart2_Init(unsigned int uart_baud)
  2. {
  3.         Foundation_Uart2_Nvic_Init();                                                         //初始化串口2中断优先级配置
  4.         Foundation_Uart2_Gpio_Init();                                                         //初始化串口2引脚配置
  5.         Foundation_Uart2_Perpheral_Init(uart_baud);//初始化串口2功能配置
  6. }
  7. void Foundation_Uart2_Nvic_Init(void)
  8. {
  9.         NVIC_InitTypeDef NVIC_InitStructure;

  10.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                         //先占优先级0,从优先级0-16
  11.         NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                                 //
  12.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级1
  13.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                         //响应优先级3
  14.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                         //IRQ通道使能
  15.         NVIC_Init(&NVIC_InitStructure);                                                                                                         //根据指定的参数初始化VIC寄存器       
  16. }
  17. void Foundation_Uart2_Gpio_Init(void)
  18. {
  19.         GPIO_InitTypeDef  GPIO_InitStructure;
  20.         //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能USART2和GPIOA外设时钟
  21.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  22.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                                 //USART2_TXD(PA.2)     
  23.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                         //复用推挽输出
  24.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //设置引脚输出最大速率为50MHz
  25.         GPIO_Init(GPIOA, &GPIO_InitStructure);                                                         //调用库函数中的GPIO初始化函数,初始化USART2_TXD(PA.2)  
  26.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 ;                                         //USART2_RXD(PA.3)
  27.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  28.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //设置引脚输出最大速率为50MHz
  29.         GPIO_Init(GPIOA, &GPIO_InitStructure);                                                         //调用库函数中的GPIO初始化函数,初始化USART2_RXD(PA.3)
  30. }
  31. void Foundation_Uart2_Perpheral_Init(unsigned int uart_baud)
  32. {       
  33.         USART_InitTypeDef USART_InitStructure;
  34.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2时钟
  35.         USART_InitStructure.USART_BaudRate = uart_baud;                                                                                                                                 //设置波特率
  36.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;                                                                           //8位数据格式
  37.         USART_InitStructure.USART_StopBits = USART_StopBits_1;                                                                                           //1个停止位
  38.         USART_InitStructure.USART_Parity = USART_Parity_No;                                                                                                                  //无奇偶校验位
  39.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  40.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                                                                 //工作模式设置为收发模式
  41.     USART_Init(USART2, &USART_InitStructure);                                                                                                                                         //初始化串口2       
  42.         USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);                                                                                                                                 //使能串口2接收中断
  43.         USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);                                                                                                                                 //使能串口2空闲中断
  44.         USART_Cmd(USART2, ENABLE);
  45.         USART_ClearFlag(USART2,USART_FLAG_TC);
  46. }

主循环一直在通过USART2发送数据,但是Tx无波形,用的是ST的标准库,程序中也反复查看,没有该引脚被配置成其它外设的情况。
guijial511 发表于 2021-8-6 18:25 来自手机 | 显示全部楼层
用ST的库是没法保证全兼容的,还是用GD自家的库吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

1

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