stm32cubeMX使用HAL库点亮LED流水灯,并用Keil仿真运行

  • stm32cubeMX使用HAL库点亮LED流水灯,在Keil下用软件仿真运行上面代码,并用虚拟逻辑分析仪观察
    对应管脚上的输出波形(高低电平转换),看是否是1秒的周期。

一.题目要求

安装 stm32CubeMX用cubemx完成初始化过程,采用HAL库编程实现。 STM32最小系统核心(STM32F103C8T6)分别GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。在Keil下用软件仿真运行上面代码,并用虚拟逻辑分析仪观察 对应管脚上的输出波形(高低电平转换),看是否是1秒的周期。
有关寄存器编程方式见笔者上一篇博客https://blog.csdn.net/weixin_64559251/article/details/127157566

二.STM32CubeMX

1.简介

 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。
 在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具链,比如MDK、IAR For ARM、TrueStudio等 省去了我们配置各种外设的时间,大大的节省了时间。

2.安装STM32CubeMX

进入官网www.st.com/stm32cubemx下载STM32CubeMX
跟着提示一直安装即可,注意安装路径不要携带中文字符。

3.安装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库是主流配置环境。

打开安装好的 STM32CubeMX 软件 点上面的Help -> Manage embedded software packages
会跳出来一个选择型号界面 勾选上你要安装的HAL库, 点Install Now直到安装成功。 如下图:
在这里插入图片描述

在这里插入图片描述
由于笔者之前已经安装过了,大家按照提示安装即可。

4.界面介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
外设配置

① System Core:用于配置GPIO、时钟源、中断系 统以及系统相关的外设
② Analog:用于配置模/数和数/模转换外设
③ Timers:用于配置定时器和实时时钟外设
④ Connectivity:用于配置I2C、SPI和UART等连接 外设
⑤ Multimedia:用于配置I2S等音频数据传输外设
⑥ Computing:用于配置CRC校验外设
⑦Middleware:用于配置RTOS和GUI等中间件

在这里插入图片描述
在这里插入图片描述

时钟源配置

① 外部低速时钟LSE
② 内部低速时钟LSI
③ 内部高速时钟HSI
④ 外部高速时钟LSE
震荡模式:4MHz~26MHz晶振
旁路模式:1MHz~50MHz信号

在这里插入图片描述
在这里插入图片描述

三.项目创建

1.所需工具

本次实验采用硬件为STM32F103C8T6,软件为STM32CubeMX软件、KEIL MDK-arm软件,以STM32F1xxHAL库

2.目标选择

(1)在STMCubeMX主界面,创建新项目,点击ACCEE TO MCU SELECTOR
在这里插入图片描述

(2)在part name里选择自己的芯片(一般选择直接搜索所需芯片),本文采用STM32F103C8T6点击信息栏中的具体芯片信息选中,点击start project
在这里插入图片描述

(3)进入就可以看到自己选择的芯片了,如下图所示
在这里插入图片描述

3.引脚分配

在这里插入图片描述

该界面分为引脚预览系统预览

引脚预览:可以查看引脚配置了什么功能,和各个引脚的位置;任意点击一个引脚即可设置该引脚的各种功能。绿色表示配置成功
系统预览:可以查看配置的各种外设和GPIO的状态。

配置引脚时只需把目标LED对应引脚设置为GPIO_Output即可,按照我上一篇博客的管脚分配,这里我仍然去选择相同管脚,即PA5PB9PC14
在这里插入图片描述

4.外设配置

(1)点击system core 进入SYS,在debug下选择serial wire
在这里插入图片描述
(2)点击RCChse那里设为Crystal/Ceramic Resonator(晶振)

  • 注意:笔者在设置时不知道为何PC14脚产生了冲突,故而更改为PC13引脚

在这里插入图片描述

Disable:内部时钟
BYPASS:旁路时钟
Crystal:晶振/陶瓷振荡器

(3)配置GPIO
点击GPIO
在这里插入图片描述

GPIO output level Low的意思是将该串口初始化为低电平,当然也可以选择High,就是将初始电平拉高,这里按我们电路的接法,所以应该拉低。
GPIO mode Outpull Pushpull的意思是选择输出模式为推挽输出模式,还有其他几种输出模式,在我的上一篇博客中有讲到另外几种输出方式,大家可以了解一下。这里我们是需要点亮LED灯,所以选择推挽输出模式。
GPIO Pull-up/Pull-down No pull-up and no pull-down的意思是设置为输出没有上拉和下拉输出,其实安逻辑来说我们是需要给我们的LED给一个下拉电阻才能点亮的,但是我们在实际的运用中为了简便发现这样也可以点亮,并且因为电流大,所以LED亮度很高。
Maximum output speed Low配置的是输出速度,我们这里配置输出速度为低,目前我们碰到的大多数情况都选择低就可以了。

5.时钟配置

APB2总线的时钟由hse控制。点击Clock Configuration,在这个界面得把PLLCL选上,同时把8MHz改成72,并回车,会出现下列提示框,点击ok
在这里插入图片描述

在这里插入图片描述

6.工程配置

设置完MCU后,可以进行对工程文件的配置了。
在Project处,这里就是工程的各种配置,我们只用到有限几个,其他的默认即可 。

  • 注意 存储目录不可以有中文
    (1)点击Projiect Manager如图所示进行配置
    在这里插入图片描述

(2)点击Code Generator,进行进一步配置。

在这里插入图片描述

(3)点击GENERATE CODE 创建工程,等待一段时间后,成功打开了工程文件,找到main.c,找到main函数
在这里插入图片描述

7.程序编写

  • 注意:所有自己编写的代码请放在/* USER CODE BEGIN XXX / / USER CODE END XXX */之间
    这样我们修改工程的时候你自己写的代码就不会被删除。

将主函数里面的内容更改为下列代码

		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//PA4亮灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);//PC13熄灯
		HAL_Delay(1000);//延时1s
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);//PC13熄灯
		HAL_Delay(1000);//延时1s		
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA4熄灯
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);//PC13亮灯
		HAL_Delay(1000);//延时1s

在这里插入图片描述

四.用keil观察输出波形

1.设置仿真模式

(1)点击魔法棒,选择target,笔者选择晶振为8MHZ。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。
在这里插入图片描述

(2)点击debug,勾选Use simulatorRun to main()并且在Dialog DLL改为是DARMSTM.DLL,另一处改为 TARMSTIM.DLL;Parameter改为-pSTM32F103C8,注意要改两处
在这里插入图片描述

2.逻辑分析仪

(1)设置完毕后,进入调试界面,打开逻辑分析仪
在这里插入图片描述

(2)找到需要观察的IO口

方法一:在左下角命令行输入dir vtreg命令,查看有哪些引脚可以被检测
在这里插入图片描述
方法二:直接在敲,等出来目标端口 ,如:porta.5

在这里插入图片描述

方法三(推荐):直接以 PORTX >> X 的形式输入,内容取决于代码中定义的管脚
在这里插入图片描述

(3)添加需要观察的IO口
新建引脚,务必将Display Type处设置为Bit!

(4)设置好以后,逻辑分析仪左侧会出现刚才设置的IO口,点击全速运行;执行一段时间后,点击停止按钮即可,当波形有问题时,可以点击左侧管脚,再点击Auto尝试。另:点击in或out设置Grid的大小为1s,勾选signal infocursor可以帮助我们设置起始线看到相关信息

在这里插入图片描述

此时我们先不要着急,观察一会儿,这里观察一下我们的延时函数是否准确。将鼠标移动至第一个下降沿处,当鼠标与其重叠时,读取此时时间。
``得到的波形图如下:
在这里插入图片描述
可发现虽然不是完全的一秒钟但还是很接近了。

五.总结

经本次实验可以发现HAL库提供的可视化界面大大提高了编程效率,stm32cubeMX也使得编程更加顺利,初次使用逻辑分析仪让人眼前一亮。但这只是基础,我们还需更为深入地进行探索并多加使用上述技术。


参考

1.https://blog.csdn.net/qq_46467126/article/details/120847240?spm=1001.2014.3001.5502
2.https://blog.csdn.net/weixin_46129506/article/details/120780184

  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值