GD32F4xx(二)串口库函数学习
本文为仅为笔者的学习记录日志
使用的芯片为GD32F470VET6
关于GD32来说,可以先掌握一点基础的有关串口通信的使用方法,这篇文章主要讲到如何向上位机发送内容
翻看gd32f4xx_usart.h里面第356行看开始,就是所有有关串口的函数了,不过,作为入门学习来看,只需要了解到前一小部分就行了,后续慢慢深入会有了解

void usart_deinit(uint32_t usart_periph);//串口重置
void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval);//设置波特率
void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg);//设置效验位
void usart_word_length_set(uint32_t usart_periph, uint32_t wlen);//设置数字位的长度
void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen);//设置停止位
void usart_enable(uint32_t usart_periph);//串口使能
void usart_disable(uint32_t usart_periph);
void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig);//传输数据函数
void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig);//接收数据函数
在进行串口通信前,先要了解到自己的核心板对引脚的装配,翻看我自己这款核心板可得知

串口是接在ch340芯片上面的,这里或许不明白什么是ch340

简单来说,他是一共usb转串口的芯片,直接插上usb就能够进行串口通信和用杜邦线连接引脚的效果是一样的,所以使用你自己的下载器上面的RX/TX去连接引脚效果是一样的
通过原理图可得串口引脚分别是PA9,PA10
那么就可以开始串口配置了
如前文所讲,所有外设在使用前都应该对其时钟进行使能
rcu_periph_clock_enable(RCU_USART0);//USART0时钟使能
rcu_periph_clock_enable(RCU_GPIOA); //对端口A时钟使能
因为你使用了IO口使用也要对端口进行使能
下一步就是对IO进行复用设置,查阅数据手册可以得知

复用设置应该使用AF_7
gpio_af_set(GPIOA,GPIO_AF_7,USART0_RX_Pin);//对PA10进行复用
gpio_af_set(GPIOA,GPIO_AF_7,USART0_TX_Pin);//对PA9进行复用
这里之所以使用的是USART0_RX_Pin是我在文件上使用的宏定义

下一步就是对IO口进行初始化工作了
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART0_RX_Pin);//设置PA10模式为引脚复用模式,上拉
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART0_TX_Pin);//设置PA9模式为引脚复用模式,上拉
gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART0_RX_Pin);//设置PA10为推挽输出
gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART0_TX_Pin);//设置PA9为推挽输出
就和前文点亮LED灯一样的设置程序,只是在选择Mode的时候,应该选择GPIO_MODE_AF复用模式,推挽输出
配置完引脚,下面就是对串口的一些基本配置了
usart_deinit(USART0);//对串口0进行重置
usart_baudrate_set(USART0,115200);//设置串口0的波特率为115200
usart_parity_config(USART0,USART_PM_NONE);//设串口0无效验位
usart_word_length_set(USART0,USART_WL_8BIT);//设置数据为八位
usart_stop_bit_set(USART0,USART_STB_1BIT);//设置停止位为一位
usart_transmit_config(USART0,USART_TRANSMIT_ENABLE);//对串口发送进行使能
usart_receive_config(USART0,USART_RECEIVE_ENABLE);//对串口接收进行使能
usart_enable(USART0);//对串口使能
就和stm32的配置模式一样,设置波特率,无效验位,数据位为8,停止位为1,这些都是常用的串口配置,这都可以直接复制来用
以上就是关于普通串口的配置流程了,最后我在把全部总结一遍
#define USART0_RX_Pin GPIO_PIN_10
#define USART0_TX_Pin GPIO_PIN_9
void USART_INIT(void)
{
rcu_periph_clock_enable(RCU_USART0);//USART0时钟使能
rcu_periph_clock_enable(RCU_GPIOA); //对端口A时钟使能
gpio_af_set(GPIOA,GPIO_AF_7,USART0_RX_Pin);//对PA10进行复用
gpio_af_set(GPIOA,GPIO_AF_7,USART0_TX_Pin);//对PA9进行复用
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART0_RX_Pin);//设置PA10模式为引脚复用模式,上拉
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART0_TX_Pin);//设置PA9模式为引脚复用模式,上拉
gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART0_RX_Pin);//设置PA10为推挽输出
gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART0_TX_Pin);//设置PA9为推挽输出
usart_deinit(USART0);//对串口0进行重置
usart_baudrate_set(USART0,115200);//设置串口0的波特率为115200
usart_parity_config(USART0,USART_PM_NONE);//设串口0无效验位
usart_word_length_set(USART0,USART_WL_8BIT);//设置数据为八位
usart_stop_bit_set(USART0,USART_STB_1BIT);//设置停止位为一位
usart_transmit_config(USART0,USART_TRANSMIT_ENABLE);//对串口发送进行使能
usart_receive_config(USART0,USART_RECEIVE_ENABLE);//对串口接收进行使能
usart_enable(USART0);//对串口使能
}
关于数据发送
仔细阅读usart_data_transmit();函数即可写出关于发送字符串的函数
void usart_send_data(uint8_t ucch)
{
usart_data_transmit(USART0, (uint8_t)ucch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); // 等待发送数据缓冲区标志置位
}
void usart_send_String(uint8_t *ucstr)
{
while(ucstr && *ucstr) // 地址为空或者值为空跳出
{
usart_send_data(*ucstr++);
}
}
int fputc(int ch, FILE *f)
{
usart_data_transmit(USART0, (uint8_t)ch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); // 等待发送数据缓冲区标志置位
return ch;
}
int fgetc(FILE *f)
{
while(RESET == usart_flag_get(USART0, USART_FLAG_RBNE)); // 等待接收缓冲区标志置位
int ch = usart_data_receive(USART0); // 从串口接收数据
return ch;
}
以上就是写的发送函数和gd32的普通串口重定义,就可以使用printf();函数进行调试了
我这里就简单写了个示例

编译下载一气呵成,打开上位机,按下复位按键就可以看见发送过来的数据了

更多推荐

所有评论(0)