stm32固件库之读取按键

发布者:beta13最新更新时间:2025-02-07 来源: jianshu关键字:stm32  固件库  读取按键 手机看文章 扫描二维码
随时随地手机看文章

//按键接下拉4.7k  上升沿中断.按键上并联104电容抗抖动
//引脚定义
/*******************************************************/

define KEY1_PIN                  GPIO_Pin_0

define KEY1_GPIO_PORT            GPIOA

define KEY1_GPIO_CLK             RCC_AHB1Periph_GPIOA

define KEY2_PIN                  GPIO_Pin_13

define KEY2_GPIO_PORT            GPIOC

define KEY2_GPIO_CLK             RCC_AHB1Periph_GPIOC

/*******************************************************/

/** 按键按下标置宏
* 按键按下为高电平,设置 KEY_ON=1, KEY_OFF=0
* 若按键按下为低电平,把宏设置成KEY_ON=0 ,KEY_OFF=1 即可
*/

define KEY_ON  1

define KEY_OFF 0

======================
/// 不精确的延时
void Key_Delay(__IO u32 nCount)
{
for(; nCount != 0; nCount--);
}

/**

  • @brief  配置按键用到的I/O口

  • @param  无

  • @retval 无
    */
    void Key_GPIO_Config(void)
    {
    GPIO_InitTypeDef GPIO_InitStructure;

    /开启按键GPIO口的时钟/
    RCC_AHB1PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK,ENABLE);

/选择按键的引脚/
GPIO_InitStructure.GPIO_Pin = KEY1_PIN;

/设置引脚为输入模式/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

/设置引脚不上拉也不下拉/
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

/使用上面的结构体初始化按键/
GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);

/选择按键的引脚/
GPIO_InitStructure.GPIO_Pin = KEY2_PIN;

/使用上面的结构体初始化按键/
GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);
}

/**

  • @brief   检测是否有按键按下

  • @param  GPIOx:具体的端口, x可以是(A...K)

    • @param  GPIO_PIN:具体的端口位, 可以是GPIO_PIN_x(x可以是0...15)

  • @retval  按键的状态

  • @arg KEY_ON:按键按下
  • @arg KEY_OFF:按键没按下

/
uint8_t Key_Scan(GPIO_TypeDef GPIOx,uint16_t GPIO_Pin)
{
/*检测是否有按键按下 /
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )
{
/等待按键释放 */
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);
return  KEY_ON;
}
else
return KEY_OFF;
}

==================
int main(void)
{
Key_GPIO_Config();


/* 轮询按键状态,若按键按下则反转LED */ 

while(1)                            

{      

    if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  )

    {

        /*LED1反转*/

        LED1_TOGGLE;

    }   


if( Key_Scan(KEY2_GPIO_PORT,KEY2_PIN) == KEY_ON  )

    {

        /*LED2反转*/

        LED2_TOGGLE;

    }   

}


关键字:stm32  固件库  读取按键 引用地址:stm32固件库之读取按键

上一篇:STM32驱动DS18B20温度传感器例程(OLED显示)
下一篇:stm32 :No section matches selector- no section to be FIRST/LAST

推荐阅读最新更新时间:2026-03-24 07:29

stm32固件库读取按键
//按键接下拉4.7k 上升沿中断.按键上并联104电容抗抖动 //引脚定义 /*******************************************************/ define KEY1_PIN GPIO_Pin_0 define KEY1_GPIO_PORT GPIOA define KEY1_GPIO_CLK RCC_AHB1Periph_GPIOA define KEY2_PIN GPIO_Pin_13 define KEY2_GPIO_PORT GPIOC define KEY2_GPIO_CLK RCC_AHB1Pe
[单片机]
STM32的GPIO输入编程实例之读取按键状态
一、概述 1、按键简介 按键是一种机械器件,按键两端分别对应某电路的两个断点,我们可以通过按键接通和断开控制该电路的电压等参数,我们利用按键做的应用通常有控制继电器、键盘、复位等。随着应用的扩展,按键已成为电路板上不可或缺的一部分。 2、按键类别简介 按键主要有四种类型:常开带复位、常开不带复位、常闭带复位、常闭不带复位。(本次实验使用的是常开带复位按键) 按键主要有以下4种工作模式: 常开带复位:初始默认状态是开路,当受力按下时按键使电路连通,受力结束后其自动返回开路状态。 常开带不复位:初始默认状态是开路,每按下一次按键改变一次开闭状态。 常闭带复位:初始默认状态是连通,当受力按下时按键使电路开路,受力结束后其自动返回
[单片机]
stm32固件库Bitbang操作
// GPIO 位操作 #include stm32f4xx.h // 这里只定义了 GPIO ODR和IDR这两个寄存器的位带别名区地址,其他寄存器的没有定义 //SRAM 位带区: 0X2000 0000~0X200F 0000 //SRAM 位带别名区:0X2200 0000~0X23FF FFFF //外设 位带区: 0X4000 0000~0X400F FFFF //外设 位带别名区:0X4200 0000~0X43FF FFFF // 把“位带地址+位序号”转换成别名地址的宏 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+
[单片机]
stm32固件库SPI操作
野火25Q128.JPG ''' /* Private typedef -----------------------------------------------------------*/ //#define sFLASH_ID 0xEF3015 //W25X16 //#define sFLASH_ID 0xEF4015 //W25Q16 //#define sFLASH_ID 0XEF4017 //W25Q64 define sFLASH_ID 0XEF4018 //W25Q128 //#d
[单片机]
stm32固件库I2C操作
野火eeprom.JPG /* AT24C01/02每页有8个字节 */ #define I2C_PageSize 8 /* AT24C04/08A/16A每页有16个字节 */ //#define I2C_PageSize 16 /* STM32 I2C 快速模式 */ #define I2C_Speed 400000 /* 这个地址只要与STM32外挂的I2C器件地址不一样即可 */ #define I2C_OWN_ADDRESS7 0X0A /*I2C接口*/ #define EEPROM_I2C I2C1 #define EE
[单片机]
STM32固件库
很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为STM32F103ZE。虽然以前做过大概半年的stm32的开发,现在天天在.net平台下写代码,已经忘记的差不多,恰逢周末,补补课,以后用的时候也方便点。 ST推出的FW大大提高了单片机SW的开发效率,所以在新建工程前先来了解下这个SDK。我使用的是最新的v3.5固件库,这个固件库可以分为三个部分: 1、内核支持(..STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport) 2、硬件系统支持(..STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSI
[单片机]
壹拾肆:矩阵按键读取
扫描方法 1)逐行逐列扫描法(K6被按下) 比如说现在 K6 按下,那怎么知道哪个按下了呢? 首先第0行输出低电平0,其他行输出高电平1,所有列输出高电平,此时发现每一列的引脚仍然为高,说明第0行没有被按下。然后第1行输出低电平0,其他行输出高电平1,所有列输出高电平,发现第2列变成了低电平。可知第1行第2列有按键按下。(K6) 2)行列反转法(K6被按下) 首先让第0行,第1行,第2行,第3行,一次性输出0,0,0,0,而第0列,第1列,第2列,第3列跟51单片机相连的引脚全部拉高(1),之后读取第0列,第1列,第2列,第3列的电平,得到的是列的编码(1,1,0,1);然后第0列,第1列,第2列,第3列全置0,把行
[单片机]
壹拾肆:矩阵<font color='red'>按键</font>的<font color='red'>读取</font>
STM32固件库使用USART
1.USART的配置 (1)关键结构体 GPIO_InitTypeDef USART_InitTypeDef NVIC_InitTypeDef//用于接收的中断 1.1USART的TX在PA9,RX在PA10. 2.时钟线 2.1 USART时钟挂载在APB2上 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//配时钟 3.代码段 3.1(单发送) void usart_init(void){ GPIO_InitTypeDef gpio_
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved