打印

【GD32评测】+ 4、驱动串口输出

[复制链接]
772|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tlled|  楼主 | 2020-5-9 16:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    使用arduino扩展板来驱动串口输出。

   一、硬件电路

    1.1、GD32E231硬件电路部分
    使用GD32E231的PA9和PA10的UART0来输出数据。
   
    1.2、扩展板部分电路
    使用USB0-TTL电路将数据送到PC
   
    这里使用了串口扩展电路
   

    二、程序部分

    2.1、uart.c

#include "config.h"


void uart_gpio_init(void)
{
    /* enable COM GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);

    /* connect port to USARTx_Tx */
    gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);

    /* connect port to USARTx_Rx */
    gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);

    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);

    /* configure USART Rx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10);
}

void UART_Init(void)
{
                uart_gpio_init();
    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART0);

    /* USART configure */
    usart_deinit(USART0);
    usart_word_length_set(USART0, USART_WL_8BIT);
    usart_stop_bit_set(USART0, USART_STB_1BIT);
    usart_parity_config(USART0, USART_PM_NONE);
    usart_baudrate_set(USART0, 115200U);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);

    usart_enable(USART0);
}

/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
    usart_data_transmit(USART0, (uint8_t) ch);
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    return ch;
}

void senddat(uint8_t dat)
{
        usart_data_transmit(USART0,  dat);
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
}



void uart_chl(uint8_t chl)
{
        switch (chl)
  {
          case        0:  //RS485
                        uart_chb_l();
                        uart_cha_l();
                  break;
          case        1:        //UART_TTL_CH
                        uart_chb_l();
                        uart_cha_h();
                  break;
                case        2:        //UART_EXT_CH
                        uart_chb_h();
                        uart_cha_l();
                  break;
          default:
                  break;
  }
}
       2.2、uart.h
#ifndef __UART_H
#define __UART_H

#define   RS485_CH                        0
#define   USB_TTL_CH                1
#define   UART_EXT_CH                2


void UART_Init(void);
int fputc(int ch, FILE *f);
void senddat(uint8_t dat);

void uart_chl(uint8_t chl);


#endif

    2.3、main.c


#include "config.h"


int main(void)
{
        systick_config();
        LED_Init();
        BUS_Init();
        UART_Init();
//KEY_Init();
//Init_lcd();

        uart_chl(USB_TTL_CH);
       
        while(1)
        {
                led_test();

                delay_1ms(100);
                printf("www.21ic.com-GD32E231C-START\r\n");
        }
}

    四、测试结果



    串口间隔100ms输出一串数据。
   

使用特权

评论回复
沙发
coshi| | 2020-6-1 18:08 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
板凳
zljiu| | 2020-6-1 18:08 | 只看该作者
不错的分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

129

主题

698

帖子

6

粉丝