注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
Justice_Gao的个人空间 https://home.eeworld.com.cn/space-uid-784175.html [收藏] [复制] [分享] [RSS]
日志

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

已有 1673 次阅读2018-10-9 19:32 |个人分类:GD32系列学习



如图所示,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.     /* enable COM GPIO clock */
  11.     rcu_periph_clock_enable(EVAL_COM_GPIO_CLK);

  12.     /* enable USART clock */
  13.     rcu_periph_clock_enable(COM_CLK[COM_ID]);

  14.     /* connect port to USARTx_Tx */
  15.     gpio_af_set(EVAL_COM_GPIO_PORT, EVAL_COM_AF, COM_TX_PIN[COM_ID]);

  16.     /* connect port to USARTx_Rx */
  17.     gpio_af_set(EVAL_COM_GPIO_PORT, EVAL_COM_AF, COM_RX_PIN[COM_ID]);

  18.     /* configure USART Tx as alternate function push-pull */
  19.     gpio_mode_set(EVAL_COM_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, COM_TX_PIN[COM_ID]);
  20.     gpio_output_options_set(EVAL_COM_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, COM_TX_PIN[COM_ID]);

  21.     /* configure USART Rx as alternate function push-pull */
  22.     gpio_mode_set(EVAL_COM_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, COM_RX_PIN[COM_ID]);
  23.     gpio_output_options_set(EVAL_COM_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, COM_RX_PIN[COM_ID]);

  24.     /* USART configure */
  25.     usart_deinit(com);
  26.     usart_baudrate_set(com, 115200U);
  27.     usart_receive_config(com, USART_RECEIVE_ENABLE);
  28.     usart_transmit_config(com, USART_TRANSMIT_ENABLE);

  29.     usart_enable(com);
  30. }
复制代码

串口发送函数,串口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. }
复制代码

当然别忘了开启串口接收中断
  1. //                nvic_irq_enable(USART0_IRQn, 0, 0);
  2. usart_interrupt_enable(EVAL_COM0,USART_INT_RBNE);
复制代码



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

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章