OpenEdv-开源电子网

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

用定时器和按键搭配组成一个检测按键时长的问题

[复制链接]

5

主题

9

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-3-29
在线时间
0 小时
发表于 2015-4-13 21:44:09 | 显示全部楼层 |阅读模式
5金钱
-------------------------------------------------------------主程序--------------------------------------------------------------------------------------------------------
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "timer.h"


int main(void)
{
Stm32_Clock_Init(9);
KEY_Init();
LED_Init();
delay_init(72);
uart_init(72,9600);
TIM3_Int_Init(5000,7199);
while(1)
{
KEY_Scan(1);
if(KEY0==0)
{
delay_ms(10);
if(KEY0==0)
{
TIM3->CR1|=0x01;
TIM3->DIER|=1<<0;
while(!KEY0);
}
}

}
}
-------------------------------------------------------------定时器3-------------------------------------------------------------------
#include "timer.h"
#include "led.h"
#include "delay.h"
#include "usart.h"
u16 times=0;

void TIM3_IRQHandler(void)
{
if(TIM3->SR&0x0001)
times++;
if(times==4)LED1=0;
if(times==9)
{
LED0=0;
LED1=1;
}
if(times%1==0)
printf("\r\n %d秒\r\n",times);
delay_ms(1000);
TIM3->SR&=0x0000;

}
void TIM3_Int_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;
TIM3->ARR=arr;
TIM3->SC=psc;
TIM3->CR1|=0x00;
TIM3->DIER|=0<<0;
MY_NVIC_Init(1,3,TIM3_IRQn,2);
}


有劳各位大神帮小弟看一下是怎么了 为什么我松手了 定时器还是不断会计数
我明明在初始化里面关闭计时使能了啊

最佳答案

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

你这肯定不行的了     你仔细想想   先执行  TIM3->CR1|=0x01; 然后执行  TIM3->CR1|=0x00;    TIM3->CR1的值究竟变了没?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-4-13 21:44:10 | 显示全部楼层
你这肯定不行的了    
你仔细想想   先执行  TIM3->CR1|=0x01;
然后执行  TIM3->CR1|=0x00;   
TIM3->CR1的值究竟变了没?
回复

使用道具 举报

5

主题

9

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-3-29
在线时间
0 小时
 楼主| 发表于 2015-4-13 21:44:10 | 显示全部楼层
回复【4楼】lycreturn:
---------------------------------
明白 犯了一个傻逼的错误 应该是TIM3->CR1&=0X00
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-4-13 22:15:13 | 显示全部楼层
你的按键检测内容是: KEY0按下,开启定时器,但你松开后并没执行 关闭定时器,当让会继续计数
回复

使用道具 举报

5

主题

9

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2015-3-29
在线时间
0 小时
 楼主| 发表于 2015-4-13 22:20:16 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
if(KEY0==0)
{
TIM3->CR1|=0x01;
TIM3->DIER|=1<<0;
while(!KEY0);
TIM3->CR1|=0x00;
TIM3->DIER|=0<<0;
}

这样还是不行 没办法关闭
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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