STM32CubeMX + HAL库学习「附工程源码」

STM32CubeMX + HAL
- 一些说明
【STM32CubeMX + HAL库学习「附工程源码」】-- 底层配置
-- Cube基本使用
-- HAL库函数
-- 中断回调函数
-- 外设对应时钟
- 配置示例
-- 小编有话说
-- RTC
-- SDIO + FATFS
-- SDRAM
-- LTDC + DMA2D
-- 待补充...
STM32CubeMX + HAL一些说明底层配置使用STM32CubeMX代码生成工具 , 不用关注底层配置的细节 , 真舒服 。
使用教程:
密码:bgvi虽然Cube+HAL很舒服 , 但新手不建议用 。 最好还是先去学一下标准库怎么用 , 有个大致概念后 , 再来学这一套 。
Cube基本使用

  1. 新建工程
  2. 选择芯片
  3. Pinout --tt-darkmode-color: #809CB9;"> , 选择RCC(HSE:Crystal/Ceramic Resonator)、SYS(Debug:Serial Wiire)
  4. Clock Configuration , 配置时钟树

STM32CubeMX + HAL库学习「附工程源码」文章插图
  1. Project Manager , 配置工程输出项

STM32CubeMX + HAL库学习「附工程源码」文章插图
  1. Pinout --tt-darkmode-color: #809CB9;"> , 选择功能(若是选GPIO相关 , 可以直接在Pinout view选择;若是其他功能 , 可以在左边Categories打开 , 会自动配置引脚)、设置Parameter Settings/NVIC等

STM32CubeMX + HAL库学习「附工程源码」文章插图
  1. GENERATE CODE , 生成工程 , 用KEIL打开编辑
HAL库函数
  • 函数形式:均以HAL_开头
  • 寻找过程:在驱动文件stm32f4xx_hal_XXX.c或其.h文件中找函数定义 , 一般在靠后位置
  • 其他说明:HAL库并没有把所有的操作都封装成凼数 。 对于底层的寄存器操作(如读取捕获/比较寄存器) , 还有修改外设的某个配置参数(如改变输入捕获的极性) , HAL库会使用宏定义来实现 。 而且会用__HAL_作为这类宏定义的前缀 。 获取某个参数 , 宏定义中一般会有_GET;而设置某个参数的 , 宏定义中就会有_SET 。 在开发过程中 , 如果遇到寄存器级别或者更小范围的操作时 , 可以到该外设的头文件中查找 , 一般都能找到相应的宏定义 。 HAL库函数第一个参数一般都是句柄(一个包含了当前对象绝大部分状态的结构体) , 虽然增加了开销 , 但是用起来便捷了非常多 。
中断回调函数
  • 函数形式:HAL_XXX_XXXCallback() 。
  • 寻找过程:中断文件stm32f4xx_it.c - > 中断函数XXX_IRQHandler(void) -> HAL库中断函数HAL_XXX_IRQHandler(GPIO_PIN_13) -> 回调函数HAL_XXX_XXXCallback()
外设对应时钟
  1. 随便进入一个外设初始化函数 , 如MX_GPIO_Init()
  2. 随便进入一个时钟使能函数 , 如__HAL_RCC_GPIOC_CLK_ENABLE()
  3. 随便进入一个RCC宏定义 , 如RCC_AHB1ENR_GPIOCEN
  4. 或者直接进入stm32f429xx.h文件
  5. 里面有所有外设与时钟对应关系 , 如RCC_AHB1ENR_DMA1EN
配置示例小编有话说
  • 例子源码: 密码:bf5q
  • 如果配置过程中 , 参数不知道怎么设置 , 可以去标准库例程(如野火、正点原子)中看对应的参数是什么
  • Cube软件只是帮你配置了底层 , 一些初始化代码还是需要自己手动加的 , 如SDRAM充电初始化、读写函数等
RTC
STM32CubeMX + HAL库学习「附工程源码」文章插图
STM32CubeMX + HAL库学习「附工程源码」文章插图


推荐阅读