最近买了一块共享充电桩的电路板,主控芯片是STM32F030C8T6后面我换成了STM32F103C8T6 上面的计量芯片是BL0937,BL0937引脚输出固定为38US的脉宽,频率与功率成正比,过流时,输出6.378KHz的脉冲。其中有一些IO没得复用或重映射成定时器通道IO例如PA0PA1PA5等,那如何用普通IO检测这么短的脉冲宽度呢?2、因为有10路输出,就是要10路都得做脉冲检测,还得做通讯,如何实现才会不影响通讯? PS:没有外部高速和低速晶振,只能用内部的。别人的产品也是用这块板可以实现,所以请问是在不外挂其他模块的情况下如何实现?
既然别人可以实现,肯定是有办法的,我认为可以从以下几个方面考虑
1.定时器中读取IO的输入电平,然后进行判断,这样可以算出高低电平的时间
2.定时器配合外部中断来做,IO配置为外外部中断,进去中断后读定时器的计数值
因为你这个是固定脉宽输出,不是频率测量,只要判断出脉冲不一样就好了,这样可操作的余地就稍微大一点。不需要每个脉冲都读取,当然用pwm是最快的做法了。
我觉得38us时间不算短,关键是你有10路。不够我觉得应该也可以做成出来,关键是代码优化问题。
我给的思路检测方法跟楼下一样,通过定时器和外部中断来实现,但是代码中的,关于中断和定时器的操作最好用寄存器方式实现。
先不管通讯问题,即先调试1路,再调试10路。都OK话,最后再添加通讯。
这其中的中断优先级问题也要考虑