串口配置说明
UART0配置源码
#ifndef _USB2COM_DRV_H__
#define _USB2COM_DRV_H__
#include <stdint.h>
static void Usb2ComGpioInit(void);
static void Usb2ComUartInit(uint32_t baudRate);
void Usb2ComTest(void);
void Usb2ComDrvInit(void);
#endif
#include <stdio.h>
#include <stdint.h>
#include "gd32f30x.h"
typedef struct
{
uint32_t uartNo;
rcu_periph_enum rcuUart;
rcu_periph_enum rcuGpio;
uint32_t Gpio;
uint32_t txPin;
uint32_t rxPin;
}UartHwInfo_t;
UartHwInfo_t g_uartHwInfo = {USART0, RCU_USART0, RCU_GPIOA, GPIOA, GPIO_PIN_9, GPIO_PIN_10};
static void Usb2ComGpioInit(void)
{
/*使能GPIO时钟*/
rcu_periph_clock_enable(g_uartHwInfo.rcuGpio);
/*配置TX对应管脚为推挽输出模式*/
gpio_init(g_uartHwInfo.Gpio, GPIO_MODE_AF_PP, GPIO_OSPEED_10MHZ, g_uartHwInfo.txPin);
/*配置RX对应管脚为浮空输入/上拉输入模式*/
gpio_init(g_uartHwInfo.Gpio, GPIO_MODE_IPU, GPIO_OSPEED_10MHZ, g_uartHwInfo.rxPin);
}
static void Usb2ComUartInit(uint32_t baudRate)
{
/*使能UART时钟*/
rcu_periph_clock_enable(g_uartHwInfo.rcuUart);
/*复位UART*/
usart_deinit(g_uartHwInfo.uartNo);
/*通过USART CTLO寄存器的WL设置字长*/
usart_word_length_set(g_uartHwInfo.uartNo, USART_WL_8BIT);
/*通过USART CTLO寄存器的PCEN设置校验位*/
usart_parity_config(g_uartHwInfo.uartNo,USART_PM_NONE);
/*在USARTCTL 1寄存器中写STB[1:0]位来设置停止位的长度*/
usart_stop_bit_set(g_uartHwInfo.uartNo, USART_STB_1BIT);
/*在波特率寄存器中设置波特率*/
usart_baudrate_set(g_uartHwInfo.uartNo, baudRate);
/*在USART CTLO寄存器中设置TEN位,使能发送功能*/
usart_transmit_config(g_uartHwInfo.uartNo,USART_TRANSMIT_ENABLE);
/*在USART CTLO寄存器中置位UEN位,使能UART*/
usart_enable(g_uartHwInfo.uartNo);
}
void Usb2ComTest(void)
{
for(uint8_t i=0; i<=250; i++)
{
// 发送数据
usart_data_transmit(g_uartHwInfo.uartNo, i);
/*等待TBE置位,判断数据缓存区里是否有数据,0表示发送数据没有完成,1表示发送数据完成了*/
while(RESET == usart_flag_get(g_uartHwInfo.uartNo,USART_FLAG_TBE));
}
// // 判断移位寄存器的数据是否发送完成
// while(RESET == usart_flag_get(g_uartHwInfo.uartNo,USART_FLAG_TC));
//
// // 关闭串口发送
// usart_transmit_config(g_uartHwInfo.uartNo,USART_TRANSMIT_DISABLE);
}
/*USB转串口硬件初始化*/
void Usb2ComDrvInit(void)
{
Usb2ComGpioInit();
Usb2ComUartInit(115200);
}
/*printf默认函数打印输出到显示器,如果要输出到串口
必须重新实现fputc函数,将输出指向串口,称为重定向*/
int fputc(int ch, FILE *f)
{
// 发送数据
usart_data_transmit(g_uartHwInfo.uartNo, (uint8_t) ch);
/*等待TBE置位,判断数据缓存区里是否有数据,0表示发送数据没有完成,1表示发送数据完成了*/
while(RESET == usart_flag_get(g_uartHwInfo.uartNo,USART_FLAG_TBE));
return ch;
}
main函数
#include <stdint.h>
#include <stdio.h>
#include "gd32f30x.h"
#include "key_drv.h"
#include "led_drv.h"
#include "systick.h"
#include "usb2Com_drv.h"
int main(void)
{
LedDrvInit();
KeyDrvInit();
SysitickInit();
Usb2ComDrvInit();
//串口发送测试
//Usb2ComTest();
printf("uasrt test!\n");
while(1)
{
}
}
工程文件
链接: [link]https://download.csdn.net/download/weixin_44355245/89388735)