第五章作业
![image-20220331193408123](https://i-blog.csdnimg.cn/blog_migrate/fe0775e506a7fd250feac9c70ae4a06a.png)
![image-20220331193433866](https://i-blog.csdnimg.cn/blog_migrate/f56b28369cb4746c69872ec55ba4342e.png)
(1)汇编语言
LDR R0,=0X4001_1400 ;GPIO_CRL
LDR R1,[R0]
LDR R2,=0X2002_2200
ORRS R1,R1,R2
LDR R2,=OX2FF222FF
ANDS R1,R1,R2
ANDS R1,R1,R2
STR R1,[R0] ;成功设置PD2,3,4,7为推挽输出
LDR R0,=0X4001_1404 ;GPIO_CRH
LDR R1,[R0]
LDR R2,=0X0004_4000
ORRS R1,R1,R2
LDR R2,=0XFFF4_4FFFF
ANDS R1,R1,R2
STR R1,[R0] ;设置PD11,PD12 高阻输入
LDR R0,=0X4001_140C ;GPIO_ODR
LAR R1,[R0]
ORRS R1,R1,0X9C
STRH R1,[R0] ;PD2,3,4,7输出为1,全灭
START
LDR R0,=0X4001_1408 ;GPIO_IDR
LDR R1,[R0]
if((R1&(1<<11))==0) ;key1=0
{
LDR R2,=0X4001_140C ;GPIO_ODR
LDR R3,[R2]
ANDS R3,R3,0XEB ;PD2,PD4 =0
ORRS R3,R3,0X88 ;PD3,PD7 =1
STRH R3,[R2]
}
else if((R1&(1<<12))==0) ;key2=0
{
LDR R2,=0X4001_140C ;GPIO_ODR
LDR R3,[R2]
ANDS R3,R3,0X77 ;PD3,PD7 =0
ORRS R3,R3,0X14 ;PD2,PD4 =1
STRH R3,[R2]
}
(2)寄存器
u32 CtrlPort = 0;
CtrlPort = GPIOD->CRL;
CtrlPort |= 0X20022200;
CtrlPort &= 0X2FF222FF;
GPIOD->CRL = CtrlPort;
CtrlPort = GPIOD->CRH;
CtrlPort |= 0X00044000;
CtrlPort &= 0XFFF44FFF;
GPIOD->CRH = CtrlPort;
GPIO->ODR |= (1<<2)|(1<<3)|(1<<4)|(1<<7);
while(1)
{
if((GPIO->ODR & (1<<11))==0)
{
GPIO->ODR |= (1<<3)|(1<<7);
GPIO->ODR &= ~(1<<2)&~(1<<4);
}
else if((GPIO->ODR & (1<<12))==0)
{
GPIO->ODR |= (1<<2)|(1<<4);
GPIO->ODR &= ~(1<<3)&~(1<<7);
}
}
(3)库函数
GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GOIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4| GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIOSetBits(GPIOD,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_7);
}
main(void)
{
SystemInit();
GPIO_Configuration();
while(1)
{
if(GPIO_ReadInputDataBit(GPIO_Pin_11)==0)
{
GPIO_SetBits(GPIOD,GPIO_Pin_3,GPIO_Pin_7);
GPIO_ResetBits(GPIOD,GPIO_Pin_2,GPIO_Pin_4);
}
else if(GPIO_ReadInputDataBit(GPIO_Pin_12)==0)
{
GPIO_SetBits(GPIOD,GPIO_Pin_2,GPIO_Pin_4);
GPIO_ResetBits(GPIOD,GPIO_Pin_3,GPIO_Pin_7);
}
}
}