我想捕捉一组PWM脉冲的两个相邻的上升沿求出周期,都设置为上升沿触发,看手册TIMx_CCMR1中
IC1PSC[1:0]:输入/捕获1预分频器 (Input capture 1 prescaler) 位3:2 这2位定义了CC1输入(IC1)的预分频系数。 一旦CC1E=’0’(TIMx_CCER寄存器中),则预分频器复位。
00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;
01:每2个事件触发一次捕获;
10:每4个事件触发一次捕获;
11:每8个事件触发一次捕获。
然后我一个设置00 一个01 ,映射到同一个通道上,这样可以不,不知道我有没有理解错?
代码如下:
u16 PWM_Period[6]={0,0,0,0,0,0};
//两个相邻的上升沿(周期)CCR1,2,3,4上升沿触发
TIM2->CCER=0x0;
TIM3->CCER=0x0;
TIM2->CCMR1=0x0601; //输入捕获1连接到通道1 捕获2连接到通道1,每2个事件触发一次捕获
TIM2->CCMR2=0x0601; //输入捕获3连接到通道3 捕获4连接到通道3,每2个事件触发一次捕获
TIM3->CCMR1=0x0601; //输入捕获1连接到通道1 捕获2连接到通道1,每2个事件触发一次捕获
//输入捕捉使能
TIM2->CCER|=0x1111;
TIM3->CCER|=0x0011;
//定时器使能
TIM2->CR1|=0x0001;
TIM3->CR1|=0x0001;
//等待捕捉完成
// delay_ms(22);
while(!(TIM2->SR&(1<<1)))
while(!(TIM2->SR&(1<<2)))
while(!(TIM2->SR&(1<<3)))
while(!(TIM2->SR&(1<<4)))
while(!(TIM3->SR&(1<<1)))
while(!(TIM3->SR&(1<<2)))
//关定时器关捕捉
TIM2->CCER&=(~0x1111);
TIM3->CCER&=(~0x0011);
TIM2->CR1 &=(~0x0001);
TIM3->CR1 &=(~0x0001);
  WM_Period[0]=(TIM2->CCR2)-(TIM2->CCR1);
  WM_Period[2]=(TIM2->CCR4)-(TIM2->CCR3);
  WM_Period[4]=(TIM3->CCR2)-(TIM3->CCR1);
TIM2->CCMR1=0x0502; //输入捕获1连接到通道2 捕获2连接到通道2,每2个事件触发一次捕获
TIM2->CCMR2=0x0502; //输入捕获3连接到通道4 捕获4连接到通道4,每2个事件触发一次捕获
TIM3->CCMR1=0x0502; //输入捕获1连接到通道2 捕获1连接到通道2,每2个事件触发一次捕获
//输入捕捉使能
TIM2->CCER|=0x1111;
TIM3->CCER|=0x0011;
//定时器使能
TIM2->CR1|=0x0001;
TIM3->CR1|=0x0001;
//等待捕捉完成
// delay_ms(22);
while(!(TIM2->SR&(1<<1)))
while(!(TIM2->SR&(1<<2)))
while(!(TIM2->SR&(1<<3)))
while(!(TIM2->SR&(1<<4)))
while(!(TIM3->SR&(1<<1)))
while(!(TIM3->SR&(1<<2)))
//关定时器关捕捉
TIM2->CCER&=(~0x1111);
TIM3->CCER&=(~0x0011);
TIM2->CR1 &=(~0x0001);
TIM3->CR1 &=(~0x0001);
  WM_Period[1]=(TIM2->CCR2)-(TIM2->CCR1);
  WM_Period[3]=(TIM2->CCR4)-(TIM2->CCR3);
  WM_Period[5]=(TIM3->CCR2)-(TIM3->CCR1);
printf("\r\n CH1 is 0x%X\r\n", PWM_Period[0]);
printf("\r\n CH2 is 0x%X\r\n", PWM_Period[1]);
printf("\r\n CH3 is 0x%X\r\n", PWM_Period[2]);
printf("\r\n CH4 is 0x%X\r\n", PWM_Period[3]);
printf("\r\n CH5 is 0x%X\r\n", PWM_Period[4]);
printf("\r\n CH6 is 0x%X\r\n", PWM_Period[5]);
而实际上,跑一会,基本就会卡在某个标志位检测哪里,异常蛋疼
|