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