小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序

小熊派gd32f303学习之旅(3)—串口打印第一个Hello world程序

一、硬件连接

通过查看原理图我们可以看到,当【UART通信选择开关】拨向【AT-MCU】时,USB虚拟串口连接到MCU的UART0,我们只需要将开关拨到【AT-MCU】。在这里插入图片描述

二、编写USART驱动程序

Hardware文件夹下新建uart.c文件并添加到工程中,在include文件夹下新建uart.h文件。
编写uart.h文件,定义一个串口1初始化函数:

#ifndef __USART_H
#define __USART_H

#include <stdio.h>
#include "gd32f30x.h"

/* 串口0初始化,参数为波特率 */
void uart0_init(uint32_t bound);

#endif

然后我们在usart.c中实现串口初始化函数

/* USART0串口初始化函数
 * 参数:波特率
 * 返回值:无	*/
void uart0_init(uint32_t bound)
{
    
    	
	/* 使能 GPIOA 时钟 */
    rcu_periph_clock_enable(RCU_GPIOA);

    /* 使能 USART0 时钟 */
    rcu_periph_clock_enable(RCU_USART0);

    /* PA9  复用为 USART0_Tx */
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);

    /* PA10 复用为 USARTx_Rx */
    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ,GPIO_PIN_10);
					
    /* USART0 初始化配置 */
    usart_deinit(USART0);
    usart_baudrate_set(USART0, bound);						/* 设置波特率 */
    usart_receive_config(USART0, USART_RECEIVE_DISABLE);	/* 禁止接收 */
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);	/* 使能发送 */	
	usart_enable(USART0);
}

接下来将C库的printf函数重定向到USART0

/* 加入以下代码,支持printf函数,而不需要选择use MicroLIB	*/  
#if 1
#pragma import(__use_no_semihosting)             
/* 标准库需要的支持函数 */                
struct __FILE 
{
    
     
	int handle; 

}; 

FILE __stdout;       
/* 定义_sys_exit()以避免使用半主机模式  */  
void _sys_exit(int x) 
{
    
     
	x = x; 
} 
/* 重定义fputc函数 */
int fputc(int ch, FILE *f)
{
    
       
	while (RESET == usart_flag_get(USART0, USART_FLAG_TBE))
		;	
	usart_data_transmit(USART0, (uint8_t)ch);

	return ch;
}
#endif 

这样usart.c就编写好了

三、打印Hello world!

接下来我们在main.c中添加usart.h头文件包含,然后初始化USART0,每隔两秒中打印一次Hello world!,

#include "gd32f30x.h"
#include "systick.h"
#include "usart.h"

int main(void)
{
    
    
	/* 配置系统时钟 */
	systick_config();
	/* 初始化LED */
	led_init();
	/* 初始化USART0 */
	uart0_init(115200);

    while(1)
	{
    
    
		/* 通过串口打印 Hello world! */
		printf("Hello world! \r\n");
		
        /* turn on LED */
        LED(1);
        delay_1ms(1000);

        /* turn off LED */
        LED(0);
        delay_1ms(1000);
    }
}

另外,我们需要注意的时,要把usart的固件库文件添加进来:
在这里插入图片描述
接下来编译,烧录到开发板,在串口调试助手可以看到,成功打印Hello world!
在这里插入图片描述

四、附录

完整代码我存放在码云,可以查看:https://gitee.com/william_william/BearPi-GD32F303RGT6.git
上一篇:小熊派gd32f303学习之旅(2)—新建工程点亮第一个LED灯
下一篇:小熊派gd32f303学习之旅(4)—使用DMA实现串口打印

猜你喜欢

转载自blog.csdn.net/qq_38113006/article/details/108819149