历史上的今天
今天是:2025年04月10日(星期四)
2019年04月10日 | 总结写的stm32的KEY控制LED
2019-04-10 来源: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);
}
史海拾趣
|
尽管现在宽带普及,但像笔者这样拨号上网的人也为数不少,断开网络连接后,这才想起查看一下上网时间,毕竟时间就是金钱吗!在Windows XP中,即使断开了网络连接,查看上网时间也是非常容易的。 在控制面板中,打开“管理工具”窗口, ...… 查看全部问答> |
|
2009EEWORLD年度人物大评选活动(投票已经结束,评选已公布) ********************************************************************************* 活动进行阶段: ********************************************************************************* 提起EEWORLD,哪些是你一下就能够 ...… 查看全部问答> |
|
我把inline函数放到一个文件单独文件 有些函数比如说 FixPoint FixPoint::operator * ( const FixPoint& fp ) 这个函数在程序里面频繁调用 使用__asm{}加入arm汇编代码..不能编译通过.. nonstandard extension used : \'__asm\' keyword not s ...… 查看全部问答> |
|
我下载了mobile版本的skype(cab安装包),在ce上不能安装; 我也下载了wince版本的SJphone(cab安装包),可以安装,但是双击后无法运行,也没有错误提示,就是没有对象出来! … 查看全部问答> |
|
继TI Stellaris Cortex-M3 的Sandstorm(沙暴)、Fury Class(狂暴)、Dustdevil Class(旋风)之后,Tempest Class(飓风)系列已开始全球批量供应。Stellaris基于实现了革命性突破的ARM Cortex-M3技术之上,是业界领先的高可靠性实时微处理 ...… 查看全部问答> |




