前言
本节我们学习开发板的串口通信。
一、实验原理
1. 串口通信原理
详见STM32串口通信详解
2.开发板原理图
在开发板上,STM32G431RBT6的串口TX和RX是通过DAP进行转发的,因此我们直接使用PA9 TX和PA10 RX即可与PC进行串口通信。
二、配置步骤
1.创建工程,配置时钟、MDK5配置等。
2.配置PA9为USART1_TX,PA10为USART1_RX
3.配置串口1位异步通信模式
4.配置波特率、数据长度、校验位、停止位。
5.配置串口接收中断,然后点击生成keil5代码。
三、串口发送
1.直接使用HAL_USART_Transmit发送。
(1)引入stdio.h和string.h
#include "stdio.h"
#include "string.h"
(2)在main.c中定义相关代码
int counter = 0;
char str[40];
sprintf(str, "%04d:Hello,world.\r\n", counter);
HAL_UART_Transmit(&huart1,(unsigned char *)str, strlen(str), 50);
HAL_Delay(500);
if(++counter == 10000){
counter = 0;
}
(3)实验现象,串口助手间隔0.5s接收到一条Hello,world.
2.使用重定向prtinf函数发送。
(1)在uart.c中添加重定向函数
#include "stdio.h"
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
(2)工具栏设置使用MicroLib库。
(3)更换使用printf函数发送串口数据。
printf("%04d:Hello,world.\r\n",counter);
HAL_Delay(500);
if(++counter == 10000){
counter = 0;
}
(4)实验现象,串口助手间隔0.5s接收到一条Hello,world.
四、串口接收
1.定义缓存接收数组,开启串口接收中断。
char rxBuffer[1];
HAL_UART_Receive_IT(&huart1,(uint8_t *)rxBuffer,1); //启动接收中断
2.重写串口接收中断回调函数,并将接受的数据再通过串口发送出去。
//串口接收回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
//将数据返回回去
HAL_UART_Transmit(&huart1,(uint8_t *)rxBuffer,1,0xffff);
//重新启动接收中断
HAL_UART_Receive_IT(&huart1,(uint8_t *)rxBuffer,1);
}
3.实验现象,串口助手发送出去数据后,立马接收到同样的数据。
总结
以上就是开发板的串口通信实验,如有错误,感谢指正。
鉴于官方开发板售价过高,本人自己制作了一款蓝桥杯嵌入式开发板,完全兼容官方的开发板,并且接下来会基于这款开发板进行学习和制作学习日志,到时候所拍实物图片会与官方开发板略有不同,如果有意向一起学习的同学也可以私聊我互相学习交流,ps: 找我低价买块开发板自己学习也是可以的 ~ 。