请问对于一组GPIO口,将IO口设置为输入模式的时候,怎么一下读书这组IO口的所有输入值?

2019-10-11 16:40发布

能否用一句语句,读出一组IO口的所有输入值?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
zhululai
1楼-- · 2019-10-12 13:38
回复【7楼】why always me:
---------------------------------
通过GPIOx_CRL和GPIOx_CRH这两组寄存器,可以将IO口配置为需要的输入输出模式。另外,当除能JTAG,使能SWD时,SWD必须占用PA.13和PA.14,因而只能使用PA.15、PB.3和PB.4。
why always me
2楼-- · 2019-10-12 17:09
 精彩回答 2  元偷偷看……
why always me
3楼-- · 2019-10-12 20:52
回复【8楼】zhululai:
---------------------------------
//按键初始化函数 
void KEY_Init(void)
{     
     GPIO_InitTypeDef GPIO_InitStructure; 
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA,时钟

    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  //设置成下拉输入
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA



void KEY_Scan(void)
{

    if(KEY0==1)
        GPIO_ResetBits(GPIOB,GPIO_Pin_12);
    if(KEY1==1)
        GPIO_ResetBits(GPIOB,GPIO_Pin_13);
    if(KEY2==1)
        GPIO_ResetBits(GPIOB,GPIO_Pin_14);
    if(KEY3==1)
        GPIO_ResetBits(GPIOB,GPIO_Pin_15);

}

#define KEY0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)
#define KEY2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)
#define KEY3 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)

现在我一上电,就会有PB14,PB.15两个灯是亮的(不正常),PB.13和PB.15只有按键的时候才会亮(正常)
zhululai
4楼-- · 2019-10-12 21:46
回复【10楼】why always me:
---------------------------------
分别单独初始化PA.4~PA.7,并且KEY_Scan增加else分支,试试看。另外,建议使用JTAG单步调试,通过查看变量和寄存器,可以很容易找出错误。
why always me
5楼-- · 2019-10-13 02:50
回复【11楼】zhululai:
---------------------------------
试过,还是不行
zhululai
6楼-- · 2019-10-13 06:49
回复【12楼】why always me:
---------------------------------
增加这一句试试:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

一周热门 更多>