OpenEdv-开源电子网

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

STM32F0怎么实现30s左右的延时

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-4
在线时间
3 小时
发表于 2019-4-4 17:28:30 | 显示全部楼层 |阅读模式
1金钱
想用STM32F0的板子做个人体感应的灯,感应到人体离开之后一段时间灯才灭,大概10-30s但是自己写的程序只能延时1-2s。不知道怎么延长时间,有没有大佬能指点一下的。


最佳答案

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

可以用定时器做(1s一次更新中断),定义一个全局变量,在定时器的更新中断中让全局变量自加。自加到10的时候表示延时,然后再外部判断全局变量是否为10以达到是否延时10s 还有一种方法参考 http://www.openedv.com/forum.php?mod=viewthread&tid=275994
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-4-4 17:28:31 | 显示全部楼层
可以用定时器做(1s一次更新中断),定义一个全局变量,在定时器的更新中断中让全局变量自加。自加到10的时候表示延时,然后再外部判断全局变量是否为10以达到是否延时10s
还有一种方法参考
http://www.openedv.com/forum.php?mod=viewthread&tid=275994
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-4
在线时间
3 小时
 楼主| 发表于 2019-4-8 15:02:32 | 显示全部楼层
peng1554 发表于 2019-4-4 17:28
可以用定时器做(1s一次更新中断),定义一个全局变量,在定时器的更新中断中让全局变量自加。自加到10的时 ...

写完函数调用在灯光控制前面,被控制的灯会出现降低亮度并闪烁的情况,就和之前的延时函数超时一样的反应。求问答主怎么解决。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-4
在线时间
3 小时
 楼主| 发表于 2019-4-8 15:05:21 | 显示全部楼层
peng1554 发表于 2019-4-4 17:28
可以用定时器做(1s一次更新中断),定义一个全局变量,在定时器的更新中断中让全局变量自加。自加到10的时 ...

对了我的不是开发板,就是芯片自己焊接的电路,外接了一个8m的晶振。
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-4-8 18:34:18 | 显示全部楼层
沐白墨 发表于 2019-4-8 15:05
对了我的不是开发板,就是芯片自己焊接的电路,外接了一个8m的晶振。

也能参考使用,只要你那边的延时函数没问题
回复

使用道具 举报

0

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2019-4-9
在线时间
7 小时
发表于 2019-4-11 10:04:13 | 显示全部楼层

我觉得最简单的解决办法是:
void delay_100ms(__IO u16 nms)
{
        u16 i;
        for(i=0;i<nms;i++)
        {
        delay_ms(100);
        }
}
稍微改改延时100年都行
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-4-11 13:49:55 | 显示全部楼层
otto1230 发表于 2019-4-11 10:04
我觉得最简单的解决办法是:
void delay_100ms(__IO u16 nms)
{

延时不了那么久
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-4-11 13:50:35 | 显示全部楼层
otto1230 发表于 2019-4-11 10:04
我觉得最简单的解决办法是:
void delay_100ms(__IO u16 nms)
{

delay函数最多可以延时几秒钟好像..
回复

使用道具 举报

8

主题

155

帖子

0

精华

高级会员

Rank: 4

积分
754
金钱
754
注册时间
2011-11-12
在线时间
155 小时
发表于 2019-4-11 14:25:31 | 显示全部楼层
定时器延时,妥妥的
回复

使用道具 举报

0

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2019-4-9
在线时间
7 小时
发表于 2019-4-11 17:40:37 | 显示全部楼层
1599064432 发表于 2019-4-11 13:50
delay函数最多可以延时几秒钟好像..

你到底有没有仔细看
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-4-12 08:53:20 | 显示全部楼层
otto1230 发表于 2019-4-11 17:40
你到底有没有仔细看

??????????
回复

使用道具 举报

0

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2019-4-9
在线时间
7 小时
发表于 2019-4-12 10:01:02 | 显示全部楼层
1599064432 发表于 2019-4-12 08:53
??????????

仔细看代码,请
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-2-26
在线时间
10 小时
发表于 2019-4-12 13:14:47 来自手机 | 显示全部楼层
otto1230 发表于 2019-4-11 10:04
我觉得最简单的解决办法是:
void delay_100ms(__IO u16 nms)
{

但是这样的话执行时间就长了吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 16:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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