使用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输出一串数据。
|