历史上的今天
今天是:2025年03月29日(星期六)
2019年03月29日 | stm32的KEY控制LED
2019-03-29 来源:eefocus
stm32的学习就是弄懂是怎么进行软件配置,先明白硬件连接,再结合起来;
#include "stm32f4xx.h"
#include "led.h"
#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) // 这里读取IO的状态,将stm32的IO口作为输入使用
#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
#define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
#define LED0 PFout(9) //DSO LED的端口定义,可以有位带操作实现某个IO口的一个位;这个是正点原子中的,标准库中没有
#define LED1 PFout(10)
#define LED2 PFout(9)&&PFout(10)
void KEY_init(void); //
u8 KEY_scan( u8 );
void delay(void) // 使用最简单的方式实现延迟,这种方式仅仅用于测试
{
int i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
int main()
{
u8 k;
LED_init(); //
KEY_init();
GPIO_SetBits(GPIOF,GPIO_Pin_9); // 使用固件库操作来实现IO口操作
delay();
while(1)
{
k=KEY_scan(0); // 读取IO口状态
if(k){
switch(k){
case 1:
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
break;
case 2:
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
break;
case 3:
GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_9);
break;
}
}
delay();
//delay();
// GPIO_ResetBits(GPIOF,GPIO_Pin_9);
// GPIO_SetBits(GPIOF,GPIO_Pin_10);
//
// GPIO_ResetBits(GPIOF,GPIO_Pin_9);
// GPIO_SetBits(GPIOF,GPIO_Pin_10);
}
return 0;
}
void KEY_init(void){
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN; // ÕâÀïµÄIO¿Ú×÷ΪÊä³ö£¬Êä³öµÍµçƽ µÆÁÁ
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;
GPIO_Init(GPIOE, &GPIO_InitStruct);
}
u8 KEY_scan( u8 mode){
// mode ÊÇ·ñÖ§³ÖÁ¬Ðø°´
static u8 key=1;
if(mode) key=1;
if(key&&(KEY0==0|KEY1==0||KEY2==0)){
delay();
key=0;
if(KEY0==0)
return 1;
else if(KEY1==0)
return 2;
else if(KEY2==0)
return 3;
}else if(KEY0==1&&KEY1==1&&KEY2==1) key=1;
return 0;
}
void LED_init(void )
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//ʹÄÜGPIOFʱÖÓ
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed=GPIO_Medium_Speed;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF, &GPIO_InitStruct);
GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
}
上一篇:嵌入式-stm32学习:按键检测
史海拾趣
|
开机密码时startui.cpp加了ipShowIM(SIPF_ON)软键盘为什么还不出来? Startup_DlgProc() { switch (message) { case WM_INITDIALOG:   ...… 查看全部问答> |
|
我正在做一个NDIS中间层驱动程序,以前没怎么接触过,不知道怎么实现支持所有windows系列操作系统?关键技术在哪?是不是用最新的DDK开发就能向下兼容?还是... 请各位帮忙,在此先谢过了!… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:36 编辑 现在学校为了今年的电子设计大赛,让我们从2009年的电子设计大赛的题目中选择一道题来练习一下!我们选择了声音引导系统这道题目,可所需要的元器件那么多,估计一两家淘宝店都搞不定啊,怎么办?好 ...… 查看全部问答> |
|
一打开软件设置好以后点下载就没有反应了,关闭也不行,进程都关不了,想病毒一样?还有就是老是下不了,串口不对什么,但是实际上就是那个串口?急急急急急急!用老版本是可以下载的,但是一两次后就跟这个一样了。 两个ISP程序都关不了 ...… 查看全部问答> |
|
在 我的C语言之路 里,我反复强调的一句话是:作为一个程序员应该做的事情只有一件,那就是coding。回想过去,我的很多coding都是教科书上的编程习题。这次学习C++。当然它本身就为下面所说的这个小程序所驱动。我决定换个方法学习,我手头有一本书 ...… 查看全部问答> |




