OpenEdv-开源电子网

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

定时中断

[复制链接]

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2017-12-2
在线时间
8 小时
发表于 2017-12-2 15:11:13 | 显示全部楼层 |阅读模式
蜂鸣器加入定时中断,为什么蜂鸣器没有响应
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2017-12-2 16:24:41 | 显示全部楼层
怎么个加定时中断法?发个程序和电路图不好吗?
十六进制带我飞。
回复 支持 反对

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2017-12-2
在线时间
8 小时
 楼主| 发表于 2017-12-2 19:04:43 | 显示全部楼层
DreamWaterPro 发表于 2017-12-2 16:24
怎么个加定时中断法?发个程序和电路图不好吗?

int main(void)
{               

        delay_init();                      
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        
        uart_init(115200);         
        BEEP_Init();                             
        TIM3_Int_Init(19999,7199);
           while(1)
        {
                BEEP=!BEEP;
                delay_ms(200);                  
        }         


}         
回复 支持 反对

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2017-12-2
在线时间
8 小时
 楼主| 发表于 2017-12-2 19:06:53 | 显示全部楼层
DreamWaterPro 发表于 2017-12-2 16:24
怎么个加定时中断法?发个程序和电路图不好吗?

#include "timer.h"
#include "beep.h"

void TIM3_Int_Init(u16 arr,u16 psc)
{
          TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
          NVIC_InitTypeDef NVIC_InitStructure;
       
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
          
          
          TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
          TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
          TIM_TimeBaseInitStruct.TIM_Period=arr;
          TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
          TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
       
          TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
       
          
          NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);  
       
          TIM_Cmd(TIM3, ENABLE);  
       
}
void TIMx_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  
                {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  
                BEEP=!BEEP;
                }

}
回复 支持 反对

使用道具 举报

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2017-12-2
在线时间
8 小时
 楼主| 发表于 2017-12-2 19:07:50 | 显示全部楼层
DreamWaterPro 发表于 2017-12-2 16:24
怎么个加定时中断法?发个程序和电路图不好吗?

蜂鸣器可以响,但不能停止
回复 支持 反对

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2017-12-3 08:34:46 | 显示全部楼层
两个地方同时操作一个声音  ,不觉得很乱吗
让我们的思维驾驭在电的速度之上!
回复 支持 反对

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2017-12-3 10:45:20 | 显示全部楼层
wangyi1998 发表于 2017-12-2 19:07
蜂鸣器可以响,但不能停止

建议:主循环也好,定时器中断也好,只保留一个BEEP=~BEEP

否则可能会出现这样的情况:主循环中刚刚把蜂鸣器关闭,然后定时器中断到来又把蜂鸣器打开;然后返回主循环延时200ms,然后主循环又把蜂鸣器关闭,紧接着定时器中断又到来又把蜂鸣器打开

正如6楼所说,两个地方都操作定时器,会使得控制逻辑很混乱。
十六进制带我飞。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 16:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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