anson_an0 发表于 2017-5-5 19:29:55

利用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();
}
}



求大神指点下,谢谢

蔡老四 发表于 2017-5-6 23:25:53

你试试CCMR先修改,再修改CCER.我记得CCMR要先关闭CCER里面的那一位才能写入.具体忘记了.你试试
页: [1]
查看完整版本: 利用STM8L051捕获pwm,无法进入中断