野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13134|回复: 13

定时器

[复制链接]
发表于 2017-5-24 14:46:44 | 显示全部楼层 |阅读模式
本帖最后由 lucky-CY 于 2017-5-24 14:48 编辑

我再做定时拍照实验。我用咱们通用定时器的例程,把按键中断去了。下图是中断函数和主函数定时LED灯亮灭。(点亮LED是想先验证定时有没有用)。编译没有错误,但是灯始终没有变化。。我看了time的寄存器,time的值是在变化的。能帮忙解决下,为什么灯没有变化吗?

QQ图片20170524144607.png
QQ图片20170524144544.png
回复

使用道具 举报

发表于 2017-5-24 15:01:16 | 显示全部楼层
time你定义成什么类型的  ,还有 LED的GPIO初始化了没有?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-24 15:05:13 | 显示全部楼层
fire 发表于 2017-5-24 15:01
time你定义成什么类型的  ,还有 LED的GPIO初始化了没有?

LED初始化了。time是按我们例程定义的u32.我在定时器的中断服务函数中点亮LED。LED是会亮的。所以不知道是什么原因。
回复 支持 反对

使用道具 举报

发表于 2017-5-24 15:08:24 | 显示全部楼层
lucky-CY 发表于 2017-5-24 15:05
LED初始化了。time是按我们例程定义的u32.我在定时器的中断服务函数中点亮LED。LED是会亮的。所以不知道 ...

把第一个if的内容去掉 看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-24 15:22:11 | 显示全部楼层
fire 发表于 2017-5-24 15:08
把第一个if的内容去掉 看看

第一个if去掉了,灯可以亮了。但是没有第一个if,怎么拍照呢??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-24 15:30:56 | 显示全部楼层
fire 发表于 2017-5-24 15:08
把第一个if的内容去掉 看看

还有一个问题,VSYNC sd卡 定时器他们的中断优先级怎么设置呢?例程上本来sd卡 抢占优先级 响应优先级分别是 0 0,VSYNC是0 3,按键是 0 1.现在不用按键,用定时器。那优先级怎么设置呢?我是把定时器的优先级设为和按键一样的,其他两个没变。
回复 支持 反对

使用道具 举报

发表于 2017-5-24 15:55:37 | 显示全部楼层
lucky-CY 发表于 2017-5-24 15:30
还有一个问题,VSYNC sd卡 定时器他们的中断优先级怎么设置呢?例程上本来sd卡 抢占优先级 响应优先级分 ...

都试一试,实践出真知。
回复 支持 反对

使用道具 举报

发表于 2017-5-24 16:26:58 | 显示全部楼层
把判断条件 time == 10000 改成 time >= 10000
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-24 16:55:13 | 显示全部楼层
flyleaf 发表于 2017-5-24 16:26
把判断条件 time == 10000 改成 time >= 10000

按你说的改了,但是还是一样。灯没有变化。我现在想的的是,直接在定时器的中断服务函数中,每次中断把screen_flag=1;主函数中还是判断screen_flag的值是否为1来决定拍照。但是问题是,如果直接一个定时器中断,把screen_flag设为1。那定时的时间就特别短。我想把TIM_TimeBaseStructure.TIM_Period=1000;这个1000改大,从而增加定时时间。我试了下,拍照是可以的。但是我设置的定时时间为一分钟。但是实际的拍照时间很短,只有几秒。。这怎么解决。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-24 16:55:41 | 显示全部楼层
fire 发表于 2017-5-24 15:55
都试一试,实践出真知。

我现在想的的是,直接在定时器的中断服务函数中,每次中断把screen_flag=1;主函数中还是判断screen_flag的值是否为1来决定拍照。但是问题是,如果直接一个定时器中断,把screen_flag设为1。那定时的时间就特别短。我想把TIM_TimeBaseStructure.TIM_Period=1000;这个1000改大,从而增加定时时间。我试了下,拍照是可以的。但是我设置的定时时间为一分钟。但是实际的拍照时间很短,只有几秒。。这怎么解决。。
回复 支持 反对

使用道具 举报

发表于 2017-5-24 17:05:50 | 显示全部楼层
这应该把拍照的部分放到定时器判断后的花括号里呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-24 17:08:43 | 显示全部楼层
随风 发表于 2017-5-24 17:05
这应该把拍照的部分放到定时器判断后的花括号里呀

你得意思是把第一个if语句放到if(time==10000)后面??我试过了,还是没什么变化啊。
回复 支持 反对

使用道具 举报

发表于 2017-5-29 22:59:02 | 显示全部楼层
lucky-CY 发表于 2017-5-24 17:08
你得意思是把第一个if语句放到if(time==10000)后面??我试过了,还是没什么变化啊。

定义一个变量count,先定时计数,记到中断后让count++,如果每次定时器中断后能及时20ms,那么让count>=50时再进行拍照,这样就是1s拍一次
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-2 09:26:57 | 显示全部楼层
渔舟唱晚 发表于 2017-5-29 22:59
定义一个变量count,先定时计数,记到中断后让count++,如果每次定时器中断后能及时20ms,那么让count>=50 ...

我程序中的time就是你说的count,就是这样做的啊。。但是就是不对
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-16 02:43 , Processed in 0.029600 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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