【HAL库】STM32F407ZGT6实现串口中断发送和接收

**

【HAL库】STM32F407ZGT6实现串口中断发送和接收

(保姆级教写代码1)

**

前言

根据近期所做的项目,想给大家分享一些有关STM32的各类通信方式的代码教程,都是基于STM32HAL库的CUBEMX(以下简称粗鄙)开发方式,按照步骤做肯定能够通信。本期分享的是采用中断模式的串口发送和接收代码生成与实现。

粗鄙的配置

1.点这个选芯片型号。
在这里插入图片描述
2.选完芯片后第一步配置系统时钟,这里全部使用外部晶振。
在这里插入图片描述
然后进入时钟配置界面配置各个模块的时钟
在这里插入图片描述
3.开启串口1.
在这里插入图片描述
这里的波特率选用9600,注意变粉的选项不是报错,而是有其他的东西占用了这一项的功能。
4.生成代码
在这里插入图片描述
这里我用的是Keil MDKV5环境,注意这里的路径和工程名称里不能带有中文,带中文的话会生成没有启动文件的代码,会报错。
在这里插入图片描述
这里勾选上生成外设各自的头文件与源文件,否则所有的外设初始化配置全部在main里。
点击GENERATE CODE生成代码。
在这里插入图片描述
生成的工程文件位于路径下的MDK-ARM文件夹下。
至此基本配置就大功告成啦,小伙伴们快自己生成一下看看!

串口中断发送

首先定义一个数组,把你想发的数据存里面
在这里插入图片描述
然后发就完事了,很简单,就一行代码!巨简单有木有

在这里插入图片描述
我们看一下发送函数的源码
在这里插入图片描述

发送函数有三个参数,第一个是结构体UART_HandleTypeDef类型的指针,在usart.c文件里,包含了串口的初始化的各个参数。
在这里插入图片描述
第二个是uint8_t类型的指针,这里也就是我们要发送的数组名称
第三个是我们要发送的数组大小。
ok了,放在while(1)里编译下进去搞一下
在这里插入图片描述
连上TTL转USB模块,看下有没有收到
在这里插入图片描述
咔咔的收!

串口中断接收

我们来看一下开启中断接收的UART_Start_Receive_IT()的源码
在这里插入图片描述
第一个参数也是结构体UART_HandleTypeDef类型的指针,在usart.c文件里,包含了串口的初始化的各个参数。
第二个参数是uint8_t类型的指针,这里也就是我们要存放接收到的数据的数组名称
第三个参数就有些内涵了,是接收到Size个数据后进入串口接收中断。
这个函数每开启一次后就会进入串口中断回调函数中,然后关闭串口接收中断,所以正常情况下我们在执行一次UART_Start_Receive_IT()后,只有接收到Size个数据后才会进入中断回调函数,执行完回调函数后,如果不再次执行一次UART_Start_Receive_IT()的话,就不会再接收任何数据了。
因此,我们如果想接收变长数组怎么办呢?
解决办法是,每次仅中断接收1个Size的数据,定义一个足够大的数组,将接收到的单个数组一个个的放进去,然后每次在中断回调函数执行的末尾再次开启UART_Start_Receive_IT()。设置一个标志位,在中断回调函数里当收到0x0A(收到啥也可以自己定义)时,将标志位置位,0或1自己定,这时就别再开启接收中断了,在别的地方检测这个标志位,当标志位置位时读取那个足够大的数组里的数据就可!如果还想接收数据,就在程序的其他的地方再次执行UART_Start_Receive_IT()就行。
接下来在回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)里写代码就行!
在这里插入图片描述
然后编译成功后下进去搞一搞!
发送一串数据(注意16进制发送和发送新行)
在这里插入图片描述
成功接收
在这里插入图片描述
注意‘/n’为字符\n的ASCII码,也就是16进制的0x0A,接收到的16进制数后面的单引号里的东西也就是ASCII码为该16进制数的符号!

至此大功告成,小伙伴们快来试试趴!!!!!

版权声明:本文为CSDN博主「秋裤男神经」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44323605/article/details/121712034

生成海报
点赞 0

秋裤男神经

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

【STM32Cube笔记】12-配置外部中断

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配

stm32cubemx+HAL+串口接收中断

stm32cubemxHAL串口接收中断 在cubemx配置完串口和global interrupt后需要在keil中添加如下代码。 第一步:在main函数中添加接收中断标志位开启函数 HAL_UART_Receive_IT