欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32CubeMX + HAL库学习方式

程序员文章站 2022-03-13 17:24:24
...

一些说明

底层配置

使用STM32CubeMX代码生成工具,不用关注底层配置的细节,真舒服。

使用教程:

https://sxf1024.lanzoui.com/b09rf2dwj 密码:bgvi

虽然Cube+HAL很舒服,但新手不建议用。最好还是先去学一下标准库怎么用,有个大致概念后,再来学这一套。

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

配置示例

RTC

STM32CubeMX + HAL库学习方式
STM32CubeMX + HAL库学习方式
STM32CubeMX + HAL库学习方式
STM32CubeMX + HAL库学习方式

RTC_DateTypeDef sDate;
RTC_TimeTypeDef sTime;	
uint8_t second_tmp = 0;


HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); // 读取时间
HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); // 读取日期
if(second_tmp != sTime.Seconds) { // 读取秒
    second_tmp = sTime.Seconds;
    printf("20%d%d-%d%d-%d%d\r\n", 
           sDate.Year/10%10, sDate.Year%10, 
           sDate.Month/10%10, sDate.Month%10, 
           sDate.Date/10%10, sDate.Date%10);
    printf("%d%d:%d%d:%d%d\r\n", 
           sTime.Hours/10%10, sTime.Hours%10, 
           sTime.Minutes/10%10, sTime.Minutes%10, 
           sTime.Seconds/10%10, sTime.Seconds%10);
}