if(tsr&0x02)//捕获1发生捕获事件
{
if(TIM4CH1_CAPTURE_STA&0X40) //捕获到一个上升沿
{
TIM4CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次低电平脉宽
TIM4CH1_CAPTURE_VAL=TIM4->CCR1; //获取当前的捕获值.
TIM4->CCER|=1<<1; //CC1P=1 设置为下降沿捕获
}else //还未开始,第一次捕获下降沿
{
TIM4CH1_CAPTURE_STA=0; //清空
TIM4CH1_CAPTURE_VAL=0;
TIM4CH1_CAPTURE_STA|=0X40; //标记捕获到了下降沿
// TIM4->CNT=0; //计数器清空
flag1=TIM4->CCR1; //捕获下降沿计数器的值
TIM4->CCER&=~(1<<1);
//CC1P=0设置为上升沿捕获
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600);
LED_Init(); //PA.7输出PWM
TIM3_PWM_Init(7199,999); //分频。PWM频率=72000/1000=72Khz/7200=10HZ=0.1S
TIM4_Cap_Init(0XFFFF,72-1); //以72MHZ/72=1Mhz的频率计数,
if(TIM4CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
{
// temp1=TIM4CH1_CAPTURE_STA&0X3F1;
// temp1=temp1*65536+0XFFFF; //溢出时间总和
temp1=TIM4CH1_CAPTURE_VAL-flag1; //得到总的高电平时间
printf("LOW1:%d us\r\n",temp1); //打印总的高点平时间
TIM4CH1_CAPTURE_STA=0; //开启下一次捕获
我用定时器4进行4路输入捕获,这是一路的中断,标红色的是记录捕获时CRR1的值,那么低电平脉宽是不是等于TIM4CH1_CAPTURE_VA- flag1,如果有溢出又怎么算
|