LED
CT117E开发板LED和LCD共用引脚,在对LED进行操作时除了配置其对应的IO口还要配置锁存器LE端口。
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<<X),给寄存器X位赋1:|=(1<<X)。
BEEP
1.Beep初始化
CT117E开发板的蜂鸣器接的引脚是PB4,这个引脚同时也是连接在JTAG接口的RST引脚。
STM32复位后,PB4引脚默认是作为JTAG接口的RST引脚,因此我们再使用蜂鸣器之前要先把PB4复用回我们的普通IO口。
BEEP初始化函数中应注意:
(1) 要使能复用功能重映射前的PB端口和AFIO端口,使能要在复用之前。
(2) GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //将PB4复用回普通IO口。
(3)GPIO_PinRemapConfig函数内的参数选择见下表:
详见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 --;
}
}
(以上仅个人观点)