IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【HAL库】STM32F407ZGT6实现串口中断发送和接收 -> 正文阅读

[嵌入式]【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进制数的符号!

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

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:12:06  更:2021-12-05 12:13:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 2:08:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码