本帖最后由 1208 于 2019-4-22 12:12 编辑
1)看了这个帖子http://www.openedv.com/forum.php?mod=viewthread&tid=51833
一直没人解决,问题点主要是三个通道总是互相干扰,数据一直波动
2)直接用输入捕获来捕获PWM的波形,再输出对应的占空比TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);
也是可以输出相应的电平数据,但是输出的电平数据不是很准,并不可靠,不太建议这样做
3)刚开始连调单通道输入捕获一个跑马灯的电平,都遇到很大的问题,说到这里不得不吐槽一下
TIM3_PWM_Init(899,0); //不分频。PWM频率=72000/(899+1)=80Khz
原来是这句里面LED灯PB5被复用,导致一直捕获不到跑马灯的电平,一直找不到问题点
后来,通过仿真,结果被我屏蔽掉就可以捕获到了,好气呀
找问题,还是要多多通过仿真来找问题,知道那步走不了,然后顺着问题点接着往下找,共勉
成功实现了单通道PA0输入捕获跑马灯的电平,很开心
4)接下来,就是单独调通另外三个输入捕获通道PA1,PA2,PA3,都是输出500ms的电平
四个通道输入捕获加到一起,这时就会出现帖子上所描述的问题数据干扰
我看到帖子里面的程序,如何避免里面出现问题的误区
最主要还是就是每个中断都清中断,感觉很不合理,会影响其它通道数据传输,导致数据干扰
我选择在中断程序里面末尾一起清中断,问题就应然而解,就这样调好两个通道
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update);
5)按道理两通道可以了,调试出来四个通道是没有问题的
就因为不够细心没有配置好,出现数据没有输出
这个可以通过仿真找下有没进入中断里面,进不了检查下配置
如通道4:TIM5CH4_CAPTURE_VAL=TIM_GetCapture4(TIM5);
这时,开启四个通道同时捕获四个电平
PA0--->PB5
PA1--->PB7
PA2--->PB13
PA3--->PB14
完美捕获到四个通道相应设置好的电平数据
配置四个通道很多细节要处理好,建议先一个一个通道务必调通好
6)注意要点:开启四个通道时
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;配置通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;捕获中断
TIM_ICInitStructure.TIM_ICFilter = 0x0;不滤波
TIM_ICInit(TIM4, &TIM_ICInitStructure);将配置应用
以上每个通道都需要将整个配置再写一遍,使用与'|'是无效的。
四个通道成功捕获 |