GD32F310G8 -【1】USART发送&串口重定向

GD32F310-USART发送&串口重定向


USART 简介及特点

  • 最多两个 USART,工作频率高达 4.5 MB/s
  • 支持异步和时钟同步串行通信模式
  • IrDA SIR 编码器和解码器支持
  • LIN 中断生成和检测
  • 符合 ISO 7816-3 标准的智能卡接口

USART(USART0、USART1)用于在并行和串行之间转换数据接口,使用同步或异步提供灵活的全双工数据交换转移。 它也常用于 RS-232 标准通信。 USART 包括一个可编程的波特率发生器,它能够对系统时钟进行分频以产生USART 发送器和接收器的专用时钟。 USART 还支持 DMA 高速数据通信功能。

开发环境&参考文档

  • Keil-MDK 5.34
  • Windows10
  • 固件库-GD32F3x0_Firmware_Library_V2.2.0
  • GD32F310xx-数据手册-Rev1.1
  • GD32F3x0-用户手册-Rev2.5
  • GD32F3x0-固件库使用指南-Rev1.2

代码部分

GPIO 端口配置 LED

gpio.h 文件

#ifndef _GPIO_H_
#define _GPIO_H_

#include "gd32f3x0.h"

void HW_GpioInit(void);

#endif


gpio.c 文件

#include "gpio.h"


void HW_GpioInit(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);//启用外设时钟功能
	
	gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);//设置GPIO模式
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);//设置GPIO输出类型和速度
    gpio_bit_set(GPIOA, GPIO_PIN_1);//设置Pin脚为高电平
}


USART 功能初始化

uart.h 文件

#ifndef _UART_H_
#define _UART_H_

#include "gd32f3x0.h"


void HW_UsartInit(void);
void Usart_ReceiveString(void);
void Usart_TransmitString(char *String);

#endif


uart.c 文件

#include "uart.h"


void HW_UsartInit(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);启用外设时钟功能
	rcu_periph_clock_enable(RCU_USART0);
	
	gpio_af_set(GPIOA,GPIO_AF_1,GPIO_PIN_9);//端口复用为串口模式
	gpio_af_set(GPIOA,GPIO_AF_1,GPIO_PIN_10);
	
	gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);//设置GPIO模式
	gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);//设置GPIO输出类型和速度
	
	gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);
	gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);

	
	usart_deinit(USART0);//复位串口0
	usart_baudrate_set(USART0,9600U);//设置串口0的波特率
	
	usart_word_length_set(USART0,USART_WL_8BIT);//设置传输数据长度
	usart_parity_config(USART0,USART_PM_NONE);//设置奇偶校验位
	usart_stop_bit_set(USART0,USART_STB_1BIT);//设置停止位
	
	usart_receive_config(USART0, USART_RECEIVE_ENABLE);//使能串口接收功能
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//使能串口发送功能
	
	usart_enable(USART0);//使能外设
	
}

void Usart_ReceiveString(void)
{

}



void Usart_TransmitString(char *String)
{
	while(*String)
	{
		usart_data_transmit(USART0,*String++);
		
		while(usart_flag_get(USART0,USART_FLAG_TC)==0);
	}
}

void USART0_IRQHandler()
{
	
}


串口重定向实现 printf 打印

Printf.h 文件

#ifndef _PRINTF_H_
#define _PRINTF_H_

#include "stdio.h"
#include "uart.h"

#endif


Printf.c 文件
注 意 : 此 处 要 判 断 串 口 是 否 发 送 完 成 ! ! ! \color{red}{注意:此处要判断串口是否发送完成!!!}

#include "Printf.h"


//此处代码与使用 Printf 函数相关,使用时要添加 stdio.h 文件

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif 

PUTCHAR_PROTOTYPE
{
	usart_data_transmit(USART0,(uint32_t)ch);	
	while(RESET == usart_flag_get(USART0,USART_FLAG_TC));
	return ch;
}


主函数 main.c

#include "gd32f3x0.h"
#include "systick.h"


#include "gpio.h"
#include "uart.h"
#include "Printf.h"

int main(void)
{  
    systick_config();
    HW_GpioInit();	
	HW_UsartInit();
    
    while(1)
	{
        delay_1ms(100);
        gpio_bit_toggle(GPIOA,GPIO_PIN_1);//LED电平反转
		
		Usart_TransmitString("这是一个串口测试\n");
        
		printf("串口重定向测试\n");
    }
}




测试串口打印及LED指示代码运行状态

image

Link

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Stark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值