void LED_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOA_CLK_ENABLE(); //¿ªÆôGPIOAʱÖÓ
//__HAL_RCC_GPIOD_CLK_ENABLE(); //¿ªÆôGPIODʱÖÓ
GPIO_Initure.Pin=GPIO_PIN_8; //PA8
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //ÍÆÍìÊä³ö
GPIO_Initure.Pull=GPIO_PULLUP; //ÉÏÀ
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //¸ßËÙ
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
//GPIO_Initure.Pin=GPIO_PIN_2; //PD2
//HAL_GPIO_Init(GPIOD,&GPIO_Initure);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET); //PA8ÖÃ1£¬Ä¬Èϳõʼ»¯ºóµÆÃð
//HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); //PD2ÖÃ1£¬Ä¬Èϳõʼ»¯ºóµÆÃð
}
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
//__HAL_RCC_GPIOA_CLK_ENABLE(); //¿ªÆôGPIOAʱÖÓ
//__HAL_RCC_GPIOC_CLK_ENABLE(); //¿ªÆôGPIOCʱÖÓ
GPIO_Initure.Pin=GPIO_PIN_0; //PA0
GPIO_Initure.Mode=GPIO_MODE_INPUT; //ÊäÈë
GPIO_Initure.Pull=GPIO_PULLDOWN; //ÏÂÀ
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_13; //PA13
GPIO_Initure.Pull=GPIO_PULLUP; //ÉÏÀ
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}
分析以上代码,PA8是输出的led灯,PA0和PA13输入的按键,当两个函数没有其他延时,相继运行,程序执行异常,直观现象是oled屏显示异常(已排查,IO没有复用等bug),通过一系列排查,当两个函数中间运行其他函数(初步判断是创建了延时时间),则程序执行正常。