HAL+M4学习记录_2

一、Boot配置

内存地址是固定的,代码从0x0000 0000开始,而数据从0x2000 0000开始,F4支持三种不同的boot模式

复位芯片时,在SYSCLK的第4个上升沿BOOT引脚值被锁存,STM32F407通过此时BOOT[1:0]引脚值选择Boot模式

BOOT1BOOT0modedescription
x0Main Flash从flash区域boot
01System memory从系统存储区boot
11Embedded SRAM从内置SRAM区域boot

二、必备API

2.1 初始化流程

  • 系统上电复位。进入启动文件startup_stm32f407xx.s,在这个文件中执行复位中断服务程序
    • 在复位中断程序中执行函数SystemInit,此函数在system_stm32f4xx.c文件中
    • 调用_main,最终进入main函数
  • 进入main函数即可开始应用程序编程,需要进行初始化
    • HAL库初始化函数HAL_Init,此函数在stm32f4xx_hal.c文件中
    • 系统时钟初始化,在stm32f4xx_hal_rcc.c文件中

2.2 源文件分析

  • startup_stm32f407xx.s文件
    此文件由汇编语言编写,主要完成以下操作:设置堆栈指针、设置PC指针、设置中断向量表、配置系统时钟、配置外部SRAM/SDRAM用于程序变量等数据存储、跳转到main()函数。
  • system_stm32f4xx.c文件
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

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

在进入main()函数之前,进入了SystemInit函数,此函数在system_stm32f4xx.c文件中,该文件提供了两个函数和一个全局变量,分别是SystemInit()SystemCoreClockUpdate()SystemCoreClock variable其作用分别为,SystemInit()用于设置微控制器系统,初始化FPU、向量表和外部内存配置;SystemCoreClockUpdate()用于更新SystemCoreClock variable

  • stm32f4xx_hal.c文件
    HAL库驱动文件,函数HAL_Init会初始化HAL库,设置NVIC优先级分组为4,滴答定时器每1ms中断一次,默认使用HSI时钟,必须在main()函数中优先调用此函数;函数HAL_IncTick()实现一个简单的计数功能,全局变量uwTick每毫秒加1;函数HAL_Delay()用于阻塞式延迟,单位为ms。
  • stm32f4xx_hal_rcc.c文件
    主要实现内部和外部时钟以及总线时钟的配置,函数HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)用于初始化RCC振荡器;函数HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)用于初始化总线时钟,此函数会更新全局变量SystemCoreClock的主频值,并且会再次调用函数HAL_InitTick更新系统滴答时钟;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值