【晒心得】STM32F03开发板--按键操作(库函数)
昨天用配置寄存器的方法来点亮LED灯,感觉还是有点麻烦。既然官方提供了固件库,那就好好利用吧!接下来我试验按键控制点亮LED。
上面是B1按键的原理图,从图中可以看出按键接到了端口PA0。学过51单片机的学过怎么来操作按键输入,按键控制分为两种情况:一种为按键扫描,这种方式CPU会不停地工作,一直在查询GPIO口的状态,是高电平还是低电平。另外一种是中断控制,这种方式CPU占用低,效率高,CPU可以处理其他事情。
按键扫描程序:
- #include "stm32f0xx.h"
- #include "stm32f0xx_rcc.h"
- #include "stm32f0xx_gpio.h"
-
- GPIO_InitTypeDef GPIO_InitStructure;
- /*KEY按键端口PA0配置*/
- void KEY_Init()
- {
- /* 使能PA0时钟 */
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- /* 配置 PA0 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; /*!< GPIO Input Mode */
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- /*LED按键端口PC9配置*/
- void LED_Init()
- {
- /* 使能PC9时钟 */
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
- /* 配置 PC9 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; /*!< GPIO Input Mode */
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- }
- /*延时函数*/
- void Delay(uint32_t temp)
- {
- for(; temp!= 0; temp--);
- }
- /*按键扫描函数*/
- uint8_t KEY_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
- {
- if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 ) //检测是否有按键按下
- {
- Delay(10000); //延时消抖
- if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0 )//检测是否有按键按下
- {
- while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == 0); //等待按键释放
- return 0 ;
- }
- else
- return 1;
- }
- else
- return 1;
- }
- int main(void)
- {
- KEY_Init();//按键初始化
- LED_Init();//led 初始化
- while(1)
- {
- if(KEY_Scan(GPIOA, GPIO_Pin_0) == 0)//判断按键是否按下
- {
- //GPIO_SetBits(GPIOC, GPIO_Pin_9);
- GPIO_WriteBit(GPIOC, GPIO_Pin_9,
- (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_9))));//反转 led 灯
- }
- else
- {
- GPIO_SetBits(GPIOC, GPIO_Pin_8);
-
- }
- }
- }
复制代码