STM32F4学习

       在学习F4,遇到的问题写出来加深印象,有理解错误的发现后再改。

       HAL库的程序实现流程:

         必须首先调用HAL_Init()函数——该函数对缓存、flash、指令和数据进行了配置,然后是调用SystemClock_Config();对系统的时钟进行配置,时钟源的选择,PLL的分频倍频,SYSTick时钟的配置、中断分组的配置这里将中断分组设置为了组4如果不满足需要可以在这里修改分组,后边就是自己实现的自己硬件部分相关的代码了。

      SystemClock_Config(); 函数需要注意:这里将systick的中断优先级设置为了中断分组4中的最低,在其他的中断中不要调用HAL_DELAY()函数进行延时,这样程序将会死在这里。如果想用HAL_DELAY()函数可以在时钟配置函数中修改SYSTick中断的优先级。

       在时钟配置函数如果修改了中断分组,建议同时将systick的中断设置为合适的值。

       如果自己通过查询systick时钟的方式实现了延时,也不能将HAL_Init()函数关于systick函数配置屏蔽掉,因为在HAL 库的其他地方调用了HAL_Delay()函数。

       如果没有特别说明,则默认使用HAL库。

       

一、时钟

       用固件库试过F407,时钟配置需要根据自己板子上的晶振修改时钟配置文件中的时钟频率需要修改外部时钟的宏定义,

       STM32F429用的是HAL库需要在时钟配置初始化的时候根据自己板子上的晶振修改SystemClock_Config()函数的分频和倍频大小,具体的可以参考正点原子的教程。修改完后我开始玩流水灯,但是我发现调用HAL_DELAY()函数做延时的时候,时间不对,后来想了想可能还需要修改外部晶振的宏定义,因为模板上默认的外部晶振是8MHz,后来翻宏定义的头文件,在stm32f4xx_hal_conf.h头文件中找到了外部晶振的宏定义:

#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */

      将这里的外部晶振的宏定义修改成自己板子上的大小就可以了。

      F429还允许根据芯片的供电电压来优化系统的时钟频率,所以配置时钟之前需要先根据供电电压配置系统的最大频率,然后是PLL锁相环分频和倍频的设置,最后是内核时钟(FCLK)、总线(AHB)时钟(HCLK)、外设时钟的配置(PCLK)。总线时钟小于等于内核时钟。

      MSPInit函数中一般实现GPIO的配置、时钟、中断的配置。


二、定时器

        做了通用定时器的实验,一般的定时实验都基本一样,和STD库不同的就是中断部分的处理,我们需要重新实现中断的回调函数 HAL_TIM_PeriodElapsedCallback(htim);  

         需要注意的是中断发生后中断函数中调用函数void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)函数会根据产生的中断标志判断不同的中断类型,然后清除中断标志,最后才是调用回调函数,所以不要在回调函数中判断发生中断的类型,因为已经被清除了,如果在回调函数中判断将得不到正确的结果。

         或者自己实现中断部分,不去调用HAL库的函数。

三、DAC

        DAC的配置比较简单,需要注意的是触发方式的选择,如果选择的DAC_TRIGGER_SOFTWARE 软件的触发方式,则配置完成调用HAL_DAC_Start()开启DAC后还需要设置寄存器DAC_SWTRIGER 开始真正的输出,输出开始后该寄存器就会被硬件自动清零,所以每次改变输出值后都需要 设置DAC_SWTRIGER寄存器开始新的输出。

        如果设置的触发方式是DAC_TRIGGER_NONE ,则每次设置输出值后N个时钟周期,输出会自动生效。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值