OpenEdv-开源电子网

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

STM32f103寄存器版本

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-13
在线时间
3 小时
发表于 2018-7-13 09:56:48 | 显示全部楼层 |阅读模式
寄存器版本的delay_ms函数是精准延时吗,我怎么感觉不准而且误差很大。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-7-13 11:29:45 | 显示全部楼层
zzccll 发表于 2018-7-13 11:23
那参数的·取值有范围吗为什么我写一个delay_ms(5000)就不是5秒

//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864
void delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                                //时间加载(SysTick->LOAD为24bit)
        SysTick->VAL =0x00;                                                        //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        //开始倒数  
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                //等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        //关闭计数器
        SysTick->VAL =0X00;                                               //清空计数器                      
}
回复 支持 2 反对 0

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4520
金钱
4520
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-7-13 10:21:49 | 显示全部楼层
是准确的,应该肉眼感觉不到误差,
如果有明显不对,
就是你的时钟系统配置不对。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-13
在线时间
3 小时
 楼主| 发表于 2018-7-13 10:39:27 | 显示全部楼层
warship 发表于 2018-7-13 10:21
是准确的,应该肉眼感觉不到误差,
如果有明显不对,
就是你的时钟系统配置不对。

我时钟配置是按照例程配置的,只不过我用的不是原子的开发板,但是都是f103系列的应该没有影响吧。
回复 支持 反对

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-7-13 11:03:25 | 显示全部楼层
没问题,我用其他开发版,用的原子延时程序,很精确。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-7-13
在线时间
3 小时
 楼主| 发表于 2018-7-13 11:23:01 | 显示全部楼层
HXYDJ 发表于 2018-7-13 11:03
没问题,我用其他开发版,用的原子延时程序,很精确。

那参数的·取值有范围吗为什么我写一个delay_ms(5000)就不是5秒
回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4520
金钱
4520
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-7-13 11:26:30 | 显示全部楼层
zzccll 发表于 2018-7-13 11:23
那参数的·取值有范围吗为什么我写一个delay_ms(5000)就不是5秒

delay_ms(5000)太多了,
好像最大2000多的,
你可以用小的多延时几次,
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 13:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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