目录
1 使用CubeMX生成相关代码
1.1 安装STM32CubeMX
- 官网下载
https://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemx
需要绑定邮箱或者注册,比较麻烦 - 网盘下载地址(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库,有在线安装
、离线安装
两种方式。
本文仅介绍在线安装方法
- 打开安装好的 STM32CubeMX 软件 点上面的Help -> Manage embedded software packages
- 勾选所要安装的HAL库,点击Install Now
1.3 新建项目
- 点击左上角File->New Project
之后选择芯片
选择完毕后,点击信息栏中的具体芯片信息选中,点击start project
- 点击system core,进入SYS,在debug下选择serial wire
- 配置时钟
进入上面的rcc,点击Clock Configuration,按下图勾选,同时把8MHz改成72
- 将HSE按下图设置
- 配置引脚功能
点击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观察波形
- 配置debug
老样子,勾选Use Simulator
,使用软件仿真;设置下面的“Dialog DLL”项为“DARMSTM.DLL”;parameter项为“-pSTM32F103C8”,用于设置支持STM32F103C8
的软硬件仿真。
- 开始仿真
进入调试界面,打开逻辑分析仪
找到需要观察的IO口,在左下角命令行输入dir vtreg
,查看哪些引脚可以被检测
- 观测波形
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