作为一个新手,有几个问题还是不懂。能麻烦大牛给解释下吗? 使用定时器边沿计时模式时,是在 //启动捕捉模块 TimerEnable(TIMER4_BASE, TIMER_A); 后就开始计时了吗? 可是我如果想测量一个高电平的持续时间的话,使用边沿计时,一启动捕捉模块就开始计时了。而我想能不能在检测到高电平的时候开始计时,到检测到低电平的时候停止计时呢? 还有TimerLoadSet()函数里 preload的值和系统的频率和实际的时间有什么数值关系呢? 万分感谢 |
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
作为一个新手,有几个问题还是不懂。能麻烦大牛给解释下吗? 使用定时器边沿计时模式时,是在 //启动捕捉模块 TimerEnable(TIMER4_BASE, TIMER_A); 后就开始计时了吗? 可是我如果想测量一个高电平的持续时间的话,使用边沿计时,一启动捕捉模块就开始计时了。而我想能不能在检测到高电平的时候开始计时,到检测到低电平的时候停止计时呢? 还有TimerLoadSet()函数里 preload的值和系统的频率和实际的时间有什么数值关系呢? 万分感谢 |
那个视频我看过了,但是感觉对编程的东西讲的不是很多啊,这些问题里面应该是也没有涉及吧
我暂时想到了一个方法,适用于高电平持续时间不是很长的情况,就是它波形变化好像是不影响定时器的计时的,定时器一直在计时,所以只要记录高电平触发和结束 时的定时器值,就可以算出来时间了(前提是时间不长,否则可能经过了好几个定时器周期)。
1.可以在高电平前后加个IO的翻转,测量IO的电平变化
2.在高电平前后加个SysTick,读取他的值
楼主可以设置捕获双边沿,然后在中断中读取IO电平来判断当前是上升沿还是下降沿。
TimerControlEvent(WTIMER1_BASE, TIMER_B, TIMER_EVENT_BOTH_EDGES);
时间发生后,TimerValueGet(WTIMER1_BASE, TIMER_B);可以读取到时间发送瞬间,定时器的值。这样就可以计算出时间了。
TimerLoadSet是设置定时器的初始值,可以系统频率没关系的。你可以根据这个值,结合系统频率,计算出实际的时间。