完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们知道系统嘀嗒时钟使用了一个u32类型的变量每毫秒加1,约49天回归0。那么问题来了,如果在这个变量剩余如255(等于0xFFFFFF00)时就要回归0,这时定时如1000毫秒,而hal库中是先记录首个变量值0xFFFFFF00,而后就是用新值减去0xFFFFFF00,看是否大于1000。那么如果要大于1000必须等到变量回归0后递增到1001,这是延时的总时间是不是255+1001=1256毫秒呢?那这个定时不就不准了吗
|
|
相关推荐
1个回答
|
|
首先,我们来分析一下这个问题。系统嘀嗒时钟使用了一个u32类型的变量,每毫秒加1,约49天回归0。现在要求在变量剩余255(即0xFFFFFF00)时就要回归0,并定时1000毫秒。我们来逐步计算和分析。
1. 当变量剩余255时,即变量值为0xFFFFFF00。 2. 定时1000毫秒,我们需要计算在变量值递增到大于等于1000时的时间。 3. 由于变量值在递增过程中会回归到0,所以我们需要等待变量值从0xFFFFFF00递增到1001。 4. 在变量值从0xFFFFFF00递增到0xFFFFFFFF(即回归0)的过程中,需要递增255次。 5. 然后,变量值从0递增到1001,需要递增1001次。 6. 所以,总的递增次数为255 + 1001 = 1256。 7. 由于每次递增代表1毫秒,所以延时的总时间是1256毫秒。 从上述分析来看,确实存在定时不准确的问题。为了解决这个问题,我们可以采用以下方法: 1. 在开始定时时,记录当前的变量值(假设为start_value)。 2. 在定时结束时,记录当前的变量值(假设为end_value)。 3. 如果end_value >= start_value,那么定时时间就是 (end_value - start_value)。 4. 如果end_value < start_value,那么定时时间就是 (0xFFFFFFFF - start_value + end_value + 1)。 通过这种方法,我们可以更准确地计算定时时间,避免因变量值回归导致的定时不准确问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
541浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
514浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 11:01 , Processed in 0.869543 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号