使用STM32CubeMX+ HAL库点亮流水灯

1 使用CubeMX生成相关代码

1.1 安装STM32CubeMX

  1. 官网下载
    https://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemx
    需要绑定邮箱或者注册,比较麻烦
  2. 网盘下载地址(6.4.0)
    https://pan.baidu.com/s/15MZnIpdp_XYLH7zLn4YQgA?pwd=ed58
    提取码:ed58

1.2 安装HAL库

什么是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库,有在线安装离线安装两种方式。

本文仅介绍在线安装方法


  1. 打开安装好的 STM32CubeMX 软件 点上面的Help -> Manage embedded software packages
    在这里插入图片描述
  2. 勾选所要安装的HAL库,点击Install Now
    在这里插入图片描述
    在这里插入图片描述

1.3 新建项目

  1. 点击左上角File->New Project

在这里插入图片描述

之后选择芯片
在这里插入图片描述
选择完毕后,点击信息栏中的具体芯片信息选中,点击start project

  1. 点击system core,进入SYS,在debug下选择serial wire
    在这里插入图片描述
  2. 配置时钟
    进入上面的rcc,点击Clock Configuration,按下图勾选,同时把8MHz改成72

在这里插入图片描述

  1. 将HSE按下图设置
    在这里插入图片描述
  2. 配置引脚功能
    点击GPIO,点击相应的引脚设置输出寄存器,我使用的是PA5,PB9,PC14引脚
    在这里插入图片描述

配置好后如图所示

在这里插入图片描述

此时,不知为何rcc处有警告,PC14引脚有冲突,改为pc13,警告消失

1.4 生成相关代码

点击project manager,配置好自己的路径和项目名,然后IDE那项改为MDK-ARM

在这里插入图片描述
按下图勾选,然后点击generate code
在这里插入图片描述
完成后,点击open project,直接进入keil中

2 keil仿真调试

2.1 打开main.c文件,找到主函数

在这里插入图片描述

2.2 替换代码生成.hex

替换主函数中的语句,这里我们使用之前配置好的HAL库语句

由于使用HAL库进行开发,它提供了一些相关函数进行使用。(此处只说明使用的函数)
①延时函数(HAL_Delay)
函数原型: void HAL_Delay (__IO uint32_t Delay)
参数说明:Delay表示所要延时的时间大小,单位是毫秒
②写管脚函数(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)

替换语句如下:

SystemClock_Config();
  MX_GPIO_Init();
  while (1)
  {		
		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
	}

完成后,进行编译,构建,生成hex文件
具体方法见之前文章
https://blog.csdn.net/apple_52030329/article/details/127146518

烧录后,结果如下
在这里插入图片描述

2.3 keil观察波形

  1. 配置debug
    老样子,勾选Use Simulator,使用软件仿真;设置下面的“Dialog DLL”项为“DARMSTM.DLL”;parameter项为“-pSTM32F103C8”,用于设置支持STM32F103C8的软硬件仿真。

在这里插入图片描述

  1. 开始仿真
    进入调试界面,打开逻辑分析仪
    在这里插入图片描述

找到需要观察的IO口,在左下角命令行输入dir vtreg,查看哪些引脚可以被检测

在这里插入图片描述

  1. 观测波形
    PB5首先是低电平,维持1s后,变为高电平,再维持1s后下一个引脚才发生改变
    在这里插入图片描述
    在这里插入图片描述
    将光标置于第一周期时刻,显示时间为0.112003s,与实际时间不同,通过查阅资料,发现这是因为晶振设置不相同的原因,所以要将晶振从原先的72MHz设置为8MHz,如下图所示

在这里插入图片描述

调整之后,发现时间则变为大约1s

在这里插入图片描述

总结

与之前直接使用c相比,STM32CubeMX以及HAL库都很方便,通过使用HAL库的可视化界面大大提高了效率

参考
https://zhuanlan.zhihu.com/p/192345025
https://blog.csdn.net/qq_43279579/article/details/112233696
https://blog.csdn.net/weixin_46129506/article/details/120780184

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日常脱发的小迈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值