【stm32f407】轮序方式的按键应用

发布者:Yinyue1314最新更新时间:2019-02-12 来源: eefocus关键字:stm32f407  轮序方式  按键应用 手机看文章 扫描二维码
随时随地手机看文章

1.    硬件原理图:


可以看到user button是PA0


2.    程序步骤

1)    使能按键对应IO口时钟。


PA0在AHB1总线上


调用函数:RCC_AHB1PeriphClockCmd ();


2)    初始化IO模式:上拉/下拉输入。


3)    扫描IO口电平


3.    程序原码

key.h


 #ifndef _KEY_H_H_H

#define _KEY_H_H_H

 

#include "stm32f4xx_gpio.h"

#include "stm32f4xx_rcc.h"

 

#define KEY_ON  0

#define KEY_OFF 1

void KEY_Init(void);

uint8_t KEY_Scan(void);

#endif

key.c


 #include "key.h"

 

void delay_ms(u16 time)   

{  

  u16 i=0;  

  while(time--)   

  {  

    i=12000;  

    while(i--);  

  }  

 

void KEY_Init(void)

  GPIO_InitTypeDef GPIO_InitStruct;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;

  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;

  GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;  

  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOD,&GPIO_InitStruct);

}

uint8_t KEY_Scan(void)

{

  if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON)

  {

    delay_ms(5);

    if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON)

    {

      while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == KEY_ON);

      return KEY_ON;

    }

    else

    {

      return KEY_OFF;

    }

  }

  return KEY_OFF;

}

main.c



#include "led.h"

#include "key.h"

 

void User_Delay(__IO uint32_t nCount)

{

  while(nCount--)

  {

  }

}

static int count = 0;

int main(void)

{

   LED_Init();

   KEY_Init();

   while(1)

   {

    if(KEY_Scan() == KEY_ON)

    {

      if((count++)%2 == 0)

      {

        LED_Operate(LED_RED,LED_ON);

      }

      else

      {

        LED_Operate(LED_RED,LED_OFF);

      }

    }

   }

   

}



关键字:stm32f407  轮序方式  按键应用 引用地址:【stm32f407】轮序方式的按键应用

上一篇:【stm32f407】时钟树以及SystemInit剖析
下一篇:【stm32f407】GPIO原理以及跑马灯的应用

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

死磕到底2—STM32F407驱动无FIFO无时钟ov7670
上次的F103驱动OV7670究竟没有实用价值,我又买了一块STM32F407开发小板, 驱动了无FIFO无时钟ov7670,320*240每秒28帧(应该还可以快点)。 感觉到这个方案比用有FIFO的划算,STM32F407开发小板+ov7670=60元左右。 一、407带摄像头接口,取摄像头数据由片内硬件操作,超爽。 二、我用示波器看PA8输出时钟,幅度很小,这不是程序问题,是示波器频率不够, 调试时候不要怀疑这个信号。我在这里白白纠结了几天。 三、摄像头相关的口线比较多,一根口线多处设置,还有硬件连接的问题,容易出错。 调式时候可以一步一步来,先调SCCB,把摄像头初始化搞OK,再调直接读取图像数据,这样
[单片机]
STM32F407中断初始化代码
void Interrupt_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; //1.IO初始化 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_M
[单片机]
STM32f407---oled屏幕配套取字模软件使用
我使用的是正点原子提供的oled字库,自己用取模软件取字模 PC2LCD2002取模方式设置:阴码+逐列式+顺向+C51格式 附: 代码 //24*24的OLED汉字点阵,包括三个汉字:开、发、板。这三个汉字的点阵库,是利用PCtoLCD2002生产的, //软件设置的取模方式同OLED实验ASCII的取模方式一模一样,字体采用12*大小,一个汉字点阵占用24字节。 const unsigned char OLED_HZK_TBL = { {0x00,0x00,0x1F,0x80,0x11,0x00,0x11,0x00,0x11,0x00,0xFF,0xF0,0x11,0x00,0x11,0x00,0x11,0x0
[单片机]
stm32f407】硬件介绍
1.样板模样 2.特性 STM32F407系列面向需要在小至10 x 10 mm的封装内实现高集成度、高性能、嵌入式存储器和外设的医疗、工业与消费类应用。 STM32F407提供了工作频率为168 MHz的Cortex™-M4内核(具有浮点单元)的性能。 性能:在168 MHz频率下,从Flash存储器执行时,STM32F407能够提供210 DMIPS/566 CoreMark性能,并且利用意法半导体的ART加速器实现了FLASH零等待状态。DSP指令和浮点单元扩大了产品的应用范围。 功效:该系列产品采用意法半导体90 nm工艺和ART加速器,具有动态功耗调整功能,能够在运行模式下和从Flash存储器执行时实现
[单片机]
【<font color='red'>stm32f407</font>】硬件介绍
STM32F407的GPIO设置流程、和相关寄存器的理解及总结
GPIO设置流程 void LED_Init(void) { //1.定义结构体变量 GPIO_InitTypeDef GPIO_InitStructure; //2.使能GPIOF端口的时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //3.结构体成员初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//选择GPIOF引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 (模式寄存器) GPIO_
[单片机]
<font color='red'>STM32F407</font>的GPIO设置流程、和相关寄存器的理解及总结
STM32F407学习笔记----GPIO
1、GPIO InitTypeDef 初始化所需要的IO口 typedef struct { uint32_t GPIO_Pin; /*! Specifies the GPIO pins to be configured.指定需要配置的引脚 This parameter can be any value of @ref GPIO_pins_define */ GPIOMode_TypeDef GPIO_Mode; /*! Specifies the operating mode for the selected pins.模式 in/out?
[单片机]
stm32F407+ov7670的摄像头识别
单片机源程序如下: #include system.h #include SysTick.h #include led.h #include usart.h #include tftlcd.h #include malloc.h #include sdio_sdcard.h #include flash.h #include ff.h #include fatfs_app.h #include key.h #include font_show.h #include exti.h #include time.h #include string.h #include math.h
[单片机]
stm32F407+ov7670的摄像头识别
STM32F407 Hal库 串口使用指南
首先,当然是在Cube中进行相应的配置,这个就不多讲了。 之后,在生成的工程中,找到main函数,在/* USER CODE BEGIN 2 */下加入 HAL_UART_Receive_IT(&huart1,Uart1_Data_buffer,n); 这是要给接收到的数据定向,存在Uart_Data_buffer 中。上面函数的第三个参数应该是收到n个字节就触发中断。 然后,在stm32f4xx_it.c的最后面,也就是/* USER CODE BEGIN 1 */下编写 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { 。。。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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