打印

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

[复制链接]
6585|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fangui|  楼主 | 2008-6-12 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
香水城| | 2008-6-12 10:50 | 只看该作者

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

使用特权

评论回复
板凳
fangui|  楼主 | 2008-6-12 11:21 | 只看该作者

就是SysTick_SetReload(90000);

使用特权

评论回复
地板
fangui|  楼主 | 2008-6-12 11:32 | 只看该作者

时钟节拍跟什么有关呢?

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

使用特权

评论回复
5
jackbao| | 2008-6-13 09:48 | 只看该作者

SysTick_SetReload(1200000/(LCDY*70));

重载入

使用特权

评论回复
6
香水城| | 2008-6-13 11:08 | 只看该作者

系统时钟定时器的周期与驱动的时钟频率和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。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

87

帖子

0

粉丝