STM32CubeMX软件工程描述_USART配置过程
推荐
分享一个朋友的人工智能教程,零基础!通俗易懂!希望你也加入到人工智能的队伍中来!
http://www.captainbed.net/strongerhuang
Ⅰ、写在前面
学习本文之前可以查看我前面的文章:
本文接着前面STM32CubeMX文章结合USART实例,讲述关于STM32CubeMX新建USART工程,以及新建好完成的软件工程。最终通过STM32CubeMX工具配置完成实现USART串口通信的软件工程。
本文使用Keil(MDK-ARM) V5软件为编译环境,如果你没有安装最新版本的软件,请安装Keil(MDK-ARM) V5版本的软件,具体过程可以参考我的一篇文章:
关于本文的更多详情请往下看。
Ⅱ、STM32CubeMX新建USART工程
在上一篇文章简单讲述了基于IO新建一个工程的步骤,本文基于USART简单讲述一下STM32CubeMX新建UART串口发送工程。
(我们还是以STM32F103E为例来讲述,如果你的板子是STM32其他型号芯片,在选择芯片时对应即可)
1.新建工程基本步骤
STM32CubeMX新建工程前面的基本步骤大致如下几步(具体请看我上一篇文章):
1.打开STM32CubeMX软件,点击“新建工程”
2.选择MCU 或 选择(ST官方)开发板
3.工程配置
2.Pinout配置
这里我们配置IO(定义PF11引脚为LED)、RCC(使用HSE)、USART(串口)。
A.配置PF11引脚为输出模式
第一步:放大芯片图标,找到PF11(可以通过Find查找)
第二步:配置为输出选中PF11 -> 左键 -> 弹出列表 -> 选中“GPIO_Output”
B.配置RCC
PCC配置有三项,我们这里只配置HSE高速外部时钟,其他两项LSE外部低速时钟、MCO时钟输出默认配置。
选择HSE高速外部时钟为“Crystal”,对应的引脚自动改变,如下图:
C.配置USART(串口)
USART的配置有好几种,本文就以最基础,也是最常见的一种”UART异步串行通信”配置来讲述。
选择USART1模式为“asynchronous”对应的引脚自动转换为USART。
3.Clock配置
对于系统时钟应该都知道它的作用,就是驱动整个芯片工作的心脏,如果没有了它,就等于人没有了心跳。时钟的快慢也就决定了程序的快慢。
STM32的时钟树功能比较强大,分频、倍频可以根据你的需求配置出多种时钟。STM32CubeMX这个工具在这一块也是做的比较人性化的,可以直观的看见具体配置,而且有错误提示(注意:不同型号芯片的时钟树可能不同,但大同小异),我们配置为HSE,如下图:
4.“综合”配置
这里的配置相当于初始化一些配置,集齐了前面的引脚对应的初始化配置,所以叫“综合配置”。
由于我们主要配置了IO 和 USART, 所以在这个选项里面,重点关心的就是这两项。
A.IO(PF11)配置
B.USART配置
5.最后生成代码、编译下载
这些步骤不是今天的重点,详细过程可以参看上一篇文章。
生成的原始代码“STM32CubeMX_USART配置(原始版)”可到我360云盘下载:
https://yunpan.cn/cMPy7AbArtxQ8 访问密码 e92f
6.添加代码
在main.c文件中添加“延时函数”:
void TestDelay(uint32_t cnt)
{
while(cnt--);
}
在主函数中添加下图代码:
添加以上代码就能实现:间隔(约0.5S)LED亮灭变化一次,且串口打印数据。
STM32CubeMX_USART配置(修改版),提供给大家下载地址(360云盘):
https://yunpan.cn/cMPKPHVbJtNCB 访问密码 415b
Ⅲ、软件工程说明
接下来讲述一下使用STM32CubeMX新建的软件工程(MDK-ARM版本)。
1.目录结构
在MDK-ARM工程中,可以看到四个目录,分别是:
HAL库:这个库类似于标准外设库(在Drivers目录下)
启动文件startup_stm32f103xe.s:这个文件也和标准外设库里面文件startup_stm32f10x_hd.s类似。
User用户应用:这个目录下是用户添加源代码文件的目录,如果要添加新文件可以在这里添加。
CMSIS微控制器软件接口标准:这个目录也是属于底层的代码(和我之前使用标准外设库建立的软件工程类似,也是位于Drivers目录下)。
2.添加用户代码区域
打开使用STM32CubeMX新建的软件工程可以看见很多地方有成对的注释代码“USER CODE BEGIN”和“USER CODE END”,这两个注释之间就是用户添加自己代码的区域。如main.c文件下就有多处用户编程区域:
3.初始化配置代码描述
当我们使用STM32CubeMX新建软件工程后,打开软件可以看见里面有很多代码就是通过STM32CubeMX工具自动生成的(是STM32CubeMX的特性),下面大概讲述一下本文生成的代码。
A.四个主初始化代码:
HAL_Init(); HAL库底层初始化
SystemClock_Config(); 时钟配置
MX_GPIO_Init(); IO初始化(用户需求)
MX_USART1_UART_Init(); USART初始化(用户需求)
这四个主初始化配置代码中,前面两个基本上是使用STM32CubeMX工具生成都有的代码,后面两个才是用户根据自己需求配置的代码。
B. HAL_Init();
这个属于软件工程的标配,主要对初始化(默认)FLASH和NVIC等。
这个函数会使程序不能访问FLASH,也就是为什么我们程序在运行的时候不能下载代码的原因,解决的办法:1.不调用该函数; 2.使MCU处于复位状态下载代码。
C. SystemClock_Config();
当你使用以前标准外设库开发过STM32,知道时钟初始化代码,那么这个函数应该很熟悉。其实这里的配置就是上面说的RCC配置(时钟树),参数就是时钟树对应的值。看时钟树就很容易理解。
位于main.c文件。
D. MX_GPIO_Init();
这个函数是我们配置的IO函数(对PF11引脚初始化,很简单),位于main.c文件。
和以前使用标准外设库开发类似,其中的参数就是上面“综合配置” 里设置的。
E. MX_USART1_UART_Init();
这个函数是我们配置的USART,位于main.c文件。
和以前使用标准外设库开发类似,其中的参数就是上面“综合配置” 里设置的,波特率、数据位数、停止位等。
Ⅳ、说明
以上简单讲述了使用STM32CubeMX生成的软件工程,后续会定期更新使用STM32CubeMX新建各种外设资源工程的文章,敬请等待。
如果是STM32初学者的话,不建议立刻使用这个工具来开发,建议先学习标准外设库开发,因为这个工具生产的代码(HAL库)相比以前标准外设库理解起来相对困难一点。
以上总结仅供参考,若有不对之处,敬请谅解。
Ⅴ、最后
更多精彩文章我将第一时间在微信公众号里面分享,对本文有什么疑问可微信留言。
本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。
STM32CubeMX软件工程描述_USART配置过程的更多相关文章
- STM32CubeMX新建工程+基本IO配置过程
Ⅰ.写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍.下载与安装 STM32CubeMX使用方法及功能介绍 本文接着上一篇文章结合基本IO配置实例,讲述关于STM32CubeM ...
- JProfiler8 远程监控tomcat配置过程
1. 阅读人群 1.熟悉liunx服务器,起码知道liunx常见的命令 2.熟悉tomcat容器,起码知道怎么tomcat的启动以及停止 3.熟悉java编程语言,JProfiler8是专门监控jav ...
- ELK配置过程初次安装使用心得--elasticsearch5.4版--及logstash
安装所遇到的问题:http://www.bubuko.com/infodetail-1889252.html 一,先创建用户和组groupadd es useradd -g es es passwd ...
- MySQL主从复制原理及配置过程
一.Mysql数据库的主从复制原理过程: (多实例的安装请参考我的另一篇文章:https://www.cnblogs.com/Template/p/9258500.html) Mysql的主从复制是一 ...
- Linux LVM逻辑卷配置过程详解
许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以 ...
- elasticsearch5.0.0 安装插件及配置过程
elasticsearch5.0.0 安装插件及配置过程 由于es5.0是里程碑式的更新,所以很多变化的地方,暂时我就插件安装遇到的问题记录一下. 插件安装命令 2.3版本的安装命令 安装Marvel ...
- synergy 两台Windows电脑配置过程
Synergy 介绍 软件作用 Synergy 两台独立电脑,共享一套鼠标和键盘的工具, 软件原理(我自己想的) 保证两台电脑在一个局域网内,可以相互Ping通的电脑(这样才能直接通过TCP连接) 将 ...
- 图解MySQL5.5详细安装与配置过程
MySQL是一个开源的关系型数据库管理系统,原由瑞典MySQL AB公司开发,目前属于Oracle公司旗下.MySQL是目前世界上开源数据库中最受欢迎的产品之一,是应用最为广泛的开源数据库.MySQL ...
- tesseract配置过程
tesseract配置过程: 1. 为了避免配置环境变量,可以先下载一个 tesseract-ocr-setup-3.02.02.exe(tesseract配置文件夹里有),然后安装(假设安装目录为D ...
随机推荐
- Python——管理属性(1)
管理属性 这里将展开介绍前面提到的[属性拦截]技术.包含下面内容: [1]__getattr__和__setattr__方法.把没有定义的属性获取和全部的属性赋值指向通用的处理器方法 [2]__get ...
- 最短路径算法(Dijkstra)
1.建立矩阵,记录任意两点间的直接距离: 2.两个集合,一个集合记录到每个点的最短路径,一个记录前驱节点: 3.主循环,每次找当前点与其他点的距离,记录下最短距离和前驱节点,然后看看通过前驱节点和最短 ...
- HDU 1251 统计难题 (Trie)
pid=1251">统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/ ...
- C#应用视频教程2.2 OPENGL虚拟仿真介绍
三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素. 其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了 这里我们尤其注意,我把绘制之前的三 ...
- thinkphp session如何取数组
thinkphp session如何取数组 session('user_auth.username'); 搞定!
- sql中同一个Trigger里同时包含Insert,Update,Delete
sql中同一个Trigger里同时包含Insert,Update,Delete SQLServer是靠Inserted表和Deleted表来处理的,判断一下就可以了,只不过比ORACLE麻烦一点 cr ...
- excel 根据单元格内容自动调整列宽
excel 根据单元格内容自动调整列宽 CreateTime--2018年5月28日08:49:40 Author:Marydon 1.情景展示 单元格宽度超过了列宽 2.解决方案 第一步:同时选 ...
- LDAP编辑器 LDAPAdmin
LDAPAdmin 是一个在 Windows 用来编辑 LDAP 账户信息的管理工具,采用 Delphi 开发.
- Java 的抽象特性:抽象类与接口深度解析
要点: 抽象类 接口 抽象类与接口的差别 一. 抽象 对于面向对象编程来说,抽象是它的四大特征之中的一个. 在Java中,能够通过两种形式来体现OOP的抽象:接口和抽象类. 接口和抽象类为我们提供了一 ...
- STS(Spring Tool Suite)使用maven添加jar包
打开:http://mvnrepository.com/ 搜索:hibernate 或者:http://search.maven.org 搜索:hibernate-core 两种方式都可以添加jar包 ...