OpenEdv-开源电子网

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

求STM32f103毫秒和微秒的精准延时函数

[复制链接]

42

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-12-28
在线时间
62 小时
发表于 2018-12-1 11:46:53 | 显示全部楼层 |阅读模式
8金钱

最佳答案

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

https://github.com/ShuifaHe/STM32/blob/delay/delay.c如果好用就按星号点赞, 有问题可以到我的帖子http://www.openedv.com/forum.php?mod=viewthread&tid=275994里讨论。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4523
金钱
4523
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-12-1 11:46:54 | 显示全部楼层
本帖最后由 warship 于 2018-12-1 12:41 编辑

https://github.com/ShuifaHe/STM32/blob/delay/delay.c如果好用就按星号点赞,
有问题可以到我的帖子http://www.openedv.com/forum.php?mod=viewthread&tid=275994里讨论。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-12-1 11:47:49 | 显示全部楼层
你是外星人吗?原子哪个代码里没有呀?
回复

使用道具 举报

42

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-12-28
在线时间
62 小时
 楼主| 发表于 2018-12-1 11:53:03 | 显示全部楼层
275891381 发表于 2018-12-1 11:47
你是外星人吗?原子哪个代码里没有呀?

原子那里面太复杂了,还是带操作系统的,我把没带操作系统的延时函数,复制到我的程序里测量了一下发现完全不对,但是在原子的程序里面确是对的
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-12-1 12:02:00 | 显示全部楼层
原子的很准了,你不会用才不对的
回复

使用道具 举报

42

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-12-28
在线时间
62 小时
 楼主| 发表于 2018-12-1 12:04:57 | 显示全部楼层
szczyb1314 发表于 2018-12-1 12:02
原子的很准了,你不会用才不对的

那我要怎样移植过来呢?直接全部复制过来会报错的
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-12-1 12:13:15 | 显示全部楼层
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数
void delay_init()         
{
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);        //选择外部时钟  HCLK/8
        fac_us=SystemCoreClock/8000000;        //为系统时钟的1/8  
         
        fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数   
}
void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us; //时间加载                           
        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;       //清空计数器         
}
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;       //清空计数器                      
}
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

42

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-12-28
在线时间
62 小时
 楼主| 发表于 2018-12-1 12:19:23 | 显示全部楼层
szczyb1314 发表于 2018-12-1 12:13
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数
void delay_init()         

..\src\UsrDelay.c(8): error:  #20: identifier "SysTick_CLKSource_HCLK_Div8" is undefined
复制来报错什么情况呢
回复

使用道具 举报

42

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-12-28
在线时间
62 小时
 楼主| 发表于 2018-12-1 12:23:01 | 显示全部楼层
imbest 发表于 2018-12-1 12:19
..\src%usrDelay.c(8): error:  #20: identifier "SysTick_CLKSource_HCLK_Div8" is undefined
复制来报 ...

..\src\UsrDelay.c(3): error:  #5: cannot open source input file "misc.h": No such file or directory
调用misc.h后又会报这个错误
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-12-1 12:46:59 | 显示全部楼层
imbest 发表于 2018-12-1 12:19
..\src%usrDelay.c(8): error:  #20: identifier "SysTick_CLKSource_HCLK_Div8" is undefined
复制来报 ...

你自己包含头文件呐
#include "stm32f10x.h"
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-12-1 12:48:11 | 显示全部楼层
imbest 发表于 2018-12-1 12:23
..\src%usrDelay.c(3): error:  #5: cannot open source input file "misc.h": No such file or director ...

缺那个头文件就包含头文件呐
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

42

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-12-28
在线时间
62 小时
 楼主| 发表于 2018-12-1 13:37:25 | 显示全部楼层
szczyb1314 发表于 2018-12-1 12:48
缺那个头文件就包含头文件呐

延时10ms设置断点可是时间根本不会停一直在走
搜狗截图20181201133232.png
搜狗截图20181201133304.png
回复

使用道具 举报

42

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-12-28
在线时间
62 小时
 楼主| 发表于 2018-12-1 14:05:44 | 显示全部楼层
imbest 发表于 2018-12-1 13:37
延时10ms设置断点可是时间根本不会停一直在走

一直在执行do.....while语句
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 08:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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