请教:LED应该为什么不是“灭1s,亮1s”,而是“灭0.5s,亮0.5s”?
背景:
(1)芯片:STM32F103C8T6;外部晶振8M;
(2)代码如下:
#define Led1_Toggle GPIO_WriteBit(GPIOB,
GPIO_Pin_14, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_14)))
ffice ffice" />
int main(void)
{
#ifdef DEBUG
debug();
#endif
/* System Clocks
Configuration */
RCC_Configuration();
/* NVIC
Configuration */
NVIC_Configuration();
/* GPIO
Configuration */
GPIO_Configuration();
/* Time base
configuration */
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler
= 35999;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* TIM IT enable */
TIM_ITConfig(TIM2,
TIM_IT_Update, ENABLE);
/* TIM2 enable
counter */
TIM_Cmd(TIM2,
ENABLE);
while (1);
}
void RCC_Configuration(void)
{
/* RCC system
reset(for debug purpose) */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is
ready */
HSEStartUpStatus =
RCC_WaitForHSEStartUp();
if (HSEStartUpStatus
== SUCCESS)
{
/* Enable Prefetch
Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait
state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK
*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz *
9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* 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)
{}
}
/* TIM2 clock enable
*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* GPIOC clock
enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,
ENABLE);
}
void TIM2_IRQHandler(void)
{
if
(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2,
TIM_IT_Update);
Led1_Toggle;
}
}
(3)问题描述:我计算的Led1应该是“灭1s,亮1s”循环,为什么下载到板子上的现象是“灭0.5s,亮0.5s”循环?
我的计算方法:APB1的频率是72MHz/2=36M
((1+prescaler)/36MHz)*(1+period)=1s
为什么不是0.5s?哪里有错?谢谢!
|