一、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; //引脚9
GPIO_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);
//延时1000ms
HAL_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输出,控制灯的亮度
源码例子: