就是SysTick_SetReload(90000);
时钟节拍跟什么有关呢?
如果我按下面的配置
/*setupclock function*/
void SetupClock(void)
{
RCC_DeInit (); /* RCC system reset(for debug purpose)*/
RCC_HSEConfig (RCC_HSE_ON); /* Enable HSE */
/* Wait till HSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
RCC_HCLKConfig (RCC_SYSCLK_Div1); /* HCLK = SYSCLK */
RCC_PCLK2Config (RCC_HCLK_Div1); /* PCLK2 = HCLK */
RCC_PCLK1Config (RCC_HCLK_Div2); /* PCLK1 = HCLK/2 */
RCC_ADCCLKConfig (RCC_PCLK2_Div4); /* ADCCLK = PCLK2/4 */
*(vu32 *)0x40022000 = 0x01; /* Flash 2 wait state */
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd (ENABLE); /* Enable PLL */
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* Select PLL as system clock source */
RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08);
/* Enable USART1 and GPIOA clock */
SysTick_SetReload(90000);
SysTick_ITConfig(ENABLE); /* Enable SysTick interrupt */
}
这时的时钟节拍是1/9M,如果我按下面配置
void SetupClock(void)
{
// RCC_ClocksTypeDef RCC_ClockFreq;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
/* RCC system reset(for debug purpose) */
RCC_DeInit (); /* RCC system reset(for debug purpose)*/
// RCC_HSICmd(ENABLE);
/* Wait till HSE is ready */
RCC_HSEConfig(RCC_HSE_OFF);
RCC_HSICmd(ENABLE);
RCC_HCLKConfig (RCC_SYSCLK_Div2); /* HCLK = SYSCLK */
RCC_PCLK2Config (RCC_HCLK_Div1); /* PCLK2 = HCLK */
RCC_PCLK1Config (RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */
RCC_ADCCLKConfig (RCC_PCLK2_Div8); /* ADCCLK = PCLK2/4 */
*(vu32 *)0x40022000 = 0x01; /* Flash 2 wait state */
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig (RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
RCC_PLLCmd (ENABLE); /* Enable PLL */
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* Select PLL as system clock source */
RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08);
/* Enable USART1 and GPIOA clock */
/* SysTick event each 10 ms with input clock equal to 9MHz (HCLK/8) */
//SysTick_SetReload(90000);
//RCC_MCOConfig(RCC_MCO_NoClock);
RCC_LSEConfig(RCC_LSE_OFF);
/* Disable APB1 Peripheral Clock */
//RCC->APB1ENR = 0x00000000;
SysTick_SetReload(1200000/(LCDY*70));
SysTick_ITConfig(ENABLE); /* Enable SysTick interrupt */
}
这时的节拍是1/3M,这个时钟节拍跟什么有关呢?
SysTick_SetReload(1200000/(LCDY*70));
重载入
系统时钟定时器的周期与驱动的时钟频率和Reload值相关
首先,我们称Systick为“系统时钟定时器”。
系统时钟定时器的周期与驱动的时钟频率和Reload值相关。
驱动系统时钟定时器的时钟源有两个:HCLK或(HCLK/8),通过调用SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK)或SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8)选择。
Reload值表示对时钟源脉冲计数多少次为一个系统时钟周期,如当选择时钟源为(HCLK/8)时,如果HCLK=72MHz,则Reload值为9000时系统时钟周期为1ms。通过调用SysTick_SetReload()设置Reload值。
再举个例子:选择时钟源为(HCLK/8),如果HCLK=36MHz,Reload值为9000时系统时钟周期为2ms,Reload值为4500时系统时钟周期为1ms,Reload值为90000时系统时钟周期为20ms。