利用STM8L051捕获pwm,无法进入中断
代码如下:void Clk_Config(void)
{
CLK_DeInit(); //时钟初始化
CLK_HSICmd(ENABLE); //启动内部时钟16M
//CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
GPIO_Init(GPIOC,GPIO_Pin_4,GPIO_Mode_Out_PP_High_Fast);//初始化端口
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE); //配置TIM2时钟
CLK->CCOR = 0xe2; //CCO输出
}
void GPIO_Config(void)
{
GPIO_Init(LED_PORT,LED_PINS,GPIO_Mode_Out_PP_Low_Slow);//初始化LED端口
GPIO_Init(GPIOC,GPIO_Pin_5,GPIO_Mode_In_FL_No_IT);//初始化输入端口
//GPIO_Init(GPIOC,GPIO_Pin_4,GPIO_Mode_Out_PP_High_Fast);//初始化端口
}
void TIM2_Config(void)
{
TIM2_DeInit(); //初始化TIM2
//TIM2->CR1 = 0x06;
TIM2->CCER1 &= 0xee;//禁止输入捕获
TIM2->CCMR1 |= 0x01;//IC1通道被配置为输入,选择TI1FP1通道,8分频
TIM2->CCER1 &= 0xec;//CH1上升沿触发IC1
TIM2->CCMR2 |= 0x02;//IC1通道被配置为输入,选择TI1FP2通道,8分频
TIM2->CCER1 |= 0x20;//CH1下降沿触发IC2
//TIM2->CCER1 = 0x31; //TI1FP1为上升沿有效,TI1FP2为下降沿有效,
TIM2->SMCR |= 0x54; //TI1FP1触发复位
TIM2->IER |= 0x06; //允许捕获比较1/2中断
TIM2->CCER1 |= 0x11;//是能输入捕获
TIM2_Cmd(ENABLE);
}
__interrupt void IRQHandler()
{
u8 i=0;
if(TIM2_GetITStatus(TIM2_IT_CC1))
//if(TIM2->SR1&TIM2_IT_CC1)
{
TIM2_ClearITPendingBit(TIM2_IT_CC1);
ret1 = TIM2_GetCapture1();//周期
ok = 1;
i++;
if(i == 0xff)
i = 0;
}
else if(TIM2_GetITStatus(TIM2_IT_CC2))
{
TIM2_ClearITPendingBit(TIM2_IT_CC2);
ret2 = TIM2_GetCapture2();//高电平
i++;
if(i == 0xff)
i = 0;
}
return;
}
void main(void)
{
GPIO_Config();
Clk_Config();
TIM2_Config();
enableInterrupts(); //打开总中断
//IRQHandler();
while(1){
Display();
}
}
求大神指点下,谢谢
你试试CCMR先修改,再修改CCER.我记得CCMR要先关闭CCER里面的那一位才能写入.具体忘记了.你试试
页:
[1]