20-HAL库
一、STM32CUBEMX
1、HAL库
HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。HAL库是基于一个非限制性的BSD许可协议(Berkeley Software Distribution)而发布的开源代码。 ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在ST公司的MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。 可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。
标准库
STM32F0 STM32F1 STM32F3 STM32F2 STM32F4 STM32L1系统芯片有标准库支持
STM32F7 STM32H7 STM32L0 STM32L4系统芯片无标准库支持
HAL库
STM32所系列芯片都有HAL库支持
ST提供库函数:标准库、LL库、HAL
2、软件安装步骤
1、安装并破解keil软件
2、双击安装HAL库:
Keil.STM32F4xx_DFP.2.14.0.pack:
https://download.csdn.net/download/m0_63622771/90861310
STM32全部系列最新HAL库下载地址
链接:百度网盘 请输入提取码
提取码:upoq
3、安装STM32CUBEMX,请参考博客:STM32CubeMX安装(全图文安装步骤,一步不落下)_stm32cubemx安装教程-CSDN博客
3、开发步骤
1、从芯片建立工程
下面是以点亮LED灯为例:
2、设置时钟
选择外部晶振时钟源
3、引脚设置
4、代码生成设置
注意:工程的路径不允许是中文路径
5、生成代码
//LED灯初始化
void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable *///GPIOF组初始化__HAL_RCC_GPIOF_CLK_ENABLE();//GPIOH组初始化__HAL_RCC_GPIOH_CLK_ENABLE();/*Configure GPIO pin Output Level *///配置PF9输出高电平 亮灭HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_SET);/*Configure GPIO pin : PF9 */GPIO_InitStruct.Pin = GPIO_PIN_9; //引脚9GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //输出推挽GPIO_InitStruct.Pull = GPIO_PULLUP; //上拉GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; //中速HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);}
主函数
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals *///GPIOF9初始化MX_GPIO_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///1S变更灯状态HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9); //延时1000msHAL_Delay(1000);}/* USER CODE END 3 */
}
//程序写在BEGIN 与 END之前的注释,下一次更新工程会保留代码。
6、外部中断
以按键KEY0为例(下降沿触发)
(1)选择NVIC分组
(2)配置引脚为中断输入
(3)在中断服务函数中实现相关功能(stm32f4xx_it.c)
HAL工程中断服务函数在stm32f4xx_it.c当中
void EXTI0_IRQHandler(void)
{/* USER CODE BEGIN EXTI0_IRQn 0 *//* USER CODE END EXTI0_IRQn 0 */HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);/* USER CODE BEGIN EXTI0_IRQn 1 *///写入中断处理事件/* USER CODE END EXTI0_IRQn 1 */
}
7、HAL库配置PWM输出,控制灯的亮度
源码例子:
https://download.csdn.net/download/m0_63622771/90861329