本文主要介绍如何安装 stm32CubeMX,并使用cubemx完成初始化过程,采用HAL库编程实现LED流水灯。还会涉及到如何在Keil下用软件仿真运行上面代码,并用虚拟逻辑分析仪观察对应管脚上的输出波形。
目录
一、STM32CubeMX简介
STM32CubeMX 是一个图形化的工具,也是配置和初始化C代码生成器(STM32 configuration and initialization C code generation),也就是自动生成开发初期关于芯片相关的一些初始化代码。
它包含了 STM32 所有系列的芯片,包含示例和样本(Examples and demos)、中间组件(Middleware Components)、硬件抽象层HAL(Hardwaree abstraction layer)。
STM32CubeMX的特性如下:
1.直观的选择 STM32 微控制器。
2.微控制器图形化配置:
① 自动处理引脚冲突
② 动态设置确定的时钟树
③ 可以动态确定参数设置的外围和中间件模式和初始化
④ 功耗预测
3.C代码工程生成器覆盖了STM32 微控制器初始化编译软件,如IAR、KEIL、GCC。
4.可独立使用或作为 Eclipse 插件使用。
STM32CubeMX 是ST意法半导体的主动原创工具,它可以减轻开发的时间和费用。其集成了一个全面的软件平台,支持 STM32 每一个系列的MCU 开发。这个平台包括 STM32Cube HAL(一个 STM32 的抽象层集成软件,确保STM32 系列最大的移植性)。再加上兼容的一套中间件(RTOS、USB、TCP/IP 和图形),所有内嵌软件组件附带了全套例程。
注:关于 STM32CubeMX 的更多详细介绍可以进入ST官网
(https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html)查看
二、STM32Cubemx的安装
1.安装jdk
-
由于 STM32CubeMX 是 Java 实现的,需要安装 jdk 环境。
-
jdk官网下载链接:
https://www.oracle.com/java/technologies/javase-downloads.html -
网盘下载:(包括CubeMX和JDK)
链接:https://pan.baidu.com/s/1DCEDhuiQFrfILFeQzr2d5Q?pwd=plt3
提取码:plt3
注意选择windows环境 -
双击 .exe文件进行安装,点击下一步,更改安装路径,点击下一步
-
安装完成,叉掉即可
2.安装STM32CubeMX
-
官网下载(官网下载需要绑定邮箱或者注册)
下载地址:
https://www.st.com/en/development-tools/stm32cubemx.html -
网盘下载:(包括CubeMX和JDK)
链接:https://pan.baidu.com/s/1DCEDhuiQFrfILFeQzr2d5Q?pwd=plt3
提取码:plt3
我在官网没有注册上,建议使用网盘下载
-
右键 .exe 文件,以管理员身份运行
-
点击 Next
-
点击 ‘I accept the terms of…’->Next
-
勾选第一个,点击 Next
-
更改安装路径,点击 Next
-
直接点 NEXT ,其他不用设置,之后开始安装
-
点击 Next,点击 Done,完成安装
三、安装HAL库
1.HAL固件库简介
STM32 HAL 固件库是 Hardware Abstraction Layer 的缩写,中文名称是:硬件抽象层。HAL 库是 ST 公司为 STM32 的 MCU 最新推出的抽象层嵌入式软件,为更方便的实现跨 STM32 产品的最大可移植性。HAL 库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是 HAL 库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。
和 标准库 对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在 STM32系列MCU之间无缝移植,甚至在其他 MCU 也能实现快速移植。
并且从16年开始,ST公司就逐渐停止了对标准固件库的更新,转而倾向于HAL固件库和 Low-layer底层库的更新,停止标准库更新,也就表示了以后使用 STM32CubeMX 配置 HAL/LL库 是主流配置环境;
2.HAL的安装
-
打开安装好的 STM32CubeMX 软件
-
点上面的 Help -> Manage embedded software packages
-
会跳出来一个选择型号界面 勾选上你要安装的HAL库,因为我用到的是 STM32F103C8T6,所以我这里选择 STMF1 Series,点击 Install Now 直到安装成功。 如下图
-
等待下载
-
安装成功后,前面的小框会变成绿色
四、利用STMCubeMX点亮LED灯
1.任务要求
用stm32CubeMX完成初始化过程,采用HAL库编程实现LED流水灯。
在Keil下用软件仿真运行上面代码,并用虚拟逻辑分析仪观察 对应管脚上的输出波形(高低电平转换),看是否是1秒的周期。
2.环境要求
硬件环境:STM32F103C8T6;
软件环境:STM32CubeMX软件、KEIL MDK-arm软件,以及STM32F1xxHAL库
3.STMCubeMX使用方法
- 使用步骤
- 启动界面
- 目标选择
- 配置主界面
- 引脚分配
- 选择引脚功能
- 外设配置
① System Core:用于配置GPIO、时钟源、中断系
统以及系统相关的外设
② Analog:用于配置模/数和数/模转换外设
③ Timers:用于配置定时器和实时时钟外设
④ Connectivity:用于配置I2C、SPI和UART等连接
外设
⑤ Multimedia:用于配置I2S等音频数据传输外设
⑥ Computing:用于配置CRC校验外设
⑦ Middleware:用于配置RTOS和GUI等中间件
- 配置时钟模式
时钟配置步骤:
① 修改时钟源频率
② 选择锁相环输入时钟
③ 选择系统时钟源
④ 设置HCLK时钟频率
- 配置GPIO
- 工程配置
4.目标选择
- 在主界面选择 File–>New Project 或者直接点击 ACCEE TO MCU SELECTOR
- 进行芯片型号选择,一般直接在左上角 Part Number 搜索自己的芯片型号即可,这里选择 STMF103C8
- 先点击一次搜索出的芯片,然后点击 Start Project
- 点进去就可以看到自己选择的芯片了
5.引脚分配
这里分为 引脚预览 和 系统预览
淡黄色这种颜色表示不可配置引脚,电源专用引脚以黄色突出显示,其配置不能更改。
深黄色这种颜色表示配置了一个I/O口的功能,但是没有初始化对应外设功能,引脚处于no mode状态。
绿色表示配置成功。
引脚预览 可以查看引脚配置了什么功能,和各个引脚的位置;任意点击一个引脚即可设置该引脚的各种功能。
系统预览 是查看配置的各种外设和GPIO的状态。
- 把LED对应的引脚 PA5、PB9、PC14 设置为 GPIO_Output
6.外设配置
- 点击 System Core,进入配置系统调试接口 SYS,在 Debug 下选择 Serial Wire
7.时钟配置
-
默认时钟是使用内部RC振荡器,需要配置RCC使用外部时钟源
-
点击 RCC,有两个时钟,一个是 HSE 和 LSE,将HSE设为Crystal/Ceramic Resonator(晶振)
-
点击 Clock Configuration ,将 HCLK 设置成 72MHz
-
点击 OK
8.工程配置
-
点击 Project Manage,这里就是工程的各种配置,我们只用到有限几个,其他的默认即可 。
存储目录不可以有中文
-
点击 Code Generator,进行进一步配置。
-
点击 GENERATE CODE 创建工程,点击 Open Project 打开工程文件
9.程序编写
- 打开 main.c 文件,找到主函数,在 main.c 文件的 main 函数下的 while 循环中,添加下面的几行代码
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//PA5亮灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC14熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA5熄灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC14熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA5熄灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//PC14亮灯
HAL_Delay(1000);//延时1s
- 提醒:所有自己编写的代码请放在/* USER CODE BEGIN XXX / / USER CODE END XXX */之间;这样我们修改工程的时候你自己写的代码就不会被删除。
10.编译烧录
(1) 在keil中进行编译
-
先通过 ST-Link 将 C8T6 连接到电脑上,接线方法见 嵌入式系统开发07——STM32F103C8T6下C语言寄存器方式实现LED流水灯
-
点击魔法棒,选择 Debug,勾选 Use:ST-Link Debugger,点击 Setting
-
连接成功可以看到以下内容,点击确定
-
在 Output 下勾选 Create HEX File ,点击OK
-
接下来进行编译,这里我直接点击 Build,发现编译失败,并且提示下列信息
这里是因为 Compiler Version 5 编译器在 Keil 5.37 以后就不再默>认安装,从这个版本开始,Keil 默认安装的是 Compiler Version 6.18
-
解决办法:点击魔法棒,在 Target 选择Use default compiler version 6
-
再点击 Build,发现编译成功
(2)烧录
将 BOOT 都设置为 0
-
点击 Download ,进行烧录
-
这里会提示下面的信息,直接点确定就行了
-
烧录成功
-
按下 C8T6 上的 RESET键,连接对应管脚的LED就被点亮了
-
实现效果
HAL库实现流水灯
五、仿真调试
1.设置仿真模式
- 点击 魔法棒,在 Debug 设置里下面两项内容进行更改:
Dialog DLL默认是DARMSTM.DLL
Parameter默认是-pSTM32F103VC
2.使用逻辑分析仪
-
模式设置完成后,开启调试模式,打开逻辑分析仪
-
逻辑分析仪界面如下
-
给逻辑分析仪中添加要观察的IO口:
方法一:在左下角命令行输入
dir vtreg
命令,查看有哪些引脚可以被检测
方法二:直接键入PORTA.5、PORTB.9、PORTC.14目标端口
方法三:直接以 PORTX >> X 的形式输入,内容取决于代码中定义的管脚;如:PORTA>>5 (推荐)
-
将新添加引脚的 Display Type处设置为 Bit
-
设置好之后,逻辑分析仪左侧会出现刚才添加的三个IO口,点击 (RUN)运行
-
执行一段时间后,点击停止按钮即可
-
将光标移动到波形处,按住Ctrl,滑动鼠标滚轮,将 Grid 设置为1s,观察波形
-
发现波形的周期非常接近 1s
六、总结
通过本次学习,我初步掌握了用cubemx完成初始化的过程,也实现了利用HAL库编程实现LED流水灯,还掌握了在Keil下用虚拟逻辑分析仪的使用方法。HAL库提供的可视化界面大大提高了编程效率,
参考列表:
1.stm32cubeMX使用HAL库点亮LED流水灯
2.搭建STM32开发环境——STM32CubeMX,Keil5
3.stm32CubeMX+Keil使用HAL库点灯,并使用逻辑分析仪观察周期
4.Keil5遇到:*** Target ‘xxx‘ uses ARM-Compiler ‘Default Compiler Version ‘ which is not available.