在官方提供的GPIO例程中,直接给出了一个基于中断方式的GPIO例程,且进行了多层的封装,这导致很难直接模仿其设计相应功能的GPIO程序,为此在这里以一个LED同步闪动的示例给出直观的使用GPIO口示例以便参考使用。随后将基于该程序扩展出一个驱动OLED屏显示的程序,以检测高主频下对OLED屏显示的影响。 相关的程序代码如下: void LED_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Enable the GPIO_LED Clock */
//LEDx_GPIO_CLK_ENABLE(Led);
__HAL_RCC_GPIOB_CLK_ENABLE();
/* Configure the GPIO_LED pin */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14,GPIO_PIN_RESET);
}
void LED_Toggle()
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14);
}
int main(void)
{
//LED1~LED3 同步闪动效果
/* Enable the CPU Cache */
CPU_CACHE_Enable();
HAL_Init();
/* Configure the system clock to 216 MHz */
SystemClock_Config();
/* -1- Initialize LEDs mounted on STM32F722ZE-Nucleo board */
//BSP_LED_Init(LED1);
LED_Init();
/* Infinite loop */
while (1)
{
LED_Toggle();
HAL_Delay(1000);
}
}
|