【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<Size;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);

複製代碼




大家可以嘗試一下,本人已使用該方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章