1. 准备工作
请点击查看《GD32F303 Keil 开发环境部署》博文
2. 实现步骤
2.2 Keil 启用 MicroLib 库
点击如图所示图标
在弹窗中选择 Target 页面,勾选 Use MicroLib
点击 OK 按钮确认修改
2.3 代码实现
本示例以数据手册 USART1 作为演示。
uart_printf.h
/*
* @Descripttion: uart printf
* @Author: Jerry
* @Date: 2021-12-01 19:19:22
* @LastEditTime: 2021-12-22 14:55:33
*
* Copyright 2021
*/
#ifndef _UART_PRINTF_H_
#define _UART_PRINTF_H_
#include "stdio.h"
#include "gd32f303e_eval.h"
#define DBG_USART_BAUD_RATE 115200
#define DBG_USART_DATA_BIN_LEN USART_WL_8BIT
#define DBG_USART_PARITY_MODE USART_PM_NONE
#define DBG_USART_STOP_BIT_LEN USART_STB_1BIT
#define DBG_GPIO_RCU_PERIPH RCU_GPIOA
#define DBG_GPIO_PERIPH GPIOA
#define DBG_USART_RCU_PERIPH RCU_USART1
#define DBG_USART USART1
#define DBG_USART_TX_PIN GPIO_PIN_2
#define DBG_USART_RX_PIN GPIO_PIN_3
/* uart printf init */
void uart_printf_init(void);
#endif
uart_printf.c
/*
* @Descripttion: uart printf
* @Author: Jerry
* @Date: 2021-12-01 19:19:07
* @LastEditTime: 2021-12-23 13:30:36
*
* Copyright 2021
*/
#include "uart_printf.h"
/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
while(RESET == usart_flag_get(DBG_USART, USART_FLAG_TBE));
usart_data_transmit(DBG_USART, (uint8_t)ch);
return ch;
}
/* uart printf init */
void uart_printf_init(void)
{
/* enable GPIO clock */
rcu_periph_clock_enable(DBG_GPIO_RCU_PERIPH);
/* enable USART clock */
rcu_periph_clock_enable(DBG_USART_RCU_PERIPH);
/* connect port to USARTx_Tx */
gpio_init(DBG_GPIO_PERIPH, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, DBG_USART_TX_PIN);
/* connect port to USARTx_Rx */
gpio_init(DBG_GPIO_PERIPH, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, DBG_USART_RX_PIN);
/* USART configure */
usart_deinit(DBG_USART);
usart_baudrate_set(DBG_USART, DBG_USART_BAUD_RATE);
usart_word_length_set(DBG_USART, DBG_USART_DATA_BIN_LEN);
usart_parity_config(DBG_USART, DBG_USART_PARITY_MODE);
usart_stop_bit_set(DBG_USART, DBG_USART_STOP_BIT_LEN);
usart_hardware_flow_rts_config(DBG_USART, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(DBG_USART, USART_CTS_DISABLE);
usart_receive_config(DBG_USART, USART_RECEIVE_ENABLE);
usart_transmit_config(DBG_USART, USART_TRANSMIT_ENABLE);
usart_enable(DBG_USART);
}
main.c
/*
* @Descripttion: main
* @Author: Jerry
* @Date: 2021-11-30 14:08:10
* @LastEditTime: 2021-12-22 14:45:15
*
* Copyright 2021
*/
#include "gd32f30x.h"
#include "gd32f303e_eval.h"
#include "systick.h"
#include "uart_printf.h"
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
systick_config();
uart_printf_init();
printf("Hello World\n");
}