void TIM4_Init(void){ //GPIO_InitTypeDefGPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDefNVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //使能定时器3时钟 //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
//设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOA.7// GPIO_InitStructure.GPIO_Pin= GPIO_Pin_7; //TIM_CH2// GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP; //复用推挽输出// GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;// GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO
//初始化TIM3 TIM_DeInit(TIM4); TIM_TimeBaseStructure.TIM_Period= 49999; //设置在下一个更新()事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler=7199; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision= TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode= TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //中断分组初始化 NVIC_InitStructure.NVIC_IRQChannel= TIM4_IRQn; //TIM2中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; //先占优先级2级 NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0; //从优先级0级 NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
TIM_Cmd(TIM4,ENABLE); //使能TIM4
//TIM_SetCompare2(TIM3,psc);//设置占空比 //TIM3->CCR2=psc; }
void TIM4_IRQHandler(void){ static u8 n_time=0; if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) { n_time++; if(n_time>1) { LED0=0; //点亮LED0 Power_Delay_5s=1; n_time=0; TIM_Cmd(TIM4, DISABLE); }
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update); }
重点是,仿真时,timer4的时钟只有8M,程序是我在f103ZET8上调试好,移植到f103c8t6上的。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我查看了一下启动函数里面,是因为把系统的时钟的初始化函数屏蔽。我看到您在旁边注释的文字了。我把注释去掉就可以了。
主频也是8M,我又换了一个工程模板,修改了下,系统主频又变成108M了,f103最高不是72M吗,怎么会变成108M
一周热门 更多>