蓝桥杯嵌入式CT117E硬件开发平台经验分享05 | 蜂鸣器控制

蓝桥杯嵌入式CT117E硬件开发平台 | 蜂鸣器操作

关于蜂鸣器操作,基本上就是控制蜂鸣器连接的三极管是高电平导通还是低电平导通的问题,本次使用的开发板为PNP三极管,低电平导通,只需将三极管连接的GPIO赋值为低电平就可以控制蜂鸣器工作。但是注意的是由于蜂鸣器对应的三极管基极接到的是PB4,JTAG工作口,所以需要重映射一下。具体代码实现如下所示:

****** 注:
	CT117E V1.0版本
	调试程序前,需将PB4-Buzzer跳线(蓝色)取下,待程序调试结束后,
	再接好跳线。
	PB4引脚上电默认为JTAG-RST引脚。 
	
	CT117E V1.1版本	 -----本次使用的版本
注意事项: 下载本程序后,将JTAG引脚重映射的普通IO功能,可能使得
	下载功能失效,恢复的方法是:
	
	1.按住板子上的RESET按键
	2.点击REALVIEW MDK软件上的DOWNLOAD按钮
	3.直到此时,松开板子上的复位按键,自动完成程序下载
	
	下载功能恢复后,以后再下载代码则不需要此过程。当然,若是驱动蜂鸣器,则还需要按照此方法重新下载。
* 日期版本:2020-10-16  V1.0
*******************************************************************************/
/**
  * @说明     配置蜂鸣器IO
  * @参数     问题说明:由于PB4的复位功能是JTRST(JTAG复位),所以初始化时必须先
  配置引脚映射函数GPIO_PinRemapConfig()禁用JTRST功能,而引脚映射通过AFIO实现,因此还必须允许AFIO时钟
* @参数     None
  * @返回值   None
  */
void BUZ_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	//允许AFIO和GPIOB时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

	GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); //PB4 重映射
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	//Buzzer
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
	GPIO_Init(GPIOB, &GPIO_InitStructure);//更改虽有JTAG引脚状态
}
/**
  * @说明     配置蜂鸣器IO
  * @参数     问题说明:ct117e版本不一样,用的三极管驱动型号不一样,本版本(V1.1)为低电平驱动
  * @参数     None
  * @返回值   None
  * /**
  * @说明     STATE_ENUM类型需要包含#include "Def_config.h"
    ***/
  * typedef enum{		
	OFF = 0,
	ON = 1,
	REVERSE = 2
    }STATE_ENUM;
  */
void BUZ_Control(STATE_ENUM BUZ_Status)
{
	uint8_t BUZ_Buff=0x00;
    if(BUZ_Status == OFF){
        GPIO_SetBits(GPIOB,GPIO_Pin_4);
    }  
	else if(BUZ_Status == ON){
        GPIO_ResetBits(GPIOB,GPIO_Pin_4); 
    }  	
    else 
    {
     //蜂鸣器没有和别的外设共用PB4,所以可以读取GPIO状态而不怕会受影响
        BUZ_Buff = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4); 
        if(BUZ_Buff == Bit_RESET)  //buz 口为0,表示buz开着, 反转则需要关闭
        {
            GPIO_SetBits(GPIOB,GPIO_Pin_4);
        }
        else{
            GPIO_ResetBits(GPIOB,GPIO_Pin_4);           
        } 
    }
}

你可能感兴趣的:(单片机嵌入式,单片机,嵌入式,stm32)