GD32F303 实现串口调试输出

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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值