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()
外设对应时钟
- 随便进入一个外设初始化函数,如
MX_GPIO_Init()
- 随便进入一个时钟使能函数,如
__HAL_RCC_GPIOC_CLK_ENABLE()
- 随便进入一个RCC宏定义,如
RCC_AHB1ENR_GPIOCEN
- 或者直接进入
stm32f429xx.h
文件 - 里面有所有外设与时钟对应关系,如
RCC_AHB1ENR_DMA1EN
配置示例
RTC
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);
}
下一篇: ARM汇编笔记
推荐阅读
-
基于HAL库用STM32CubeMx生成FATFs+sd+flash
-
live555库学习----基于多播方式的mjpeg流的传输实现
-
HAL库学习——中断嵌套及中断优先级
-
STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式
-
(HAL库学习3)STM32CubeMX HAL库 ADC与DAC使用
-
(HAL库学习5) STM32CubeMX HAL库 外部中断使用
-
(HAL库学习7)STM32CubeMX HAL库 PWM输出
-
【STM32】STM32CUBEMX系列教程:HAL库方式的微秒延时函数
-
STM32CUBEMX HAL库 趟坑记
-
HAL库----STM32CubeMX 软件使用方法