摘要
本文章基于国信长天M4开发板,讲述了STM32G431 串口通信的使用步骤,希望对大家有帮助!
M4开发板 串口引脚
由上图可以看出,DAP Link的串口连接在芯片的PA9和PA10引脚。查阅芯片资料,可以得知PA9和PA10分别是芯片USART1的Tx和Px:
PA9 ---> USART1_Tx
PA10 ---> USART1_Rx
UART1串口通信 使用步骤
下文将以赛方提供的示例代码HAL_06_LCD
为基础,为大家讲解串口通信的使用步骤,赛方提供的示例代码可以加入我们的备赛交流QQ群(482754201),在群里下载:
① 将 PA9
,PA10
初始化为USART功能
双击工程目录下的HAL_06_LCD.ioc
,使用STM32CubeMX软件打开工程配置。
点击PA9
和PA10
,分别将其设为USART1_TX
和USART1_RX
。并且点击左边的Connectivity
,将USART1
的Mode
设为Asynchronous
,下面的Parameter Setting
中设置串口的参数,在这里我就是用默认的115200N81,比赛时要根据赛题要求进行设置。
然后切换到NVIC Setting
选项卡,勾选串口中断,最后点击右上角的GENERATE CODE
生成代码。
② 编写串口接收中断函数
刚刚生成的代码中只有串口的基本配置,串口数据的发送和接受则需要我们自己写程序实现,下列代码给出了串口接收数据中断及通过printf函数发送数据等功能,同学们可将下列代码复制到main.c
的/* USER CODE BEGIN 0 */
和/* USER CODE END 0 */
之间。
uint8_t uart_rx_buf[128]; //串口接收数据缓冲区
//串口中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(uart_rx_buf[0] == 'a') //接收导数据 a ,回应 Hello
{
printf("Hello\r\n");
}
HAL_UART_Receive_IT(&huart1, uart_rx_buf, 1); //设置串口中断缓冲区及中断阈值(当前为1)
}
//重定向printf函数为串口输出
int fputc(int ch,FILE *p)
{
char c = ch;
HAL_UART_Transmit(&huart1,(unsigned char *)&c, 1, 50);
return ch;
}
//发送单个数据
void UART1_SendByte(char c)
{
HAL_UART_Transmit(&huart1,(unsigned char *)&c, 1, 50);
}
//发送整个数组
void UART1_SendData(char *p, int len)
{
HAL_UART_Transmit(&huart1,(unsigned char *)p, len, 50);
}
比赛时需要同学们手写代码,所以上述代码要牢记。
③ 打开串口接收数据中断
自动生成的代码仅仅包含了串口的基本配置,还需要我们手动打开串口接收数据中断后,才能正常接收数据。
在main() 函数While之前,插入下列代码,可打开串口接收中断。
HAL_UART_Receive_IT(&huart1, uart_rx_buf, 1); //设置串口中断缓冲区及中断阈值(当前为1)
上述代码中的uart_rx_buf
为接收数据的缓冲区,接收到了数据将会放到这个缓冲区里面,可以从这个缓冲区读取。后面的1
表示接收数据进入中断的阈值,设为1则是接收到1个字节的数据就进入中断,设为3则表示接收到3个字节的数据才会进入中断。
④ 通过串口发送数据
步骤②的代码中给大家实现了printf,发送单个字节数据,发送数组的功能函数,可以按照下列格式进行调用。
printf("Hello World!\r\n"); //发送Hello World!
UART1_SendByte(0xF3); //发送16进制数据 0xF3
UART1_SendData("123456", 6); //发送数组
⑤ 串口接收数据
在上面的串口中断回调函数中,已经实现了简单的数据处理,电脑发送小写字母a
给设备,设备将会回复Hello。
总结
UART使用步骤总结如下:
- 将PAPA10引脚设为USART1功能,并配置串口参数,打开串口中断
- 编写串口接收数据中断函数,以及串口发送数据函数
- 按需调用调用
printf("Hello World!\r\n");
,UART1_SendByte();
,UART1_SendData();
发送数据 - 在
HAL_UART_RxCpltCallback()
中处理接受到的数据
课后作业
如果此文章对你有帮助,欢迎点赞
关注
收藏
转发
.
学习过程中遇到问题可以在评论区留言,或者加入我们的QQ群(482754201),在群里讨论。
下图为鹏老师设计的蓝桥杯兼容开发板,做了一些优化,有需要的同学可以参考下。