——因为只需要 捕捉 四路 PWM 信号——的【高电平时间】——
基本的思路是这样——让 CNT 自由的 从0 到 FFFF 计满 之后自己 归 0。
被测量的 PWM 高电平 时间 —— 远远小于 这个 【自然溢出的周期】。
这样:上升沿“捕捉中断”一次,记录下“捕捉寄存器”的数值=MyCH1_Up变量中,
下降沿“捕捉中断”一次,记录下“捕捉寄存器”的数值=MyCH1_Dn变量中。
——— 两者之差 就是 “高电平时间”,回头再处理【自然溢出】的问题。。。
可是问题出来了:实际情况 并非 双边 捕捉 啊。以前有人也提问过。
关键是【3.5库】居然支持这种写法。。。编译也无错。。。
TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;//TIM通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;//上升沿和下降沿
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//输入1,2,3或4分别与IC1,2,3或4相连
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//每探测到1个边沿都捕获一次
TIM_ICInitStructure.TIM_ICFilter = 0x00;//输入捕获滤波器
TIM_ICInit(TIM4,&TIM_ICInitStructure);//初始化
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//TIM通道2
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;//上升沿和下降沿
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//输入1,2,3或4分别与IC1,2,3或4相连
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//每探测到1个边沿都捕获一次
TIM_ICInitStructure.TIM_ICFilter = 0x00;//输入捕获滤波器
TIM_ICInit(TIM4,&TIM_ICInitStructure);//初始化
当然:繁杂一点,在 中断里 不断的修改捕捉边沿的 上、下,是可以的,但是总觉得不可靠。
人 写 软件 就是 要 简单===>可靠 啊。。越简单 越可靠。。。
。
|