STM32的每个时钟节拍是不是都等于(HCLK/8)?可以改么?

zhaoxianglun   2008-6-12 10:47 楼主
                                  

回复评论 (5)

请说明所谓“时钟节拍”是指什么?

                                  
点赞  2008-6-12 10:50

就是SysTick_SetReload(90000);

                                  
点赞  2008-6-12 11:21

时钟节拍跟什么有关呢?

如果我按下面的配置
 /*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,这个时钟节拍跟什么有关呢?
点赞  2008-6-12 11:32

SysTick_SetReload(1200000/(LCDY*70));

                                 重载入
点赞  2008-6-13 09:48

系统时钟定时器的周期与驱动的时钟频率和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。
点赞  2008-6-13 11:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复