STM32_GPIO之按键输入

发布者:心灵清澈最新更新时间:2018-07-21 来源: eefocus关键字:STM32  GPIO  按键输入 手机看文章 扫描二维码
随时随地手机看文章

/* 

名称:STM32_GPIO之按键输入 

说明:这个实验是GPIO的输入功能。基本的思路和51单片机差不多。也是 

操作相应的IO口,不过不同的是对于独立按键输入实验来说,51单片机是 

需要一开始把待检测的IO口设置成高电平,然后检测其何时被拉低。而对 

于STM32来说,其GPIO端口就可以设置成上拉输入,即不需要再人为的把对 

应的对应的IO口设置成高电平,硬件电路会自动把对应端口引脚拉成高电 

平。


还有一点关于条件编译要说的:这个ifndef… #endif 一般用在头文件中。书上说为了防止重复编译。就我目前了解的来看,在实际应用中,如果在两个.c源文件中都include了一个头文件,那么好像加不加这个条件编译都没什么影响(如果没有定义什么特殊的东西的话)。 但是,最好不要在头文件中定义变量(如int i);因为这样的话,如果两个.c源文件的都include了这个头文件,那么就会在链接时(注意是链接不是编译时)发生重复定义的错误。(好像是因为声明可以多次,但定义只能一次。)所以通常的做法是在.c源文件中定义变量,然后在对应的头文件中利用外部声明(即类似于extern int i;) 进行使用。


*/


#include "key.h"


//KEY端口配置

void KEY_GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);


    GPIO_InitStructure.GPIO_Pin = ALLKEY;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;


    GPIO_Init(KEY_PORT, &GPIO_InitStructure);



}



//声明延时函数

void delay_ms(u16 time);


//检查独立按键

int CheakKey()

{

    uint16_t key = 1;

    int i = 0;

    for(i = 1;i <= 8;++i)

    {


        //软件消抖

        if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)

        {

            delay_ms(10);

            if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)

                return i;

        }


        key = key<<1;       //左移一位

    }


    //if( i > 8)

        return -1;

}


关键字:STM32  GPIO  按键输入 引用地址:STM32_GPIO之按键输入

上一篇:STM32之SPI串行线与HC595使用
下一篇:STM32_GPIO之点亮LED实验

推荐阅读最新更新时间:2024-03-16 16:09

STM32之串口例程
[单片机]
<font color='red'>STM32</font>之串口例程
STM32 - ADC、DMA、USART使用
这是一个综合的例子,演示了ADC模块、DMA模块和USART模块的基本使用。   我们在这里设置ADC为连续转换模式,常规转换序列中有两路转换通道,分别是ADC_CH10(PC0)和ADC_CH16(片内温度传感器)。因为使用了自动多通道转换,数据的取出工作最适合使用DMA方式取出,so,我们在内存里开辟了一个u16 AD_Value 数组,并设置了相应的DMA模块,使ADC在每个通道转换结束后启动DMA传输,其缓冲区数据量为2个HalfWord,使两路通道的转换结果自动的分别落到AD_Value 和AD_Value 中。   然后,在主函数里,就无需手动启动AD转换,等待转换结束,再取结果了。我们可以在主函数里随时取AD_V
[单片机]
STM32 在 keil 环境下如何使用 cm_backtrace进行错误追踪
引言 我们在平常使用STM32单片机的时候,往往会碰到程序跑飞的情况,出现hard_fulat等错误,而我们在定位错误的时候,采用的方法往往是连上仿真器,一步一步单步调试,定位到具体的错误代码,再去猜测、排除、推敲错误原因,这样一个过程很是痛苦,而且在实际情况中,很多产品真机调试时必须断开仿真器或者说,问题确实存在,但是极难出现,所以在基于这样一个问题背景下,RTT 的大佬armink开发了一个基于 ARM Cortex-M系列的 MCU错误追踪库,用于帮助开发者解决上述问题。 CmBacktrace 的作用及适用平台 首先,CmBacktrace 是一款针对于 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位
[单片机]
<font color='red'>STM32</font> 在 keil 环境下如何使用 cm_backtrace进行错误追踪
stm32之.hex 文件
1.我们设置编译 程序的编译器(如图),这个设置意思是把程序下载到flash 的 0x0800 0000开头的位置,然后编译程序 2.编译完程序后,在工程目录的output文件夹中找到编译后生产的.hex文件; 用 notepad++ 或者 UltraEdit 打开 程序 的.hex文件 hex文件格式: (1)以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示) (2)在HEX文件里面,每一行代表一个记录。记录的基本格式为: 第一个字节 表示本行数据的长度; 第二、三字节表示本行数据的起始地址; 第四字节表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。 ‘0
[单片机]
<font color='red'>stm32</font>之.hex 文件
stm32的PWM实现过程
stm32的PWM实现过程   PWM是定时器扩展出来的一个功能(本质上是使用一个比较计数器的功能),配置过程一般为选定定时器、复用GPIO口、选择通道(传入比较值)、使能相应系统时钟、设定相应的预分频、计数周期、PWM模式(有两种)、电平极性等。具体介绍如下:   一、定时器的特点归类   STM32中一共有11个定时器,即 2个看门狗定时器、1个系统嘀嗒定时器(SysTick)及8个Timer定时器,详情如下表所示。   二、定时器所在时钟线路   三、PWM波形产生的原理   通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下
[单片机]
<font color='red'>stm32</font>的PWM实现过程
使用STM32简单控制TMC5160驱动步进电机
首先先来了解一下TMC5160的3种工作模式 TMC5160通过两个引脚来控制它的工作模式: SD _MODE和S PI _MODE。 1、当SD_MODE接地,SPI_MODE拉高,TMC5160即工作在模式1(SPI控制模式)。在该模式下,用户通过SPI接口来设置TMC5160的 寄存器 。 TMC5160使用自己的梯形曲线发生器来控制 步进电机 转动,用户需要设置:开始运动速度VSTART、第一段折线末速度V1、最大速度VMAX、停止速度VSTOP、第一段折线的加速度A1、第二段折线加速度AMAX、第四段折线的减速度 DMA X、第五段折线的减速度D1。把上面的参数设置好,再设置工作模式:速度模式和位置模式。最后再设置
[单片机]
使用<font color='red'>STM32</font>简单控制TMC5160驱动步进电机
基于STM32单片机的电源设计
1. STM32 数据手册电源部分研读 RTC电源管脚为V BAT, 电源范围为1.8~3.6V,主要用于RTC时钟的供电, RTC在大部分场合用于保存一些重要的参数,比如在电脑主板上用于保存boss的信息, 如果这个电源丢了将导致无法重启,在单片机中低功耗设备常常也会使用这个RTC进行定时的唤醒功能,在普通的MCU中常用于做实时时钟。 VDD为数字电源,电源范围也是1.8~3.6V,在芯片内部集成了电压转化器,一般芯片内核供电为1.2V,图示的Regulator为转换器,将VDD电源稳压至1.2V。数据手册建议加入11个100nF和4.7uF的电容,不过实际应用中,只需要每个VDD加入一个100nF的去耦电容。 下图为模
[单片机]
基于<font color='red'>STM32</font>单片机的电源设计
STM32位带操作总结
51单片机估计都用过,可以单独对P1口的第一个IO进行操作,然而STM32是不允许这样做的,为了像51单片机一样能够单独的对某一个IO单独操作,就引入了位带操作这样的概念,简而言之,言而总之,就是为了单独操作32里面的某个端口,所以才有了位带这样的操作机制。 位带区,和位带别名区,位带区,就是你想单独操作的IO的区域,也就是PA,PB等等这一堆IO口的内存所在区,而位带别名区,就是给每一位重新起了个名字的那一片地址区域。M3内核 存储器映射表,1M内存的BitBand区,还有与之对应的32M内存的BitBand别名区,因为你将每一位膨胀成为了一个32位,所以相应的别名区的内存也会是位带区的32倍。 官方给出的相应的计算公式
[单片机]
<font color='red'>STM32</font>位带操作总结
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved