当前位置: 首页 > news >正文

STM32学习笔记

实现按键控制LED灯

前置知识:

基本的GPIO

  • 输入模式:读取外部信号(如按键、传感器状态)。——主要用到上拉输入
  • 输出模式:向外部输出信号(如控制 LED、继电器)。——主要用到推挽输出
  • 其他模式:模拟输入、复用功能(如 USART、I2C)等。

按键的知识与常识

  • 按键未按下:GPIO 引脚通过上拉电阻连接到 VCC,读取为高电平(1)
  • 按键按下:按键将 GPIO 引脚直接接地,读取为低电平(0)

有关LED的代码部分

执行文件.c

#include "stm32f10x.h"                  // Device header//LED的初始化函数
void LED_Init(void)
{//时间时钟函数RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//设置GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;//设置为推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//setbits是使它值为1(高电平)GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
}void LED1_ON(void){GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}void LED1_OFF(void){GPIO_SetBits(GPIOA,GPIO_Pin_1);
}void LED1_Turn(void){if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0) {GPIO_SetBits(GPIOA,GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}
}
void LED2_ON(void){GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}void LED2_OFF(void){GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
void LED2_Turn(void){if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0) {GPIO_SetBits(GPIOA,GPIO_Pin_2);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_2);}
}

 头文件.h

#ifndef __LED_H
#define __LED_Hvoid LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED1_Turn(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED2_Turn(void);#endif

有关按键部分:

执行文件.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void Key_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);
}
/*
按键未按下:GPIO 引脚通过上拉电阻连接到 VCC,读取为高电平(1)。
按键按下:按键将 GPIO 引脚直接接地,读取为低电平(0)。
*/
uint8_t Key_GetNum(void){uint8_t KeyNum = 0;if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0)Delay_ms(20);KeyNum =1;}if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0)Delay_ms(20);KeyNum =2;}return KeyNum;
}

头文件.h

#ifndef __KEY_H
#define __KEY_Hvoid Key_Init(void);
uint8_t Key_GetNum(void);#endif

main.c

#include "stm32f10x.h"
#include "Delay.h"
#include "LED.h"
#include "Key.h"uint8_t KeyNum;int main(void)
{//主函数初始化LED_Init();Key_Init();while(1){//进入循环后,获取按键状态KeyNum = Key_GetNum();if(KeyNum == 1){LED1_Turn();}if(KeyNum == 2){LED2_Turn();}}
}

相关文章:

  • 全链接神经网络,CNN,RNN各自擅长解决什么问题
  • DataWhale-零基础络网爬虫技术(三、爬虫进阶技术)
  • 使用 catthehacker/ubuntu Docker 镜像部署 GitHub Actions 本地运行环境
  • SpringSecurity6(认证-前后端分离)
  • MATLAB GUI界面设计 第四章——图像的绘制与显示
  • 电路图识图基础知识-塔式起重机控制电路识图与操作要点(三十五)
  • 深入解析 Windows 文件查找命令(dir、gci)
  • 窗口函数的概念
  • 为什么android要使用Binder机制
  • 顶级思维方式——认知篇九(经典语录)《约翰·克利斯朵夫》
  • LangChain4j从入门到实战(一)
  • DeepSeek今天喝什么随机奶茶推荐器
  • [C#] Task
  • 飞算 JavaAI:重构 Java 开发范式的工程化实践
  • Prim(普里姆)算法
  • 网络/信号/电位跟踪
  • 嘉讯科技:医院电子病历系统的关键性作用
  • 60天python训练计划----day56
  • 深入浅出Node.js后端开发
  • UE5 AnimMontage 的混合(Blend)模式
  • 苏州做视频网站广告公司/百度关键词优化
  • 青州网站开发/商丘seo公司
  • 云南免费网站建设/网络营销推广的概念
  • 软件系统网站建设/个人免费网上注册公司
  • 企业如何做网站推广/网络营销策划推广公司
  • 用流媒体做的电台网站/亚马逊的免费网站