完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用的定时器3的通道检测外部脉冲个数,每隔一秒读取一次CNT寄存器的值,标准库下脉冲数量正常,但是RTT里读取就会少一个脉冲 上面打印的是标准库,下面打印的是RTT RTT NANO 使用定时器ETR外部计数时会丢失脉冲 定时器代码:定时器3外部计数,定时器2产生脉冲 #include "led.h" rt_thread_t USART_tid; |
|
相关推荐
8个回答
|
|
rt_kprintf("Count=%drn",TIM_GetCounter(TIM3)); 不要把接收放在 rt_kprintf中
可以改为:rt_uint32_t cnt = TIM_GetCounter(TIM3); ,数据也可以先存数组中,后面一起打印, - rt_kprintf 打印也占用时间的!! rt_thread_mdelay(1000); 不是严格意义上的1S,可以时间长一点看计数 |
|
|
|
static void USART_thread_entry(void* params)
{ static uint32_t now_time = 0; rt_uint32_t cnt = 0; while(1) { if((rt_tick_get()-now_time)>=1000) { cnt = TIM_GetCounter(TIM3); rt_kprintf("Count=%drn",cnt); TIM_SetCounter(TIM3, 0); now_time = rt_tick_get(); } } } 我改成这样了,还是会丢脉冲,因为是要测转速的,一圈一个脉冲,每秒读一次 |
|
|
|
rt_tick_get 来自于 systick (系统时钟),这个1S 不是准确的,看你的脉冲 1S 10000个, 100uS一个,所以这样存在一点误差。
|
|
|
|
找到问题了,应该先TIM_SetCounter(TIM3, 0);再rt_kprintf(“Count=%drn”,cnt);先打印的话打印的时间有脉冲进来,再TIM_SetCounter(TIM3, 0)导致打印期间检测到的脉冲被清零了,应该是这样
|
|
|
|
这样也会有改善,先打印占用一点时间。
|
|
|
|
rt_kprintf占用那么长时间吗,我裸机直接printf(“Count=%drn”,TIM_GetCounter(TIM3))都没问题
|
|
|
|
rt_kprintf串口打印会占用一点时间
|
|
|
|
将线程优先级调成最高0,应该就没问题了
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
753 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2714 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1368 浏览 0 评论
1955 浏览 0 评论
1523 浏览 0 评论
75015 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 17:03 , Processed in 0.865610 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号