>.LED硬件说明
STM32 开发板上的两个LED:LED0 和LED1.如下图:
图2 LED 与STM32 连接原理图
STM32中硬件电路将PB5管脚与LED0灯连接,而另一LED灯LED1则是连接在PE5.
由电路可知,两个LED都是通过灌电流的方式来加电压,所以应将相应的GPIO口配置为输出方式,通过合理的控制其连接的GPIO口的输出电压(置高置低)就能控制灯的闪烁(关于GPIO配置操作请详见GPIO固件库说明文档).
BEEP硬件说明
STM32 开发板上的一个BEEP.如下图:
图1 BEEP与STM32 连接原理图
-------------
-------------
STM32中硬件电路将PB8管脚与BEEP连接,电路中用到NPN三极管
(s8050)来驱动蜂鸣器,三极管主要的功能是放大电流,让电路有足够的电流来驱动蜂鸣器.当PB.8输出高电平时,蜂鸣器开始发声,当PB.8输出低电平时,蜂鸣器停止发声. KEY硬件说明
STM32 开发板上的4个按钮(WK_UP,KEY0,KEY1,KEY2)如下图:
图1 KEY与STM32 连接原理图
STM32中硬件电路将PE4与KEY0连接在按钮按下时电路接地为低
电平, PE3与KEY1连接在按钮按下时电路接地为低电平, PE2与KEY2连接在按钮按下时电路接地为低电平, PA0与WK_UP连接在按钮按下时电路接地为高电平,
由电路可知,本实验通过WK_UP在芯片内部拉低输入模式下 检测高电平时控制键蜂鸣器的开关按键KEY0检测为低时候控制LEDO和LED1同时开关,按键KEY1控制LED1的开关,按键KEY2控制LED0的开关,有关配置GPIO口 (关于GPIO配置操作请详见GPIO固件库说明文档).
-------------
-------------
EXTI说明
STM32开发板有19个外部中断,在外部的IO口上有16个外部中断,分别如下
图 1 GPIO口与外部中断映射图
STM32的IO端对应16个外部中断,GPIOx.0- GPIOx.15其中(x=A,B,C,D,E,F)分别对应中断线,每个中断线最多对应七个IO口,而中断线每次只能连接到一个IO口上去,可在软件中去配置 STM32上的每个IO口可以自由编程,需要以32位的字访问
外部中断软件说明
实验中用到了GPIO固件库函数和LED固件库的函数的总和,在引
用MCU中的头文件后用到的GPIO函数以及LED函数如下 GPIO中的库函数 1) 使能总线时钟
-------------
-------------
void GpioRccEnable(GPIO_TypeDef* GPIOx);
2)配置管脚为输入输出模式
void
GpioConfig(GPIO_TypeDef* GPIOx,uint16_t
GPIO_Pin,GPIOMode_TypeDef mode,GPIOSpeed_TypeDef speed ); 3)设置某一端口为输入输出模式 void
GpioSet(GPIO_TypeDef*
GPIOx,uint16_t
GPIO_Pin,GPIOMode_TypeDef mode,GPIOSpeed_TypeDef speed ); 4)设置输入模式并初始化
void GpioSetInMode(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin ); 5)设置输出模式并初始化 void
GpioSetOutMode(GPIO_TypeDef*
GPIOx,
uint16_t
GPIO_Pin,char init_value); 6)管脚的输出的值
void GpioSetOutValue(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin, char init_value); 7)读取某一管脚的状态 unsigned
char
GpioInReadPinStatus(GPIO_TypeDef*
GPIOx,uint16_t GPIO_Pin); LED中的库函数如下: 1) 初始化函数
void LedInit(char led, char led_init_status); 2) 指定LED灯亮
-------------
-------------
void LedOn(char led); 3) 灭掉指定的LED灯 void LedOff(char led); BEEP中的库函数如下:
//功能: 初始化LEEP,并配置初始状态 void BeepInit(char beep_init_status); //功能: 选定BEEP为开状态 void BeepOn(void); //功能: 选定BEEP为关状态 void BeepOff(void); 按键中的库函数如下: //IO初始化 void KeyInit(void); //按键扫描函数 u8 KeyScan(void);
EXTI库函数如下:
// 功能:使能外部时钟中断函数
void ExtiRccEnable(uint32_t RCC_APB2Periph);
-------------
-------------
// 功能:配置外部中断参数 void
ExtiConfig(uint32_t
line,EXTIMode_TypeDef
mode,EXTITrigger_TypeDef trigger,FunctionalState linecmd); // 功能:外部中断初始化 void ExtiInit(void);
外部中断应用简述
实验中通过外部中断服务函数来检测按键是否按下来控制蜂鸣器和LED灯的亮灭,实验程序如下 #include \"common.h\"
int main() {
Init(); //总初始化 while(1) {
printf(\"\\n外部中断实验\\r\\n\");
-------------
-------------
delay_ms(1000); } }
-------------