1回答

2收藏

GD32方案分享⑤:串口驱动补充

GD32 GD32 3660 人阅读 | 1 人回复 | 2017-05-27


  1. #include "uart.h"

  2. void UART_Init(uint32_t usart,uint64_t baud)
  3. {
  4.          if(usart == USART0)   
  5.          {
  6.                         /* enable GPIO clock */
  7.                         rcu_periph_clock_enable(RCU_USART0);

  8.                         /* enable USART clock */
  9.                         rcu_periph_clock_enable(RCU_GPIOA);

  10.                         /* connect port to USARTx_Tx */
  11.                         gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9);

  12.                         /* connect port to USARTx_Rx */
  13.                         gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_10);

  14.                         /* configure USART Tx as alternate function push-pull */
  15.                         gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_9);
  16.                         gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_10);

  17.                         /* configure USART Rx as alternate function push-pull */
  18.                         gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_9);
  19.                         gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_10);
  20.          }                 
  21.    else if(usart == USART1)
  22.          {
  23.                          /* enable GPIO clock */
  24.                         rcu_periph_clock_enable(RCU_USART1);

  25.                         /* enable USART clock */
  26.                         rcu_periph_clock_enable(RCU_GPIOD);

  27.                         /* connect port to USARTx_Tx */
  28.                         gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_5);

  29.                         /* connect port to USARTx_Rx */
  30.                         gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_6);

  31.                         /* configure USART Tx as alternate function push-pull */
  32.                         gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_5);
  33.                         gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);

  34.                         /* configure USART Rx as alternate function push-pull */
  35.                         gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_5);
  36.                         gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
  37.          }
  38.          else if(usart == USART2)  
  39.         {
  40.                         /* enable GPIO clock */
  41.                         rcu_periph_clock_enable(RCU_USART2);

  42.                         /* enable USART clock */
  43.                         rcu_periph_clock_enable(RCU_GPIOD);

  44.                         /* connect port to USARTx_Tx */
  45.                         gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_8);

  46.                         /* connect port to USARTx_Rx */
  47.                         gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_9);

  48.                         /* configure USART Tx as alternate function push-pull */
  49.                         gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_8);
  50.                         gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);

  51.                         /* configure USART Rx as alternate function push-pull */
  52.                         gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_8);
  53.                         gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);
  54.         }         
  55.     /* USART configure */
  56.     usart_deinit(usart);
  57.     usart_baudrate_set(usart,baud);
  58.     usart_receive_config(usart, USART_RECEIVE_ENABLE);
  59.     usart_transmit_config(usart, USART_TRANSMIT_ENABLE);
  60.     usart_enable(usart);
  61. }

  62. int fputc(int ch, FILE *f)
  63. {      
  64.         while(usart_flag_get(Debug_UART,USART_FLAG_TBE)==0);
  65.         usart_data_transmit(Debug_UART,ch);
  66.         return ch;
  67. }
复制代码

  1. #ifndef UART_H
  2. #define UART_H

  3. #include "gd32f4xx_usart.h"
  4. #include <stdio.h>

  5. #define Debug_UART USART1

  6. void UART_Init(uint32_t usart,uint64_t baud);

  7. #endif
复制代码
按照这种思路 所有的串口都能一句话调用配置  简单方便

最后上传一个GD32F450的数据手册 ,主要刚开始找了半天没找到 好不容易在一个论坛里找到了
GD32F450xx_Datasheet_Rev1.1.pdf (1.32 MB, 下载次数: 8)

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

mrqq43

发表于 2017-6-11 18:09:23 | 只看该作者

我用串口1,发现串口一直进入发送中断
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条