改变串口需要找到usart其他串口设置的tx和rx的引脚设置
bsp_usart_h
#ifndef _BSP_USART_H
#define _BSP_USART_H
#include "gd32f4xx.h"
#include "systick.h"
#define BSP_USART_TX_RCU RCU_GPIOA
#define BSP_USART_RX_RCU RCU_GPIOA
#define BSP_USART_RCU RCU_USART0
#define BSP_USART_TX_PORT GPIOA
#define BSP_USART_RX_PORT GPIOA
#define BSP_USART_AF GPIO_AF_7
#define BSP_USART_TX_PIN GPIO_PIN_9
#define BSP_USART_RX_PIN GPIO_PIN_10
#define BSP_USART USART0
void usart_gpio_config(void);
void usart_send_data(uint8_t ucch);
void usart_send_string(uint8_t *ucstr);
#endif
bsp_usart_c
#include "bsp_usart.h"
#include "stdio.h"
void usart_gpio_config(void)
{
//开启时钟
rcu_periph_clock_enable(BSP_USART_TX_RCU);
rcu_periph_clock_enable(BSP_USART_TX_RCU);
rcu_periph_clock_enable(BSP_USART_RCU);
//配置gpio复用模式
gpio_af_set(BSP_USART_TX_PORT,BSP_USART_AF,BSP_USART_TX_PIN);
gpio_af_set(BSP_USART_RX_PORT,BSP_USART_AF,BSP_USART_RX_PIN);
//配置gpio模式
//配置tx rx模式上拉模式
gpio_mode_set(BSP_USART_TX_RCU,GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_TX_PIN);
gpio_mode_set(BSP_USART_RX_RCU,GPIO_MODE_AF,GPIO_PUPD_PULLUP,BSP_USART_RX_PIN);
//配置模式推挽模式
gpio_output_options_set(BSP_USART_TX_RCU,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,BSP_USART_TX_PIN);
gpio_output_options_set(BSP_USART_RX_RCU,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,BSP_USART_RX_PIN);
/* 配置串口的参数 */
usart_deinit(BSP_USART); // 复位串口
usart_baudrate_set(BSP_USART,115200U); // 设置波特率
usart_parity_config(BSP_USART,USART_PM_NONE); // 没有校验位
usart_word_length_set(BSP_USART,USART_WL_8BIT); // 8位数据位
usart_stop_bit_set(BSP_USART,USART_STB_1BIT); // 1位停止位
/* 使能串口 */
usart_enable(BSP_USART); // 使能串口
usart_transmit_config(BSP_USART,USART_TRANSMIT_ENABLE); // 使能串口发送
}
//发送函数
void usart_send_data(uint8_t ucch)
{
usart_data_transmit(BSP_USART,(uint8_t)ucch); // 发送数据
while(RESET == usart_flag_get(BSP_USART,USART_FLAG_TBE)); // 等待发送数据缓冲区标志置位
}
int fputc(int ch, FILE *f)
{
usart_send_data(ch);
// 等待发送数据缓冲区标志置位
return ch;
}
void usart_send_string(uint8_t *ucstr)
{
while(ucstr && *ucstr) // 地址为空或者值为空跳出
{
usart_send_data(*ucstr++); // 发送单个字符
}
}
main.c
#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "gd32f4xx_gpio.h"
#include "led1.h"
#include "bsp_usart.h"
int main()
{
led_gpio_config();//led设置
systick_config();//启动定时器
usart_gpio_config();
//usart_send_data('21');
usart_send_string('yell');
usart_send_data('yell');
printf('yell');
}
三种方法
//发送函数
void usart_send_data(uint8_t ucch)
{
usart_data_transmit(BSP_USART,(uint8_t)ucch); // 发送数据
while(RESET == usart_flag_get(BSP_USART,USART_FLAG_TBE)); // 等待发送数据缓冲区标志置位
}
int fputc(int ch, FILE *f)
{
usart_send_data(ch);
// 等待发送数据缓冲区标志置位
return ch;
}
void usart_send_string(uint8_t *ucstr)
{
while(ucstr && *ucstr) // 地址为空或者值为空跳出
{
usart_send_data(*ucstr++); // 发送单个字符
}
}