【南航嵌入式系统原理与应用】第5章作业

第五章作业

image-20220331193408123

image-20220331193433866

(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);
        }
    }
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUAA_Peter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值