這是我人生中編寫的第一個STM32小程序,讓LED彩燈閃亮。
led.h:
#ifndef __LED_H__
#define __LED_H__
#include "stm32f429xx.h"
#include "stm32f4xx_hal_gpio.h"
#define LED_R_ON HAL_GPIO_WritePin(GPIOH, GPIO_PIN_10, GPIO_PIN_RESET)
#define LED_R_OFF HAL_GPIO_WritePin(GPIOH, GPIO_PIN_10, GPIO_PIN_SET)
#define LED_R_TOGGLE HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_10)
#define LED_G_ON HAL_GPIO_WritePin(GPIOH, GPIO_PIN_11, GPIO_PIN_RESET)
#define LED_G_OFF HAL_GPIO_WritePin(GPIOH, GPIO_PIN_11, GPIO_PIN_SET)
#define LED_G_TOGGLE HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_11)
#define LED_B_ON HAL_GPIO_WritePin(GPIOH, GPIO_PIN_12, GPIO_PIN_RESET)
#define LED_B_OFF HAL_GPIO_WritePin(GPIOH, GPIO_PIN_12, GPIO_PIN_SET)
#define LED_B_TOGGLE HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_12)
#define LED_RED LED_R_ON; LED_G_OFF; LED_B_OFF
#define LED_GREEN LED_R_OFF; LED_G_ON; LED_B_OFF
#define LED_BLUE LED_R_OFF; LED_G_OFF; LED_B_ON
#define LED_YELLOW LED_R_ON; LED_G_ON; LED_B_OFF
#define LED_PURPLE LED_R_ON; LED_G_OFF; LED_B_ON
#define LED_CYAN LED_R_OFF; LED_G_ON; LED_B_ON
#define LED_WHITE LED_R_ON; LED_G_ON; LED_B_ON
#define LED_ALL_OFF LED_R_OFF; LED_G_OFF; LED_B_OFF
void LED_GPIO_Config(void);
#endif
led.c:
#include "led.h"
#include "stm32f4xx_hal_rcc.h"
void LED_GPIO_Config(void)
{
__HAL_RCC_GPIOH_CLK_ENABLE();
GPIO_InitTypeDef init;
init.Alternate = 0;
init.Mode = GPIO_MODE_OUTPUT_PP;
init.Pull = GPIO_PULLUP;
init.Speed = GPIO_SPEED_FREQ_LOW;
init.Pin = GPIO_PIN_10;
HAL_GPIO_Init(GPIOH, &init);
init.Pin = GPIO_PIN_11;
HAL_GPIO_Init(GPIOH, &init);
init.Pin = GPIO_PIN_12;
HAL_GPIO_Init(GPIOH, &init);
LED_ALL_OFF;
}
main.c:
#include "led.h"
void Delay(__IO uint32_t i)
{
for (; i != 0; i--);
}
int main(void)
{
LED_GPIO_Config();
while (1)
{
LED_RED;
Delay(0xfffff);
LED_GREEN;
Delay(0xfffff);
LED_BLUE;
Delay(0xfffff);
LED_YELLOW;
Delay(0xfffff);
LED_PURPLE;
Delay(0xfffff);
LED_CYAN;
Delay(0xfffff);
LED_WHITE;
Delay(0xfffff);
LED_ALL_OFF;
Delay(0xfffff);
}
}
后記:STM32Cube_FW_F4_V1.16.0固件庫與我學的教程中的舊版固件庫有很大不同,代碼上改動非常明顯。一邊編,一邊查着改。