stm32h7 hal 库的学习

本文深入探讨了STM32H7 HAL库的关键配置,包括HSE_VALUE的设置、TICK_INT_PRIORITY的重要性以及断言函数的实现。文章还详细讲解了系统时钟初始化、HAL_MspInit和HAL_MspDeInit的实现细节,引脚配置注意事项,以及系统核心时钟更新机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stm32h7xx_hal_conf.h 中需要注意的几个地方:

  1. HSE_VALUE 这个外接晶振的频率

  2. TICK_INT_PRIORITY 这个 tick 的中断优先级,因为 HAL_DELAY 这个函数是基于这个 tick 的中断的,所以如果有其他高优先级的中断中调用了 HAL_DELAY 函数,会造成 tick 的中断一直进不来。这样的话 HAL_DELAY 也会一直卡住,这个高优先级的中断也会一直卡在这里。

  3. 断言的参考实现函数。
/* 
********************************************************************************************************* 
*  函 数 名: assert_failed 
*  形    参:file : 源代码文件名称。关键字__FILE__表示源代码文件名。 
*        line :代码行号。关键字 __LINE__ 表示源代码行号 
*  返 回 值: 无 
********************************************************************************************************* 
*/ 
void assert_failed(uint8_t* file, uint32_t line) 
{  
  /*  
    用户可以添加自己的代码报告源代码文件名和代码行号,比如将错误文件和行号打印到串口 
    printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ 
  */ 
   
  /* 这是一个死循环,断言失败时程序会在此处死机,以便于用户查错 */ 
  while (1) 
  { 
  } 
} 
  1. HAL 库不像之前的标准库,在系统启动函数 SystemInit 里面做了 RCC 初始化,HAL 库是没有做的,所以进入到 main 函数后,系统还在用内部高速时钟 HSI,对于 H7 来说,HSI 主频是 64MHz。

  2. HAL_MspInit 和 HAL_MspDeInit 在 stm32h7xx_hal_msp.c 里面做具体实现。

  3. PA0_C 这类的引脚只有在 TFBGA240+25 ballout 这种封装上面才有。

  4. LSE Bypass 和 LSE On 之间的切换,必须要先关闭 LSE 才行。同样 HSE Bypass 和 HSE On 之间的切换,也必须先关闭 HSE 才行。

  5. HAL_RCC_OscConfig 会更新全局变量 SystemCoreClock 的主频值,并且会再次调用函数 HAL_InitTick 更新系统滴答时钟。

posted on 2019-06-25 17:34 ramlife 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ramlife/p/11084114.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值