本文目的是主要介绍通过STM32F103C8T6在Cubemx开发环境下,使用HAL库编程实现LED流水灯及Keil环境下的仿真运行过程。
前言
※ HAL库的优势是便于在不同型号的STM32芯片之间移植,劣势是代码效率低。标准外设库可以很简单直接跟踪到底层寄存器,而HAL库里面的代码想要跟踪并理解底层很难。 ※ 总之,HAL库就相当于C语言里面的调用函数,其过程非常简便。
(一)需求分析
假设你手中已有 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED,并搭建了电路,分别GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。 1)安装 stm32CubeMX,用cubemx完成初始化过程,采用HAL库编程实现。 2)在Keil下用软件仿真运行上面代码,并用虚拟逻辑分析仪观察 对应管脚上的输出波形(高低电平转换),看是否是1秒的周期。 ※ 使用寄存器的方式制作流水灯请参考博主上一个博客:
(二)实验环境搭建—STM32CubeMX
1.STM32CubeMX简介
● STM32CubeMX 是被广泛使用的。它集成了芯片选型、引脚分配和功能配置,中间件配置,时钟配置,初始代码和项目的功能。其中 STM32CubeMX 和 STM32Cubeprogrammer ,除了对所有STM32芯片系列,和所有应用的通用支持之外,还有一些对特定应用的支持,比如STM32Cube.AI就是基于STM32CubeMX的插件功能,来把训练好的模型部署到STM32上;还比如在安全固件升级和安全固件安装,即SBSFU和SFI操作里, STM32CubeProgrammer 就启动了代码加密,HSM实例化等功能。STM32支持丰富的开源和ST自主知识产权中间件,比如来自开源社区的FreeRTOS,FatFS,mbedTLS;ST自己的USB主机和设备协议栈,TouchGFX等。
关于STM32CubeMX介绍及安装参考博主:https://blog.csdn.net/qq_44629109/article/details/126299438
2.下载STM32CubeMX
● 在官网上下载: https://www.st.com/en/development-tools/stm32cubemx.html ● 再单独建立一个文件夹,以便放置STM32CubeMX, 注意文件路径不要带有中文 。
3.安装STM32CubeMX
● STM32CubeMX安装过程如下: ● 点击Next 。 ● 勾选I accept ,再点击Next 。 ● 勾选第一个即可,第二个选项是是否同意ST公司收集你的个人使用信息等。 ● 点YES 这句话是安装本软件可能会与文件夹之前文件冲突,导致文件夹之前文件丢失是否继续,点继续即可。 ● 直接点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库是主流配置环。 ● HAL库 ,有在线安装 、离线安装 两种方式。意见使用在线安装,简单省事。
2.安装HAL库—在线安装
● 打开安装好的 STM32CubeMX 软件 点上面的Help -> Manage embedded software packages (如果第一打开有提示界面,选最后一个 NO thanks 就可以了)。 ● 找到STM32F1,点击三角箭头: ● 购买最新的固件包: ● 点击“Install Now” 进行在线安装, 如下图: 到此,恭喜STM32 CubeMx安装成功了。
(四)小试牛刀—CubeMx配置完成点亮流水灯
1.新建工程
※ 可以参考博客: https://blog.csdn.net/as480133937/article/details/98947162 具体操作流程:
● 等待参数下载。 ● 找到自己所用的芯片型号,并进行建立。
● 如果你是设计产品想要选择一款芯片 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核,型号,等等,帮助你找到适合的芯片。
A.搜索芯片型号 B.选择芯片 C.创建工程
2.环境配置
● 点击system core,进入SYS,在debug下选择serial wire:
2.1 时钟配置
● 配置时钟,进入上面的rcc,有两个时钟,一个是hse和lse,我们要用是GPIO接口,而这些接口都在APB2里: 配置好后,发现芯片部分引脚高亮。 ● 在“时钟树”下进行配置,将HCLK数值改为“2”,这样就设定了最大2MHz的HCKL的数值。
2.2 引脚配置
● 首先,找到PA5,PB9,PC14,右键,选择“GPIO_Output”。 ● 再配置GPIO:将三个引脚的输出默认改为High,即高电平,输出模式默认no pull up and no pull down。
2.3 工程配置
● 设置完MCU后,可以进行对工程文件的配置了。 ● 在Project处,这里就是工程的各种配置,我们只用到有限几个,其他的默认即可 。 注意:存储目录不可以有中文 ● 点击Code Generator,进行进一步配置: ● 点击GENERATE CODE 创建工程: ● 点击YES。
3.代码编写
● 在main.c文件的main函数下的while循环中,添加下面几行代码即可:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);
HAL_Delay(1000);
● 编译运行,发现并无报错。
(五)硬件电路实现
1.烧录
● 编译发现没有报错,进行烧录实现。 ● 这里采用S-TLINK进行烧录,较为方便,检查是否连接成功。
2.实现效果
最总我们实现了非常好的效果,功夫不负有心人!!!!!
(六)虚拟逻辑分析仪仿真观察
1.前置设备
● 首先打开魔法棒,进行修改参数。 ● 修改一下相应参数。 ● 记得打开Keil自带的仿真模拟器。
2.进入DEBUG观察
● 点击Setup 进行修改相应参数。
● 点击运行 ● 实现如下 ● 再观察B9、C14引脚的信号。
(七)总结
本文介绍了如何在嵌入式系统的STM32Cubemx开发环境下,HAL库编程实现LED流水灯及Keil环境下的仿真运行过程,通过逻辑分析仪观察,生活本无苦难,自我释怀便是苦难的最好良药。 寄语:有那么一瞬间 ???不听建议不做选择 ???也不做排比句 ???清澈明亮,自由自在!
(八)参考文献
https://blog.csdn.net/qq_44629109/article/details/126299438 https://blog.csdn.net/qq_46467126/article/details/120847240 https://blog.csdn.net/qq_44629109/article/details/126299438
|