OpenEdv-开源电子网

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

我自己写的延时函数怎么运行起来效果不对呢

[复制链接]

18

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-9-5
在线时间
43 小时
发表于 2018-1-19 15:13:45 | 显示全部楼层 |阅读模式
1金钱
我的延时函数是这么写的:
void delay(int num, char c)
{
        u32 k=1,scale=1;
        if(c=='m'||c=='M')
                k=1000;

        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
        scale = SystemCoreClock/8000000;       
       
        SysTick->CTRL         = 0;                        // Disable SysTick
        SysTick->LOAD         =  num * k * scale;                // Count from num*k*scale to 0
        SysTick->VAL         = 0;                        // Clear current value as well as count flag
        SysTick->CTRL          = 5;                        // Enable SysTick timer with processor clock
        while((SysTick->CTRL & 0x00010000)==0);        // Wait until count flag is set
        SysTick->CTRL         =0;                         // Disable SysTick
}
然后调用
        while(1)
        {
                        GPIO_SetBits(GPIOE,GPIO_Pin_5);   
                        delay(1000,'m');
                        GPIO_ResetBits(GPIOE,GPIO_Pin_5);  
                        delay(1000,'m');
        }


我希望的是亮一秒然后灭一秒,但是运行起来led灯一秒钟闪4,5下,大家帮忙看看哪里出问题了

开发板:战舰V3,操作系统:Win7 32位旗舰版,Keil版本:5.24a
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-19 15:43:05 | 显示全部楼层
这种延时方法是不太精确的.只能大概延时一下.移植时换个编译器可能时间又不对了.
最好还是采取状态机+软件定时器的做法.
到百度上找找看.
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-19 17:32:12 | 显示全部楼层
晶振是多少的?MCU主频多少?
回复

使用道具 举报

18

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-9-5
在线时间
43 小时
 楼主| 发表于 2018-1-19 17:34:28 | 显示全部楼层
jinfeihan57 发表于 2018-1-19 17:32
晶振是多少的?MCU主频多少?

战舰V3 stm32f103zet6, 主频应该是72M,晶振这个我不懂
开发板:战舰V3,操作系统:Win7 32位旗舰版,Keil版本:5.24a
回复

使用道具 举报

18

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-9-5
在线时间
43 小时
 楼主| 发表于 2018-1-19 17:35:42 | 显示全部楼层
操作系统 发表于 2018-1-19 15:43
这种延时方法是不太精确的.只能大概延时一下.移植时换个编译器可能时间又不对了.
最好还是采取状态机+软件 ...

我用秒表数了一下,现在大概是7秒钟闪20次,误差应该不会这么大,应该是我的代码有问题
开发板:战舰V3,操作系统:Win7 32位旗舰版,Keil版本:5.24a
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2018-1-19 19:06:18 | 显示全部楼层
hopper 发表于 2018-1-19 17:35
我用秒表数了一下,现在大概是7秒钟闪20次,误差应该不会这么大,应该是我的代码有问题

检查一下时间配置,小小延时程序还能有什么问题.一般都是照搬的吧.
回复

使用道具 举报

0

主题

56

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1641
金钱
1641
注册时间
2017-7-15
在线时间
216 小时
发表于 2018-1-19 23:29:11 | 显示全部楼层
系统时钟没有初始化吧。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-20 01:42:17 | 显示全部楼层
仿真找问题
回复

使用道具 举报

18

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2017-9-5
在线时间
43 小时
 楼主| 发表于 2018-1-21 13:45:19 | 显示全部楼层
2018-01-21_134131.png
开发板:战舰V3,操作系统:Win7 32位旗舰版,Keil版本:5.24a
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-22 01:40:22 | 显示全部楼层

说明过了这么多时间。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 11:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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