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);
}