用时间定时器3怎么进不到中断 初学者求大神帮忙
时间:10-02
整理:3721RD
点击:
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;//等待时钟稳定
RCC_DeInit(); //RCC 系统复位
RCC_HSEConfig(RCC_HSE_ON); //开启HSE
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE准备好
if(HSEStartUpStatus == SUCCESS)
{
FLASH_SetLatency(FLASH_Latency_2); //Set 2 Latency cycles
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_7); //PLLCLK = 8MHz * 7 = 56 MHz
RCC_PLLCmd(ENABLE); //Enable PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLL is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock source
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB clock = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //APB2 clock = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //APB1 clock = HCLK/2
while(RCC_GetSYSCLKSource() != 0x08); //Wait till PLL is used as system clock source
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC最大时间不能超过14M
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE ); //使能ADC1通道时钟,各个管脚时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);// Enable USART1 clocks
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);// Enable USART1 clocks
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // Enable TIM clocks
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE); // Enable TIM clocks
}
}
void NVIC_Configuration(void)
{
/* Enable the USART1 Interrupt */
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; //使能TIM3总中断 比较输出 具有最高的优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
void TIM_Configuration(void)
{
/**************************************
定时器3,1ms基本时间单位,系统时间
***************************************/
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
TIM_BaseInitStructure.TIM_Period = 999; //设置自动重装载值
TIM_BaseInitStructure.TIM_Prescaler = 55; //暂不分频,下面再分频
TIM_BaseInitStructure.TIM_ClockDivision = 0; //时钟分割,无视之
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
void main(void)
{
while(1)
}
{
ErrorStatus HSEStartUpStatus;//等待时钟稳定
RCC_DeInit(); //RCC 系统复位
RCC_HSEConfig(RCC_HSE_ON); //开启HSE
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE准备好
if(HSEStartUpStatus == SUCCESS)
{
FLASH_SetLatency(FLASH_Latency_2); //Set 2 Latency cycles
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_7); //PLLCLK = 8MHz * 7 = 56 MHz
RCC_PLLCmd(ENABLE); //Enable PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLL is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock source
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB clock = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //APB2 clock = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //APB1 clock = HCLK/2
while(RCC_GetSYSCLKSource() != 0x08); //Wait till PLL is used as system clock source
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC最大时间不能超过14M
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE ); //使能ADC1通道时钟,各个管脚时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);// Enable USART1 clocks
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);// Enable USART1 clocks
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // Enable TIM clocks
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE); // Enable TIM clocks
}
}
void NVIC_Configuration(void)
{
/* Enable the USART1 Interrupt */
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; //使能TIM3总中断 比较输出 具有最高的优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
void TIM_Configuration(void)
{
/**************************************
定时器3,1ms基本时间单位,系统时间
***************************************/
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
TIM_BaseInitStructure.TIM_Period = 999; //设置自动重装载值
TIM_BaseInitStructure.TIM_Prescaler = 55; //暂不分频,下面再分频
TIM_BaseInitStructure.TIM_ClockDivision = 0; //时钟分割,无视之
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
TIM_ITConfig(TIM3,TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
void main(void)
{
while(1)
}
