|
楼主 |
发表于 2010-1-28 12:46:39
|
显示全部楼层
回一楼:
请教楼主:
正在为STM32网络收音机做自学习型红外遥控:http://www.rt-thread.org/phpbb/viewtopic.php?f=17&t=454
但碰到一个问题:我想实现第一次捕获后把两个计数器全部清0了,但发现这时CCR*寄存器写不了,是只读的.
于是,出来的结果还要自己做减法.好麻烦.
不知道为什么,查RM没看到相关介绍
另外几点:
楼主貌似只捕获下降沿,不捕获上升沿?要是碰到某一区间的高电平和低电平的总合是一样长的,那就分不出来了.
VU16这类STM32的固件库的数据类型,我认为,只在 只能在STM32上面运行 的程序里面使用就好了,其它地方还是用C原生的.
可是,STM32库的DEMO竟然用 __IO 来代替 volatile .... 回复【1楼】aozima
-----------------------------------------------------------------------
回复【1楼】aozima
请教楼主:
正在为STM32网络收音机做自学习型红外遥控:http://www.rt-thread.org/phpbb/viewtopic.php?f=17&t=454
但碰到一个问题:我想实现第一次捕获后把两个计数器全部清0了,但发现这时CCR*寄存器写不了,是只读的.
于是,出来的结果还要自己做减法.好麻烦.
不知道为什么,查RM没看到相关介绍
另外几点:
楼主貌似只捕获下降沿,不捕获上升沿?要是碰到某一区间的高电平和低电平的总合是一样长的,那就分不出来了.
VU16这类STM32的固件库的数据类型,我认为,只在 只能在STM32上面运行 的程序里面使用就好了,其它地方还是用C原生的.
可是,STM32库的DEMO竟然用 __IO 来代替 volatile ....
-----------------------------------------------------------------------
做减法还是比较简单的,只有两条指令而已,对于STM32 这种72M的处理器不算什么,至于你说的CCR*寄存器我基本上不会直接操作寄存器的,都是使用系统的库函数。
这里只是捕获了下降沿,主要是STM32的一个通道只能要么捕捉上升沿,要么捕捉下降沿。
这里对于一般的红外编码,只有三种脉冲,不会有相等长度的脉冲。如果作为其他的用途,可以把红外的OUT接TIM的两个通道,一个通道捕获上升沿,一个通道捕获下降沿。我这里为了简便,只是捕捉了下降沿。
呵呵,至于VU16 还是volatile 这个应该是随个人的意思吧 ,就算到了其他的平台不支持
,也可以自己typedef volatile unsigned short vu16 ,这样自己写程序就可以很方便了。 |
|