蓝桥杯嵌入式总结(LED、BEEP)

LED

CT117E开发板LED和LCD共用引脚,在对LED进行操作时除了配置其对应的IO口还要配置锁存器LE端口。
蓝桥杯嵌入式总结(LED、BEEP)_第1张图片

LED初始化函数中应注意:

(1) 使能PC、PD端口时钟。

(2) LED的GPIO口为PC7~PC15,锁存器LE端口为PD2。

(3) 给GPIOC的多个端口配置:GPIO_InitStructure.GPIO_Pin |= 0XFF00; 赋值方式为‘|=’保证对 PC0~PC6的口不产生影响。

(4) LED端口低电平有效,每次点亮LED时,要打开和关闭锁存器的LE端口,该操作均为位操作,
给寄存器X位赋0:&= ~(1<

BEEP

1.Beep初始化

CT117E开发板的蜂鸣器接的引脚是PB4,这个引脚同时也是连接在JTAG接口的RST引脚。
蓝桥杯嵌入式总结(LED、BEEP)_第2张图片

STM32复位后,PB4引脚默认是作为JTAG接口的RST引脚,因此我们再使用蜂鸣器之前要先把PB4复用回我们的普通IO口。
在这里插入图片描述

BEEP初始化函数中应注意:

(1) 要使能复用功能重映射前的PB端口和AFIO端口,使能要在复用之前。

(2) GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //将PB4复用回普通IO口。

(3)GPIO_PinRemapConfig函数内的参数选择见下表:
蓝桥杯嵌入式总结(LED、BEEP)_第3张图片

详见STM32中文参考手册:8.3 复用功能I/O和调试配置(AFIO)

2.Beep响一段时间

用按键1控制蜂鸣器响100ms

Beep.h
#define BeepOn() GPIOB->ODR &= ~(1<<4)
#define BeepOff() GPIOB->ODR |= (1<<4)

main.c
u32 Beep_Num = 100; //蜂鸣器响的时间ms
u8 Beep_Flag = 0; //蜂鸣器响的标志位

int main(void)
{
	KEY_Init();		
	BEEP_Init();
	while(1)
	{
		if(KEY_FLAG) //按键扫描
		{
			KEY_FLAG = 0;	
			KEY_Reading();
		}
		
		if(trg == 0x01)
		{
			Beep_Flag = 1;
		}
		
		if(Beep_Flag == 1)//蜂鸣器响100ms
		{
			if(Beep_Num == 0)
			{
				BeepOff();
				Beep_Flag = 0;
				Beep_Num = 100;
			}
			else
			{
				BeepOn();
			}
		}
	}
}

stm32f10x_it.c
extern u8 KEY_FLAG //按键扫描标志位;
extern u8 Beep_Flag;
extern u32 Beep_Num;

void SysTick_Handler(void)
{
	static u8 Key_Num = 0;
	TimingDelay--;
	if(++Key_Num == 50)
	{
		Key_Num = 0;
		KEY_FLAG = 1;
	}
	if(Beep_Flag == 1)
	{
		Beep_Num --;
	}
}

(以上仅个人观点)

你可能感兴趣的:(蓝桥杯,嵌入式,stm32)