STM32CubeMX软件工程描述_ USART配置过程

ⅰ、写在前面
学习本文之前可以查看我前面的文章:
stm32cubemx介绍、下载与安装
stm32cubemx使用方法及功能介绍
stm32cubemx新建工程+基本io配置过程
本文接着前面stm32cubemx文章结合usart实例,讲述关于stm32cubemx新建usart工程,以及新建好完成的软件工程。最终通过stm32cubemx工具配置完成实现usart串口通信的软件工程。
本文使用keil(mdk-arm) v5软件为编译环境,如果你没有安装最新版本的软件,请安装keil(mdk-arm) v5版本的软件,具体过程可以参考我的一篇文章:
mdk-arm下载与安装
关于本文的更多详情请往下看。
ⅱ、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文件中添加“延时函数”:
voidtestdelay(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”和“usercode 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库)相比以前标准外设库理解起来相对困难一点。
以上总结仅供参考,若有不对之处,敬请谅解。

数通365案例 | 华为高品质AirEngine Wi-Fi 6以及领先的网络管理系统,助力泰国孔敬大学加速迈向数字时代
基于FPGA和AVR单片机的自动调谐系的设计
什么叫胶体电池_胶体电池如何正确充电
RedmiBook全面屏笔记本四周边框收窄,实现全面屏概念
台系连接器厂兆利建专属研发团队 与客户沟通发展趋势
STM32CubeMX软件工程描述_ USART配置过程
iPhoneSE2渲染图曝光,与iPhone8的差别是什么
增强制造业核心竞争力三年行动计划
用户数据在公开披露五天后SinVR才修补安全漏洞
华为P8max高清拆解图集
奥迪要抢占未来汽车领域风口的决心
CS5202替代RTD2166的方案
家电产品产生电磁干扰的原因
vr眼镜技术的原理
智慧安防加快演进 布局数据中台已成为不可忽视的趋势
5G消息发展进入黄金机遇期
吉利发布飞行汽车,将在2019年美国面世
华为石墨烯电池重大突破,将发布超级快充手机!OPPOvivo仍在找明星代言
华为针对云原生存储服务推出下一代数据存储解决方案OneStorage
奥拓电子叶亮谈LED业务在国内市场的发展之路