OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4816|回复: 4

主频为84MHz的stm32f401CCU6的延时函数会不会有误差?

[复制链接]

11

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2022-7-29
在线时间
24 小时
发表于 2022-8-17 15:48:09 | 显示全部楼层 |阅读模式
5金钱
买了一块stm32f401CCU6, 发现它的主频是84MHz, 瞅了一眼 delay.c 文件中的 fac_us 值的由来    static u8  fac_us = 0;                                                        //us延时倍乘数
fac_us = SYSCLK / 8;                                                      // SYSCLK为入口参数,我将它设置为了84
因为84不是8的倍数,所以是不是延时函数会有一丢丢的误差? 我可以把主频改成88MHz,或者将 fac_us  声明为 static float fac_us 来减少误差吗?


最佳答案

查看完整内容[请看2#楼]

别的不说,主频自己都有误差,你能咋办? 要么用一个时钟源去校准下,要么读取内部的校准值. 再说,对单片机而言其实他处理的都是整数,即使是浮点那也是显示给你的看的是浮点,按数的存储来说都是整数. 你改成浮点你让他怎么处理? 建议计算出余数,然后多少时间后给他根据余数修正下数据就好了. 如果有依赖主频,且对时序要求高的动作,请用定时器
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2022-8-17 15:48:10 | 显示全部楼层
别的不说,主频自己都有误差,你能咋办?
要么用一个时钟源去校准下,要么读取内部的校准值.

再说,对单片机而言其实他处理的都是整数,即使是浮点那也是显示给你的看的是浮点,按数的存储来说都是整数.
你改成浮点你让他怎么处理?

建议计算出余数,然后多少时间后给他根据余数修正下数据就好了.

如果有依赖主频,且对时序要求高的动作,请用定时器
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2022-8-17 15:59:09 | 显示全部楼层
帮顶   
回复

使用道具 举报

11

主题

2143

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4863
金钱
4863
注册时间
2015-1-10
在线时间
609 小时
发表于 2022-8-18 10:02:24 | 显示全部楼层
会有误差,原子哥的delay是阻塞的,简单代码用用没事,建议还是用定时器实现
回复

使用道具 举报

0

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1360
金钱
1360
注册时间
2021-2-25
在线时间
100 小时
发表于 2022-8-18 10:33:21 | 显示全部楼层
帮顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-8 21:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表