7楼给的条件如下:“两个脉冲间隔约为400ns,但脉冲宽度为20ns至100ns,要测量每个脉冲的宽度,并将这个序列调整变换后,转发出去。”
首先“两个脉冲间隔约为400ns”,表示信号频率小于2.5MHz;其次“脉冲宽度为20ns至100ns”,正脉冲(半周期)最小为20ns,表示脉冲频率小于25MHz。根据这两点,只要定时器能产生这样的波形,I/O端口肯定能够正确地输出;至于定时器能否产生这样的波形我还没有仔细研究,似乎可以使用单脉冲模式(One pulse mode),大家可以一起讨论一下如何产生。
关于输入信号是否能被捕捉到,在手册中还没有找到正好针对这个问题的数据,但有一个数据可以借鉴,请看《STM32F103xxx数据手册》的表35(I/O AC characteristics)的最后一栏,外部中断控制器检测信号的脉宽(Pulse width of external signals detected by the EXTI controller)最小为10ns,就是说只要有一个10ns的脉冲即可触发中断;I/O口的输入电路能够捕捉10ns的脉冲触发中断,捕捉20ns的脉冲触发定时器应该不是问题。
最后的问题是,因为STM32定时器的时钟频率最高为72MHz,因此所能测量脉宽的最小精度为1/72MHz,即约为14ns;这样测量这个20ns脉冲的结果,只能是14ns(计数1次),或28ns(计数2次),而不可能是20ns、22ns这样的精度;同理,输出的脉宽肯定也是14ns的倍数,13.9ns、27.8ns、41.6ns、55.5ns、69.4ns、83.3ns、97.2ns......
结论,7楼的信号可以被捕捉到并被输出,但精度有限。
|