项目二:运用定时器中断实现蜂鸣器定时响

项目功能:使蜂鸣器每2秒交替响;

一、基本流程

二、相关库函数

 

 

 三、电路图

 

 四、代码实现

 bluzze.c

#include "bluzze.h"
#include "delay.h"
void bluzze_init(void)
{
	//定义GPIO_A初始化的结构体
	GPIO_InitTypeDef GPIO_InitStruct_A;
	//打开PA管脚的时钟
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
	//配置PA的参数
	GPIO_InitStruct_A.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStruct_A.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
	GPIO_InitStruct_A.GPIO_Speed=GPIO_Speed_50MHz;
	//初始化PA管脚
	GPIO_Init(GPIOA, &GPIO_InitStruct_A);
	//最开始将蜂鸣器和风扇的电机关闭(防止其属于浮空转态不稳定)
	GPIO_SetBits(GPIOA, GPIO_Pin_0);
	GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
void time2_init(void)
{
	//定义TIME_2初始化的结构体
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct_TIME2;
	//打开定时器2的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	//配置TIME_2的参数
	TIM_TimeBaseInitStruct_TIME2.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStruct_TIME2.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct_TIME2.TIM_Period=7199;
	TIM_TimeBaseInitStruct_TIME2.TIM_Prescaler=19999;
	//初始化TIME_2
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct_TIME2);
  //定义NVIC初始化的结构体
	NVIC_InitTypeDef NVIC_InitStruct;
	//中断分组
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
	//配置NVIC的参数
	NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
	//中断NVIC的初始化
	NVIC_Init(&NVIC_InitStruct);
	//清除定时器TIME_2更新中断标志
	TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	//开启定时器TIME_2的中断
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	//使能定时器TIME_2
	TIM_Cmd(TIM2,ENABLE );
}
int i=0;
void TIM2_IRQHandler()   //TIM2中断
{    
    if (TIM_GetITStatus(TIM2, TIM_IT_Update))//检查TIM2更新中断发生与否
        {
					 
		      if(i==0)
					{
         GPIO_ResetBits(GPIOA, GPIO_Pin_0);//蜂鸣器响
						i=1;//参数改变
					}
					else if(i==1)		
					{
						GPIO_SetBits(GPIOA, GPIO_Pin_0);//蜂鸣器不响
						i=0;//参数改变
					}
						TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清除TIM2更新中断标志 
				}
}

.bluzze.h

#ifndef __BLUZZE_H
#define __BLUZZE_H

#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

void bluzze_init(void);
void time2_init(void);

#endif

main.c

#include "bluzze.h"
#include "time.h"
#include "stdio.h"
#include "delay.h"
#include "stm32f10x.h"
#include "stm32f10x_tim.h"
 u8 UART3_data,UART1_data;
 u8 UART3_rcv[20],UART3_rcv_count;
 u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;
int main(void)
{
 
	bluzze_init();//蜂鸣器初始函数
	time2_init();//定时器2初始函数
	while(1)
	{
	}

}

猜你喜欢

转载自blog.csdn.net/qq_47541315/article/details/120019805