查看: 2779|回复: 1

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

[复制链接]
  • TA的每日心情

    2017-11-27 16:33
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-5-27 15:06:05 | 显示全部楼层 |阅读模式
    分享到:

    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)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-9-5 22:21
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-6-11 18:09:23 | 显示全部楼层
    我用串口1,发现串口一直进入发送中断
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 09:51 , Processed in 0.119098 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.