网站首页
手机版

STM32单片机从零开始使用教程(三) 阻塞模式串口的简单应用

更新时间:作者:小小条

之前跑马灯的时候已经生成过了一次keil工程,不过只是简单地编译下载,这次来仔细看一下工程中都有什么。

STM32单片机从零开始使用教程(三) 阻塞模式串口的简单应用

顺便体验一下快捷的串口设置。

与之前类似,这次需要配置一下串口


模式就用异步,毕竟我们懒得提供额外的同步时钟。

波特率115200,字长8位。

ok,闲话不多说,打开keil!

认识keil工程

工程目录


在keil的project树中可以看到有四大目录

其中Application/MDK-ARM目录下的startup_stm32f103xb.s文件为启动文件(其在资源管理器的目录就是工程目录下的MDK-ARM),打开后可以发现全是晦涩的汇编代码。我们只需要知道它负责我们单片机的启动,进行堆栈指针、程序计数器指针、堆栈大小、异常向量表、C的分支入口等初始化的工作,有兴趣可以针对stm32启动文件深入了解。

Application/User/Core目录下的内容则是用户的源代码,是我们要操作的地方,其在资源管理器下的路径就是工程目录下的Core。

Driver路径下的HAL类似于标准外设库,是Hardware Abstraction Layer(硬件抽象层),不过比标准库的集成度还要再高一些。这是STMcube帮助我们生成的,目前来讲不要随便修改它

另外一股CMSIS则是CMSIS微控制器软件接口标准,我们也不会动它。


代码内容

我们现在应该主要研究的就是User/Core目录下的内容

首先是main.c

开头生成了一段简介,以及他们ST的版权声明

USER CODE BEGIN Header和USER CODE END Header

意味着我们可以把自己的说明插入到这一块。

在几个头文件引用之后,又出现了很多段的ben和end

理论上来讲,我们这些全局变量的定义啊,宏的定义啊什么的其实怎么来都行,你觉得舒服然后能跑起来不报错就没问题。但是对于工程产出而言,能够条理规范地写清楚代码也十分的重要,因此不妨按照人家的模板分门别类的把自己的代码安放到合适的地方。


接下来看Main函数,在无限while循环之前有几个初始化函数


此处的HAL_Init()对所有外设进行初始化,包括flash接口和systick

在进行系统时钟配置后开始初始化我们配置的外设

这里就和Cube工程里面的设置有关了,比如说我打开了GPIO和USART1,那么这里就会有对应的初始化函数。

串口程序

咱们来分析一下串口的相关代码

go to definition可以找到串口初始化代码的原型

其内容就是给一个叫huart1的结构体的成员进行赋值,从这些命名看大概就可以知道分别是实例、波特率、字长等等

在初始化赋值后查询一下初始化是否成功,失败就进入错误处理。

huart1是这样的一个结构体类型,也可以具体地查看结构体的定义。


好像没了,那要怎么实现串口的通信呢?

在stm32f1xx_hal_uart.c中有一段IO 操作函数


注释里面已经大概告诉了我们不同的模式要使用什么样的api

阻塞模式

以阻塞模式为例,我们使用 HAL_UART_Transmit()发送消息

找到发送函数的定义


其输入参量需要*huart(这个已经定义好了,就是我们初始化时做的事情),然后是一个指向发送数据的uint8指针,以及数据的大小,最后是超时


我们先定义一个变量作为发送的消息

那么调用函数就应该把这几个参数传进去,注意需要取地址的地方


接受函数与之类似

我们可以稍微调整一下,把message改成数组,并且添加一个status标志位

在while循环中,我们查询status的状态,如果搞定了,就把消息transmit出去。

下载程序

然后把它丢到串口调试助手上,可以看到单片机能把我们发过去的内容发回来

但缺点有两个,一是我接收到的字符内容得把缓冲区填满了才会执行下一步操作

另一个就是由于是阻塞通信,在没有接受完所有消息时,它就会一直卡在串口接受的位置。

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

为您推荐

STM32CubeMX系列之GPIO教程

教程目标使用 STM32CubeMX 配置 STM32F407ZGT6 的 GPIO 引脚为输入和输出模式。实现 LED 闪烁程序。通过按键控制 LED 的开关状态。使用 STM32CubeIDE 编写和调试代码。准备

2026-01-24 17:04

STM32单片机从零开始使用教程(二) 使用Cube搭建跑马灯工程并下载

通过cube建立工程 RCC设置为外部晶振 高速晶振对应的引脚会亮起 进入clock configuration进行时钟配置,输入频率8M盒子PLL Source Mu改为使用外部时钟HSE,系统时钟System Clo

2026-01-24 17:03

傻瓜式教程:如何使用多合一开发工具STM32CubeIDE

工欲善其事,必先利其器。STM32Cube生态系统是ST为STM32开发者打造的软件生态,是嵌入式开发的利器。为提升功能丰富且高能效的STM32系列微控制器的易用性,2019年,意法半导体在STM

2026-01-24 17:03

北京市各区普高名单

北京市教委刚刚发布了各区普高名单。其中,1.西城区北师大实验华夏女中在去年停招了一届高中后,今年重新恢复高中招生。2.海淀区的高中数量位于北京市之首,一共68所高中。其次是

2026-01-24 17:02

2022考生必看!2021北京10区优质高中录取分数线、区排名汇总

2021北京中考改革,总分为660分,2021年各校中考录取分数线&区排名对2022/2023考生确定目标校有重要参考意义。@2022、2023考生,下面这些优质高中,哪所是你的目标校呢?留言区大声喊

2026-01-24 17:02

北京城七区全部市重点高中校2022年中考录取率排名与核心解析

娃还在六年级,我已经睡不着——海淀市重点录取率不到6%,比抢茅台还难。2022中考数据刚流出:西城实验13.8%的娃能挤进去,丰台十二中只剩5.48%,石景山京源突然飙到27.32%,九中却跌到

2026-01-24 17:01