在官方提供的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);
- }
- }
复制代码
|