详情描述
看官方文档上面没有写这个delayms函数的注意事项,自己也想不明白,求助各位佬,这是从官方网站直接下的历程,什么都没有动,延时函数参数在1500以下的时候都很正常,填1900,2000的时候不管是led灯还是串口就跟没有延时一样疯狂发数据,填写到5000的时候大概只延时了2秒多, ##STM32F103##

已尝试解决的方法及结果
尝试了所有带延时函数的历程都是这样,1500以下是正常的,多写一点就有问题,用江科协给的历程就没问题
未解决原因
我问ai他说系统时钟的load寄存器是一个24位的(ai写的可能,因为我看中文参考手册没有找到这个24位的load寄存器),最大是16,777,215,我看官方历程延时ms就是调用了延时ns1000次,也可能是这个问题,但是我是延时1500*1000也就是1500,000,也远远达不到溢出的问题呀,具体的我也看不懂,因为我也是才接触stm32f103
#STM32F103#
立创开发板
全部评论 默认 最新
JAY-316
2025-08-27 09:18:48 来自广东
首先systick是一个24位倒计时计数器,最大支持16,777,216; 当时钟主频72M时,你输入1500给delay_ms函数相当于输入1,500,000给delay_us函数,函数里面是count计数器等于1,500,000*9=13,500,000;理论上是正常的。 但是你输入2000,count计数器就是18,000,000大于16,777,216;当count幅值给systick就会导致数据溢出,实际延时就会变得很短。
三进制的孤独 作者
2025-08-28 04:40:39 来自河南
我丢,太有说法了哥,我参数放1800以下就没问题,1800以上就跑飞,拿16,777,216/9000刚好1,864.13,官方这delayms就是调用us1000次坑坏了,让一个新手琢磨好几天了,谢谢哥
趁现在
2025-08-25 11:36:20 来自广东
蹲,有答案滴滴
三进制的孤独 作者
2025-08-25 18:16:18 来自河南
我问ai他说系统时钟的load寄存器是一个24位的(ai写的可能,因为我看中文参考手册没有找到这个24位的load寄存器),最大是16,777,215,我看官方历程延时ms就是调用了延时ns1000次,也可能是这个问题,但是我是延时1500*1000也就是1500,000,也远远达不到溢出的问题呀,具体的我也看不懂,因为我也是才接触stm32f103
GRAHOWLET
2025-08-26 09:41:18 来自浙江
STM32是32位单片机,没有24位的寄存器的。即使有24位寄存器,delay函数输入值是32位的,所以也不会出问题。也就是说问题不在这里
三进制的孤独 作者
2025-08-28 23:06:03 来自河南
哥们,上面有人解答了,滴你一下
趁现在
2025-08-29 16:12:37 来自广东
谢谢[玫瑰]
GRAHOWLET
2025-08-25 11:08:20 来自浙江
建议30块钱买个逻辑分析仪。然后自己调延时(就直接while就行) ,例程的延时不准的,有误差。
三进制的孤独 作者
2025-08-25 18:16:34 来自河南
嗯嗯,谢谢老哥给的思路
牛大爷
2025-08-25 08:12:43 来自广东
买了,吃灰中
已折叠部分评论 展开
没有更多啦~