OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 143|回复: 6

STM32f103寄存器版本

[复制链接]

  离线 

1

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-7-13
在线时间
2 小时
发表于 2018-7-13 09:56:48 | 显示全部楼层 |阅读模式
寄存器版本的delay_ms函数是精准延时吗,我怎么感觉不准而且误差很大。
回复

使用道具 举报

  离线 

0

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1113
金钱
1113
注册时间
2018-2-7
在线时间
123 小时
发表于 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

使用道具 举报

  离线 

24

主题

1180

帖子

2

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手上路

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

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

使用道具 举报

  离线 

0

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手上路

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

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

使用道具 举报

  离线 

24

主题

1180

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1962
金钱
1962
注册时间
2018-5-11
在线时间
369 小时
发表于 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
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

必看,必学:"原子哥”力荐上一条 /1 下一条

正点原子公众号

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

GMT+8, 2018-9-22 01:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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