【GD32F350开发分享六】USART0和USART1的双串口应用



如图所示,GD32F350有两个串口,分别是USART0和USART1,分别是哪几个脚复用成串口,具体可以看手册。
我的GPIO复用配置如下

 


串口初始化函数为

  1. void gd_eval_com_init(uint32_t com)
  2. {
  3.     uint32_t COM_ID;
  4.     
  5.     if(EVAL_COM1 == com){
  6.         COM_ID = 0U;
  7.     }else{
  8.                         COM_ID = 1U;
  9.     }
  10.  
  11.     /* enable COM GPIO clock */
  12.     rcu_periph_clock_enable(EVAL_COM_GPIO_CLK);
  13.  
  14.     /* enable USART clock */
  15.     rcu_periph_clock_enable(COM_CLK[COM_ID]);
  16.  
  17.     /* connect port to USARTx_Tx */
  18.     gpio_af_set(EVAL_COM_GPIO_PORT, EVAL_COM_AF, COM_TX_PIN[COM_ID]);
  19.  
  20.     /* connect port to USARTx_Rx */
  21.     gpio_af_set(EVAL_COM_GPIO_PORT, EVAL_COM_AF, COM_RX_PIN[COM_ID]);
  22.  
  23.     /* configure USART Tx as alternate function push-pull */
  24.     gpio_mode_set(EVAL_COM_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, COM_TX_PIN[COM_ID]);
  25.     gpio_output_options_set(EVAL_COM_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, COM_TX_PIN[COM_ID]);
  26.  
  27.     /* configure USART Rx as alternate function push-pull */
  28.     gpio_mode_set(EVAL_COM_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, COM_RX_PIN[COM_ID]);
  29.     gpio_output_options_set(EVAL_COM_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, COM_RX_PIN[COM_ID]);
  30.  
  31.     /* USART configure */
  32.     usart_deinit(com);
  33.     usart_baudrate_set(com, 115200U);
  34.     usart_receive_config(com, USART_RECEIVE_ENABLE);
  35.     usart_transmit_config(com, USART_TRANSMIT_ENABLE);
  36.  
  37.     usart_enable(com);
  38. }
  39.  

复制代码


串口发送函数,串口0为例

  1. void USART_SendBuffer(uint8_t *buf, uint16_t Size)
  2. {
  3.         uint16_t len=0;
  4.         for (len=0;len
  5.         {
  6.                 usart_data_transmit(EVAL_COM0, buf[len]);
  7.                 while(RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE));
  8.         }
  9. }

复制代码


串口接收中断函数

  1. void USART0_IRQHandler(void)
  2. {
  3.         if(RESET!=usart_interrupt_flag_get(EVAL_COM0,USART_INT_FLAG_RBNE))
  4.         {
  5.         }
  6.  
  7. }

复制代码


当然别忘了开启串口接收中断

  1. //                nvic_irq_enable(USART0_IRQn, 0, 0);
  2. usart_interrupt_enable(EVAL_COM0,USART_INT_RBNE);

复制代码




大家可以尝试一下,本人已使用该方法

你可能感兴趣的:(GD32系列)