STM 32 —— Hello World 2(HAL 库方式实现流水灯)#
STM 32 —— Hello World 2(HAL 库方式实现流水灯)
下载安装 STM32CubeMX
STM32CubeMX 官网:STM32CubeMX
安装过程很简单,这里不详细说明
安装HAL库
安装 HAL 库,HAL 库由两种安装方式:在线、离线安装
在线安装,直接点击 Help ,选择里面的 Manage embedded software package ,然后在窗口中,选择我们需要的型号的 MCU Package 的最新版本即可:
点击安装可能会报错,下载失败,可能是由于网络问题,只要多试几次即可
在线安装只需要在官方网站上下载指定版本的 MCU 包即可,官方网站:STM32CubeMX
下载好之后是一个压缩包,不用解压出来,直接点击从本地导入,然后选择下载的压缩包即可:
在 Help 中选择 Updater Setting ,可以修改 HAL 库的安装目录
在我的测试中,直接在线安装最稳定
STM32CubeMX 创建项目
创建项目过程如下:
第一次创建项目需要下载并安装一些东西,需要耐性等待:
创建项目时,我们直接搜索我们需要的芯片型号即可:
然后双击右边对应的芯片,项目创建完成,界面如下:
早期版本分为三个部分,这里分别介绍每一个部分:
左边是 MCU 的外设资源选择,可以按照资源分类和首字母顺序进行选择
中间是外设配置,这里可以选择外设的各种功能,选择串口模式(异步、同步、半双工)串口接收终端,和串口 DMA 传输等。
右边是预览界面,这里分为引脚预览和系统预览,引脚预览可以查看引脚配置了什么功能,和各个引脚的位置,任意点击一个引脚即可设置该引脚的各种功能
浅黄色表示不可配置引脚,电源专用引脚以黄色突出显示,其配置不能更改:
深黄色这种颜色表示你配置了一个I/O口的功能,但是没有初始化对应外设功能,引脚处于 no mode 状态:
绿色表示配置成功:
系统预览是查看配置的各种外设和GPIO的状态:
右侧第三个对勾图标,表示没有问题,右侧第二个图标则表示警告,对应配置出现问题,点击该选项即可在外设配置界面进行查看
代码设计
配置引脚
我们按照要求选择管脚 PA5、PB9、PC14 ,只需把目标 LED 对应引脚设置为 GPIO_Output 即可
示例如下图:
配置时钟
时钟配置界面如下:
这里配置时钟实际上就是配置 32 的时钟树框图,默认时钟是使用内部 RC 振荡器,我们需要使用 RCC 配置外部时钟
当我们在外部设备中选择了 RCC ,并且选择了晶振时,系统会自动配置好时钟对应的输入输出引脚:
选择好之后,需要将时钟配置为 72 MHz ,如果有弹出窗口直接点击 ok 即可:
保存工程
接下来,我们需要保存我们创建的工程文件,注意事项已经在图中标出,其他项选择默认即可:
然后点击 Code Generator 进行下一步配置:
最后直接点击 GENERATE CODE 创建工程文件即可,成功创建文件之后,会有弹窗如图:
这里我们直接选择 open project ,即可直接打开项目
代码设计
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET); // 设置 PA-5 引脚链接的灯泡为亮
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); // 设置 PB-9 引脚链接的灯泡熄灭
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET); // 设置 PC-14 引脚链接的灯泡熄灭
HAL_Delay(1000); // 设置延时,单位是毫秒(ms)
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);
注意:所有自己编写的代码请放在 /* USER CODE BEGIN XXX /
和 / USER CODE END XXX */
之间,这样我们修改工程的时候你自己写的代码就不会被删除
烧录测试
直接按照前面我们在使用寄存器编写流水灯程序时的编译烧录方法进行烧录测试即可
测试结果如下:
HAL 库方式与寄存器方式对比
相比之下,我们可以发现,使用 HAL 库,仅需呀我们写出引脚控制代码即可,并不需要我们去手写一些延时函数之类,GPIO初始化等这样的内容
HAL 库提供的可视化界面大大提高了编程效率,无需再利用代码去配置管脚了,效果很好,受益匪浅,以后会多加利用