今天做了一组STM32L0的GPIO读写(PB4&PB5),互相读取电平状态,但是总会出现读取错误的情况,代码如下,请各位大神帮忙看看哪里出问题了,谢谢谢谢以下是打印结果,PB4给PB5写1的时候有错误:
打印结果
void OS_GPIOB_IN_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void OS_GPIOB_OUT_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 ;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
OS_GPIOB_OUT_Init();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
DelayMs(1);
OS_GPIOB_IN_Init();
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4))
{
t101=1;
PRINTF("t101=%d\r\n",t101);
}else
{
t101=0;
PRINTF("t101=%d\r\n",t101);
}
OS_GPIOB_OUT_Init();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
DelayMs(1);
OS_GPIOB_IN_Init();
if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4))
{
t102=1;
PRINTF("t102=%d\r\n",t102);
}else
{
t102=0;
PRINTF("t102=%d\r\n",t102);
}
OS_GPIOB_OUT_Init();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
DelayMs(1);
OS_GPIOB_IN_Init();
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5))
{
t103=1;
PRINTF("t103=%d\r\n",t103);
}else
{
t103=0;
PRINTF("t103=%d\r\n",t103);
}
OS_GPIOB_OUT_Init();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);
DelayMs(1);
OS_GPIOB_IN_Init();
if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5))
{
t104=1;
PRINTF("t104=%d\r\n",t104);
}else
{
t104=0;
PRINTF("t104=%d\r\n",t104);
}
|