STM32CubeMX基于HAL库的流水灯实验
STM32CubeMX基于HAL库的流水灯实验
CubeMX是基于Java实现的,需要JDK环境
JDK下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
STM32CubeMX下载地址:https://www.st.com/en/development-tools/stm32cubemx.html
安装过程一路Next就能搞定,这里不再赘述。
文章目录
- STM32CubeMX基于HAL库的流水灯实验
- 一、创建项目
- 二、实现效果
- 1. 代码
- 2. 仿真示波器
- 3. 实物效果
- 三、 总结
- 四、参考文章:
一、创建项目
- 进入Cube,点击
ACCESS TO MCU SELECTOR进入创建项目页面

- 这里我使用的是STM32F103C8t6,就在搜索框里搜索STM32F103C8,出现结果后双击进入配置页面

如果你常用这个开发板的话可以点击小星星⭐收藏它,这样会方便很多
- 选择引脚:根据上一篇文章,本次实验采用
A4、B5、C14三个引脚- 点击对应引脚,选择GPIO_output

- 配置调试接口:
- 左侧栏中点击
A-Z->SYS->Debug这里选择Serial Wire
- 左侧栏中点击

- 配置GPIO(此步骤在最新的Cube中可以省略,因为默认配置本是如此)
- 左侧栏中点击
A-Z->GPIO->System View->GPIO √->依次查看三个接口是否处于以下状态:
- 左侧栏中点击

GPIO output level:有low和high两种选择,一般选择low
GPIO mode:推挽输出和开漏输出两者模式,两者模式的区别在于
推挽输出中1代表VCC,0表示GND;
开漏输出中1代表高阻态,0代表GND。
GPIO Pull-up/Pull-down:输入需要上下拉,输出一般没有上下拉
Maxinum output speed:最大的输出速度,一般选择low就可以了。
- 配置项目
- 上侧栏中选择
Peoject Manager - 配置项目名称->
Application Stucture选择Basic->IDE选择MDK-ARMVersionV5以上->Framware Package…中选择STM32Cube FW_f1 v1.8.4
- 上侧栏中选择

- 点击GENERATE CODE生成项目
- 弹窗后选择Open project会直接在Keil中打开

打开后如下图所示
图八

二、实现效果
本次实验采用三个灯轮流发光->熄灭循环实现,每一次间隔1s,大致意思如下:(1亮,0灭)
1 0 0 ->0 1 0 ->0 0 1 ->1 0 0->.....
1. 代码
- 如图所示进入
main.c,找到while(1)循环,输入以下代码
//高电平点亮A4HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//延时一秒HAL_Delay(1000);//低电平熄灭A4HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//高电平点亮B5HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);//延时一秒HAL_Delay(1000);//低电平熄灭B5HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);//高电平点亮C14HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//延时一秒HAL_Delay(1000);//低电平熄灭C14HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);

//HAL库函数注释:
延时函数 HAL_Delay:
- 函数原型: void HAL_Delay (__IO uint32_t Delay)
- 参数说明:Delay表示所要延时的时间大小,单位是毫秒
- 实例:HAL_Delay(1000):延时一秒再进行下一步操作
1秒(s)= 100分秒(ds)= 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 纳秒(ns) = 1,000,000,000,000 皮秒(ps)
写管脚函数 HAL_GPIO_WritePin:
-
函数原型:void HAL_GPIO_WritePin (
GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin,GPIO_PinState PinState) -
参数说明:
- GPIOx:管脚组(x的取值为A~G)
- GPIO_Pin:管脚编号(x的取值为0~15)
- PinState:管脚的状态(取值为GPIO_BIT_RESET表示0, GPIO_BIT_SET表示1)
-
实例:
-
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
管脚组A,4号引脚,亮起
-
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);
管脚组C,14号引脚,熄灭
-
图九
2. 仿真示波器
.在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形。
- 魔法棒设置(很容易忘记的一步骤,因为Keil老是重置它。。。)

这里我看其他很多博客里都把右边的DLL和Parameter也填了,其实没必要:很明显左边对应的Use Simulator仿真器,而右边的对应Use ST-link之类的,不使用右边的调试方式就没必要改写了
-
配置完成后build->debug
-
点击图中这一按钮
System Analyzer Windows,选择Logic

-
点击setup设置三个引脚信息
- 点击添加按钮
- 输入引脚信息:GPIOx_IDR.n(x为端口,n为引脚号,GPIOA_IDR.4表示PA4)
- Display Type一栏中选择bit
- Closer

- 点击
Run,观察波形

如果发现没有波儿,可能是因为Grid的值太小了,导致波形图太大,当前小窗展示不全,所以可以使用滚轮滑动调试grid的值,这里推荐0.5s和0.2s
3. 实物效果

三、 总结
当我们通过寄存器来实现流水灯时,我们需要通过手敲代码来设置寄存器到达上述效果,会用到使能时钟、配置输入输出模式等一系列相对繁杂的操作,而当我们使用STM32CubeMX时,通过简单的可视化操作,就能生成对应的代码,无论是寄存器还是时钟或者输入输出模式都已经帮你用代码编写好(更别提翻手册查引脚信息了),而且更加全面、完整,对于初学者来说明显更加友好。
四、参考文章:
HarrietLH:搭建STM32开发环境——STM32CubeMX,Keil5
醉意丶千层梦:基于HAL库实现流水灯
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
