|
目的——理解按键控制LED灯亮灭程序原理 Bsp.key.c和bsp.key.h两个板级支持包导入到user文件夹内 \USER\stm32f10x_conf.h文件内 #include "stm32f10x_gpio.h" GPIO头文件 #include "stm32f10x_rcc.h" RCC时钟控制寄存器" 这两个外设头文件需要包含进去 在keil中将target option 里面的c/c++中的include paths添加user\key\ 现在进入main.c函数 因为是按键点亮led灯,所以头文件需要包括stm32f10x.h文件,还有led与key的.h文件 三个头文件需要包含进去 Led灯初始化配置(上一讲有详细笔记) 点亮led灯(带参宏对GPIOB Pin0的控制) 按键初始化 Key_GPIO_Config(); 进入bsp.key.c文件可以看到 key_GPIO_Config();的详细配置 GPIO_InitTypeDefGPIO_InitStructure; GPIO初始化 固件库P126 /*Initialize the GPIO Init Structure parameters */; 初始化GPIO的初始结构参数
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure); 使能按键端口GPIOC端口的时钟,就是APB2外设总线时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); 固件库P208 /*Enable GPIOA, GPIOB and SPI1 clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_SPI1,ENABLE); 设置引脚P13 GPIO_InitStructure.GPIO_Pin= GPIO_Pin_13; GPIO上拉输入 GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU; ????? GPIO_Init(GPIOC,&GPIO_InitStructure); 端口配置例程 固件库P125 /*Configure all the GPIOA in Input Floating mode */ 配置GPIOA所有在浮点输入模式下的端口
GPIO_InitTypeDef GPIO_InitStructure; 首先初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; 第二配置Pin引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 第三引脚速率(因为是输入,可以不用配置)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 第四配置输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure); 进入循环 while(1) { if( Key_Scan(GPIOC,GPIO_Pin_13) == KEY_ON ) { /*LED1反转*/ LED1_TOGGLE; } } 进入Key_Scan定义可以在bsp.key.c文件中看到 uint8_tKey_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin) 固件库p128 voidGPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) 设定制定的数据端口位 流程 file:///C:/Users/YLenovo/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png 读取制定的端口输入(就是检测有没有按键按下) GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY ON 若为真,则判定KEYON 设定一个延时程序消除抖动引起的按键 第二次判定是否按键按下 if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_ON 若为真,则进入按键释放检测循环 当读取GPIO端口输入为真时,说明还没有放开按键,继续循环 while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_ON); return KEY_ON; 若放开按键则返回值KEY OFF(此时灯灭)
|