[mw_shl_code=c,true]
[mw_shl_code=c,true]//战舰V2板
// GPIOE->ODR |= 0xf<<2;//上拉2345
//按我的理解设置上拉后
//IDR寄存器的值应该是xxxx xxxx xx11 11xx,为什么不能执行i=2;即为什么值不是xxxx xxxx xx11 11xx,不执行GPIOE->IDR &4 == 4这个if语句
//程序如下
#include "sys.h"
#include "stm32f10x_map.h"
#include "stm32f10x_nvic.h"
#include "delay.h"
int main(void)
{
u8 i=0;
Stm32_Clock_Init(9);//系统时钟设置
//RCC->APB2ENR |= 9<<3; //使能PORTB和PORTE时钟,原子原句
RCC->APB2ENR |= 0x13 << 2; //改写使能PORTE PORTB PORTA时钟
GPIOB->CRL &= 0xFF0FFFFF;//原子原句
GPIOB->CRL |= 0x00300000;//原子原句
GPIOB->ODR |= 1<<5; //原子原句
//GPIOE->CRL &= 0xFF0FFFFF;
//GPIOE->CRL |= 0x00300000;
//改写成
GPIOE->CRL &= 0xFF0000FF;//改写PE5推挽,PE234上拉输入
GPIOE->CRL|=0X00388800;
//1111B==0xfh
GPIOE->ODR |= 0xf<<2;//上拉2345
//按我的理解设置上拉后
//IDR寄存器的值应该是xxxx xxxx xx11 11xx
GPIOA->CRL&=0XFFFFFFF0;//PA0 设置成输入,默认下拉,原子原句
GPIOA->CRL|=0X00000008;
delay_init(72); //延时函数初始化
/*原子按键初始化原句开始*/
//RCC->APB2ENR|=1<<2; //使能 PORTA 时钟
//RCC->APB2ENR|=1<<6; //使能 PORTE 时钟
//上边注释掉的两句,可以跟led的io初始化一起使能
//即10011B==0x13h代表PE PB PA,只需要左移两位,所以<<2
//GPIOA->CRL&=0XFFFFFFF0;//PA0 设置成输入,默认下拉
//GPIOA->CRL|=0X00000008;
//GPIOE->CRL&=0XFFF000FF;//PE2~4 设置成输入
//GPIOE->CRL|=0X00088800;
//GPIOE->ODR|=7<<2; //PE2~4 上拉
//上边注释掉的3句,可以和ledPE口初始化一起
/*按键初始化结束*/
while(1)
{
GPIOB->ODR &= !(1<<5);//LED0亮
GPIOE->ODR &= !(1<<5);//LED1亮
delay_ms(500);//闪烁
GPIOE->ODR |= 1<<5;
delay_ms(500);
GPIOB->ODR |= 1<<5;
GPIOE->ODR &= !(1<<5);
delay_ms(500);
GPIOE->ODR |= 1<<5;
delay_ms(500);
if(GPIOA->IDR & 1)//key_up可以执行
{
i=1;
}
else if((GPIOE->IDR & 0x0004)==4)//key2无论是否按键都不执行
{
i=2;
}
else
{
i=0;
}
while(i==1) //下面按键执行结果,LED闪烁速度变化,可以忽略
{ if((GPIOA->IDR & 1)==0)
{
i=0;
break;
}
GPIOB->ODR &= !(1<<5);
GPIOE->ODR &= !(1<<5);
delay_ms(250);
GPIOE->ODR |= 1<<5;
delay_ms(250);
GPIOB->ODR |= 1<<5;
GPIOE->ODR &= !(1<<5);
delay_ms(250);
GPIOE->ODR |= 1<<5;
delay_ms(250);
}
while(i==2)
{ if((GPIOE->IDR & 1<<2)==0)
{
i=0;
break;
}
GPIOB->ODR &= !(1<<5);
GPIOE->ODR &= !(1<<5);
delay_ms(120);
GPIOE->ODR |= 1<<5;
delay_ms(120);
GPIOB->ODR |= 1<<5;
GPIOE->ODR &= !(1<<5);
delay_ms(120);
GPIOE->ODR |= 1<<5;
delay_ms(120);
}
}
}[/mw_shl_code]
[/mw_shl_code]
|