最近在跟着ZF学习无人机,到了软件编程部分,首先是产生PWM的代码,芯片使用的是STM32F373CCT6,Keil创建Project就不说了,关于固件库的移植做了一个图表便于记录。
固件库默认的时钟是8MHz,实际使用的16MHz,需要修改固件库。
问题1:到哪里找这个8MHz呢?猜测在和时钟相关的.h文件种。
在stm32f37x.h文件中有宏定义:
/**
* @brief In the following line adjust the value of External High Speed oscillator (HSE) used in your application
*/
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
右键索引到了文件system_stm32f37x.h中的SystemCoreClockUpdate()中,可以看出HSE_VALUE的值由RCC的CFGR 寄存器的SWS决定。
/* Get SYSCLK source -------------------------------------------------------*/
tmp = RCC->CFGR & RCC_CFGR_SWS;
switch (tmp)
{
case 0x04: /* HSE used as system clock */
SystemCoreClock = HSE_VALUE;
break;
}
到《STM32F373XXX_Reference_Manual》中找下RCC_CFGR_SWS,当值SWS[1:0]为01时,即0x04,系统时钟选用HSE,吻合。
问题2:SystemCoreClockUpdate()这个函数什么时候被调用?被谁调用?
首先函数自身有解释,Each time the core clock (HCLK) changes, this function must be called to updat