IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> HAL库_源码阅读 -> 正文阅读

[嵌入式]HAL库_源码阅读

库版本:STM32Cube_FW_F4_V1.25.0

1> 函数入口

1

1.1> 启动文件 startup_stm32f407xx.s

》配置异常向量表;

1.1

1.2> 复位函数 Reset_Handler()

》复位函数,调用子函数 【Systeminit】,再调用【__main】 ;
__main -> main

;;----------------------------- Reset handler ------------------------------------;;
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

1.3> 初始化函数 Systeminit()

void SystemInit(void)
{

/* FPU settings 配置浮点运算单元---------------*/
/* External memory 配置外部SDRAM---------------*/
/* Configure the Vector Table location add offset address 配置异常向量表地址-------------*/

}

会改变吗:,在CubeMx工具配置过程中?

2> HAL库_模块配置

文件:stm32f4xx_hal_conf.h

> 重点 : HAL_GPIO_MODULE_ENABLED
> 
#ifndef __STM32F4xx_HAL_CONF_H
#define __STM32F4xx_HAL_CONF_H


/* 开启模块 */

#define HAL_GPIO_MODULE_ENABLED

/* 未开启的模块 */
/* #define HAL_ADC_MODULE_ENABLED   */
/* #define HAL_CRYP_MODULE_ENABLED   */

// 开启那个模块,实际就是把那个模块头文件包含
#ifdef HAL_GPIO_MODULE_ENABLED
  #include "stm32f4xx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */

#endif /* __STM32F4xx_HAL_CONF_H */

开启的模块,进行判断

文件:stm32f4xx_hal_gpio.C

#include "stm32f4xx_hal.h"
// 
#ifdef HAL_GPIO_MODULE_ENABLED

/* Driver Code Begin*/
/* Driver Code End */

#endif /* HAL_GPIO_MODULE_ENABLED */



3> __weak作用

/**
  * @brief  EXTI line detection callbacks.
  * @param  GPIO_Pin Specifies the pins connected EXTI line
  * @retval None
  */
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}

弱定义函数,
用户在用户层重新定义HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)后,会被覆盖;
为用户提供一个模板;

参考手册:
在这里插入图片描述



4> 中断处理

以EXTI中断为例

/**--- 启动File:【startup_stm32f407xx.s】 ----**/

 DCD     EXTI0_IRQHandler                  ; EXTI Line0   

/**--- 用户中断处理File:【stm32f4xx_it.c】 ----**/
void EXTI0_IRQHandler(void)
{
  
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
  
}
/**--- 外设驱动File:stm32f4_hal_gpio.c ----**/

// 中断处理函数
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);   // 清中断
    HAL_GPIO_EXTI_Callback(GPIO_Pin); 
  }
}

// 中断回调函数
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}

总结: HAL库已为用户提供了整套流程,
只需要在用户层定义void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
不需要在清中断。



5> 容易忽略的宏

4

/**--- HAL总 文件:【stm32f4xx.h】 ----**/

#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)
/** @brief  FSMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000
  */
#define __HAL_SYSCFG_REMAPMEMORY_FSMC()       do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\
                                                  SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\
                                                 }while(0);
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */
  • STM32F407xx 在软件中定义;
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:44:59  更:2022-03-15 22:46:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:30:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码