完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在做一个项目,用STM32 的外部中断检测脉冲信号,在外部中断里,分别记录脉冲开始和结束时定时器(tiM3)的计数值,计算这两个计数值的差CntDiff,即得到脉冲的宽度。
这样测量在开始是可以的,测量结果也比较稳定。但当我加入USART3串口通信功能后,问题来了:如果频繁的进行串口数据收发,发现会对上述计数差值CntDiff有影响,在脉冲信号不变的情况下,通信越频繁,CntDiff的值有越大的趋势。 中断优先级配置情况是 外部中断: 抢先优先级=0, 副优先级=0, 用于检测脉冲信号 TIM2中断: 抢先优先级=1, 副优先级=0, 用于系统定时 USART3中断: 抢先优先级=2, 副优先级=0, 用于串口通信 TIM3: 不产生中断,仅使用其计数值。 请教各位,这可能是什么问题导致的?如何分析?谢谢!! |
|
相关推荐
6个回答
|
|
中断被打断,建议把TIM3的中断也开启。另外USART3中不要有太多的处理,只写接收和清除对应标志位代码就可以了。
|
|
|
|
回复第 2 楼 于2014-10-11 08:53:10发表:
中断被打断,建议把TIM3的中断也开启。另外USART3中不要有太多的处理,只写接收和清除对应标志位代码就可以了。 继续请教一下,为什么要把TIM3中断也打开? 现在USART3中本来就没有多少处理,就是仅仅接收和发送数据.... |
|
|
|
TIM3打开,我建议用一个类似滴答时钟做处理。不要用寄存器本身的计数值,因为你串口中断处理的数据太多的时候,会丢掉TIM3的值。
|
|
|
|
回复第 4 楼 于2014-10-11 11:33:39发表:
TIM3打开,我建议用一个类似滴答时钟做处理。不要用寄存器本身的计数值,因为你串口中断处理的数据太多的时候,会丢掉TIM3的值。 可否具体一些,没理解。 滴答时钟你指的是SysTick时钟吗? 还有,用TIM3寄存器本身的计数值为什么会丢掉?? |
|
|
|
他本身的值是在增加,当基础以后会重新计数。就是SysTick。
|
|
|
|
受教了。。。。。。。。。。。。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2255 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2071 浏览 3 评论
4687 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2215 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2757 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 03:39 , Processed in 0.611109 second(s), Total 81, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号