STM32 HAL库编程(1)——使用STM32CUBEMX新建工程
本篇文章将讲解如何使用STM32CUBEMX新建一个工程,并点亮LED灯。 需要的软硬件有: STM32开发板;jlink或stlink下载器;KEIL5;STM32CUBEMX。前言
- ST公司推荐使用HAL库编程,最新的STM32F7、H7系列仅有HAL库,无官方出的库函数版本。
- HAL库的意义在于,通过在硬件层和应用层之间添加一层,称为HAL层,让STM32不同系列的芯片变得更加统一。在以前,STM32F1系列和F4系列,寄存器不统一、库函数也有一些区别,导致开发了F1的芯片,想转移到其他芯片的时候就很麻烦,因此使用了同一个HAL库编程。步进如此,还可以使用STM32CUBEMX程序初始化时钟和外设,方便了开发。
- 同样地,HAL库也有一些缺点,因为增加了一层,导致指令更多,从而运行速度有所降低。在一些对时速严格要求地地方,可以使用寄存器进行编程。
- 本篇文章将讲解如何使用STM32CUBEMX新建一个工程,并点亮LED灯。需要的软硬件有:
STM32开发板;jlink或stlink下载器;KEIL5;STM32CUBEMX。
一、使用CUBEMX新建工程
1.选择芯片
2.选择烧录(debug)方式
3.设置时钟
4.配置外设:设置LED引脚
5. 最后工作
二、代码讲解
三、LED闪烁代码
1. 引脚操作的几个函数
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, 0); // 写引脚为低电平
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, 1); // 写引脚为高电平
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 反转该引脚
uint8_t res = HAL_GPIO_ReadPin(LED_GPIO_Port, LED_Pin); // 读取该引脚是高电平还是低电平
HAL_Delay(1000); // 延时函数,单位ms
- 引脚的操作无非就是写引脚,和读引脚。对于STM32中,引脚分为PORT和PIN。PORT是指GPIOA、GPIOB等;PIN为引脚号,为0-15中的某一个。
- LED_GPIO_Port和LED_Pin其实就是表示GPIOC-13,因为我们设置了LED的标签,所以可以用这个
2. LED闪烁的代码
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 反转该引脚
HAL_Delay(1000); // 延时函数,单位ms
四. 代码烧录
1. 配置下载器为jlink
2. 编译和烧录
成功后会有LED闪烁。
3. KEIL优化——代码自动提示
五. 福利——定时器中断
1. 选择定时器配置时钟,设置预分频和计数值。这里设置后,计数完成后是1s
2. 打开更新中断,并配置中断号
3. 代码介绍
4. 写一个LED闪烁的代码
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
注意把前面main函数的LED闪烁代码注释掉!
5. 在mian中添加定时器中断开始函数
HAL_TIM_Base_Start_IT(&htim1); // 启动定时器中断
// HAL_TIM_Base_Stop_IT(&htim1); // 关闭定时器中断
6. 总结
只要配置好的定时器TIM,就全部配置好了,只需要在合适的位置写代码,就可以以一定周期运行该部分的代码。
但注意在mian函数中要打开中断,对于其他中断也一样。加上一行函数就可以