基于STM32利用按键点亮LED灯

基于STM32利用按键点亮LED灯的基本步骤:

(1)打开stm32CubeMX,创建新工程文件

(2)选择需要的芯片,本次实验采用的是STM32F411RETx

(3)黄色代表可被使用的引脚,绿色代表已被确定功能的引脚。左侧设置栏中的红色部分表示:IO口复用造成的重叠,以至不能继续使用。

(4)选好芯片,设置好相关系数参量后,选择与keil5相对应的MDK—ARM V5。

源程序:

1.按键按下LED灯点亮

int main
{
 if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == 0){
        HAL_Delay(10);     //延时去抖
        if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == 0){     //判断是否有键按下,有则亮
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
        }else{
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
        }
    }
}

2.按键按下,LED灯亮1s后熄灭

int main
{
  if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == 0){
        HAL_Delay(10);
        if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == 0){              //判断时候有键按下
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
HAL_Delay(1000); //按键按下后灯亮1S
        }else{
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
        }
    }
}

3.按键按下LED点亮,再按键LED熄灭

int main{
 if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == 0)
 {
   HAL_Delay(100);  //延时去抖
       if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == 0) {        //判断是否有键按下
       //功能代码处
       HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);              //有键按下就反转
       //功能代码处
       while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == 0);
       }
    }
 }


 配置引脚的初始化电平

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);


  /*Configure GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

 
  /*Configure GPIO pin : PA5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  • 18
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103是一款基于ARM Cortex-M3内核的微控制器,常用于嵌入式系统设计中。要通过它控制LED并响应按键输入,你可以按照以下步骤操作: 1. **硬件连接**: - 将LED的一端连接到STM32的GPIO输出口(例如PA8或PB6),另一端接地或接电源。 - 将按键连接到STM32的GPIO输入口,并启用上拉或下拉电阻模式以便正确读取按键状态。 2. **初始化GPIO**: - 在STM32 HAL库中,对GPIO进行初始化,设置LED按键对应的GPIO口为推挽输出(对于LED)或输入模式(对于按键)。 3. **配置中断**: - 如果使用的是中断方式,为按键的GPIO口配置上升沿或按下触发中断,当按键按下时,程序会收到中断请求。 4. **编写主循环**: - 在`main()`函数里,创建一个无限循环。在循环内部,检查按键的状态,如果按键被按下,就点亮LED,松开时熄灭LED。 ```c while (1) { if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)) { // 按键未按下,LED亮 GPIO_SetOutputHigh(&GPIOA->ODR, GPIO_Pin_8); // LED设为高电平(亮) } else { // 按键按下,LED灭 GPIO_SetOutputLow(&GPIOA->ODR, GPIO_Pin_8); } HAL_Delay(100); // 程序稍作延时,避免快速开关闪烁 } ``` 5. **添加中断处理函数**: - 编写一个处理按键中断的函数,在这里更新按键状态并控制LED。 ```c void EXTI0_IRQHandler(void) { if (__HAL_GPIO_EXTI_GET_IT(GPIOA, GPIO_Pin_8)) { __HAL_GPIO_EXTI_CLEAR_IT(GPIOA, GPIO_Pin_8); // ... 更新按键状态并切换LED状态 } } ``` 6. **启用中断**: - 在初始化GPIO后,别忘了开启相应的中断源。 记得在实际项目中添加错误检查和适当的错误处理代码。以上是一个基本示例,实际应用可能需要结合具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值