OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 75|回复: 6

STM32f103寄存器版本

[复制链接]

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-7-13
在线时间
2 小时
发表于 4 天前 | 显示全部楼层 |阅读模式
正点原子公众号
寄存器版本的delay_ms函数是精准延时吗,我怎么感觉不准而且误差很大。
回复

使用道具 举报

  离线 

0

主题

363

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2018-2-7
在线时间
92 小时
发表于 4 天前 | 显示全部楼层
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

使用道具 举报

  离线 

16

主题

502

帖子

1

精华

高级会员

Rank: 4

积分
860
金钱
860
注册时间
2018-5-11
在线时间
153 小时
发表于 4 天前 | 显示全部楼层
是准确的,应该肉眼感觉不到误差,
如果有明显不对,
就是你的时钟系统配置不对。
回复 支持 反对

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

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

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

使用道具 举报

  离线 

0

主题

363

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2018-2-7
在线时间
92 小时
发表于 4 天前 | 显示全部楼层
正点原子公众号
没问题,我用其他开发版,用的原子延时程序,很精确。
回复 支持 反对

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

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

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

使用道具 举报

  离线 

16

主题

502

帖子

1

精华

高级会员

Rank: 4

积分
860
金钱
860
注册时间
2018-5-11
在线时间
153 小时
发表于 4 天前 | 显示全部楼层
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);
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-17 04:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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