stm32h7的小总结(2)

1. HAL库函数的学习

        HAL 库为各种外设基本都配了三套 API,查询,中断和 DMA。

        (1)HAL库的配置文件
  
         HAL 库有一个专门的配置文件叫 stm32h7xx_hal_conf.h,这个文件里面有一个很重要的参数,就是 HSE_VALUE,大家所设计板子使用的实际晶振大小一定要与这个数值一致。比如 V7 的外置晶振是 25MHz。 
        接着就是断言函数的配置(是否运用和关闭):其作用主要检测函数在调用的时候参数的正确是否。 /* #define USE_FULL_ASSERT 1 */
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
128. void assert_failed(uint8_t* file, uint32_t line);如果不正确则进入失败函数,一直死循环
关键字 __LINE__ 表示源代码行号。
关键字__FILE__表示源代码文件名。
用户可以选择是否使能 ST 固件库的断言供能。使能断言的方法有两种:
(1) 在 C 编译器的预定义宏选项中定义 USE_FULL_ASSERT。
(2) 在本文件取消"#define USE_FULL_ASSERT 1"行的注释
        (2)HAL库的时间基准
HAL 库专门搞了一个时间基准,默认来源是滴答定时器,也可以通过 重定向使用其他定时器实现。相关函数全部集中在 stm32h7xx_hal.c 文件里面实现,
        (3)HAL库的启动流程
配置 MPU 和使能 Cache,对于 H7 而已,这两个函数要优先执行,因为 Flash 速度, SRAM 速度跟 CPU 和 TCM 有些差距的,所以要使能 Cache。而不同存储区的 Cache 策略要通过 MPU 分别进行配置。
然后在调用函数 HAL_Init 时,系统依然使用的 64MHz HSI 时钟,这点要特别注意。此函数会调
用函数 HAL_InitTick,初始化滴答时钟中断 1ms,并设置 NVIV 优先级分组为 4。它会开启滴答定时器中断
接着用SystemClock_Config过此函数切换 HSI 到外部高速时钟 HSE,并配置系统时钟400MHz。调用这个函数会更新全局变量 SystemCoreClock,并重新配置 HAL_InitTick
                         前面几步执行完毕后就可以初始化外设了。
        (4)HAL库的初始化外设
 各种外设函数串口。systick.spi.iic(init和mspinit函数)
        (5)HAL库的中断处理
 用户可以直接在函数HAL_UART_IRQHandler 的前面或者后面添加新代码,也可以直接在HAL_UART_IRQHandler 调用的各种回调函数里面执行,
        (6)HAL库的DMA处理
针对外设的 DMA 函数基本都有开启中断,如果用户使能此外设的 NVIC,使用 中务必别忘了写 DMA 的中断服务程序,
2.RCC时钟的配置
        有六种时钟的配置:
        HSI:HSI 是内部的高速 RC 振荡器,频率 64MHz,可被用于系统时钟。优势是低成本,无需外部时钟,快速启动(仅需几个微秒),缺点是精度差,即使经过校准。
        HSE:HSE 是外部的高速振荡器,通过外接时钟源,有源或者无源晶振驱动,时钟范围 4-48MHz。优势是精度高,缺点是增加成本。
        LSE:LSE 是外部的低速振荡器,通过外接时钟源,有源或者无源晶振驱动,一般接 32.768KHz,主要用于RTC 实时时钟。
        LSI:LSI 是内部的低速 RC 振荡器,频率约是 32KHz,主要用于独立看门狗和自动唤醒,也可以用于 RTC实时时钟.
         CSI 是内部的低速振荡器,频率约是 4MHz,相比 64MHz 的 HSI,主要用于低功耗。
         HSI48 是内部高速振荡器,频率约是 48MHz,用于给特定的外设提供时钟,比如 USB
在 main 函数的外设驱动初始化函数里面完成时钟初始化,主要是 PLL 锁相环,让芯片最终
工作到 400MHz。
        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值