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】轮序方式的按键应用
推荐阅读最新更新时间: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存储器执行时实现
[单片机]
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_
[单片机]
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 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) { 。。。
[单片机]