单时钟多通道输入捕获
背景:用3个超声波模块同时进行测距,计划通过输入捕获来实现。查找资料发现他人做的多通道输入捕获,不过以看到的好像都是信号单输入的,对同一个信号(PWM)进行上升沿、下降沿的捕获。但是我想实现一个定时器的多个通道对多个输入信号进行捕获,对多个方面都做了一点尝试,但是还是未能成功。写一篇记录一下,若是以后有机会完善再在后面加上。
0、单通道单输入信号捕获
代码重点是输入捕获的中断逻辑函数。下面是最简单的单通道对单个信号进行捕获(捕获PWM波的高电平的时长),整个逻辑为:
①捕获初始设置为上升沿触发
②捕获到上升沿,进入中断函数
③判断发生上升沿捕获,使能定时器,开始计数
④同时将捕获设置为下降沿触发
⑤捕获到下降沿,再次进入中断函数
⑥判断发生下降沿捕获,关闭定时器,并读取当前定时器的值
注:本中断函数还包括定时器的溢出中断
//中断服务程序
void TIM5_IRQHandler(void)
{
if((TIM5CH3_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if(TIM_GetITStatus(TIM5, TIM_IT_Update)