分为四个程序
1,初始化GPIO函数
1.1打开时钟 初始化总线的各种外设,stm32f1xx_hal_rcc.h
1.2调用GPIO初始化函数 初始化GPIO口的各种状态
1.2.1由于void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)有一个结构体指针所以需要定义一个结构体 结构体类型 GPIO_InitTypeDef 规范,外设+尾巴
1.2.2 结构体的各个结构体变量一一赋值一遍
1.3 关闭led
代码示范
void led_init(void)
{
GPIO_InitTypeDef gpio_initstruct;
__HAL_RCC_GPIOB_CLK_ENABLE();
gpio_initstruct.Pin = GPIO_Pin_8;//看原理图可得
gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;//开漏适用于并联的大量led,推挽适用于反之
gpio_initstruct.Pull = GPIO_PULLUP;//上拉,下拉都可以 ---输入
gpio_initstruct.Speed= GPIO_SPEED_FREQ_HIGH;//随便选
HAL_GPIO_Init(GPIOB,&gpio_initstruct);
led1_off();
}
2,点亮led的函数
由电路图可知,将GPIO拉低,函数如图
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
PinState--GPIO_PIN_RESET
void led1_on(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_Pin_8,GPIO_PIN_RESET);
}
3,熄灭led的函数
GPIO_PIN_SET
void led1_off(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_Pin_8,GPIO_PIN_SET);
}
4,反转led状态的函数
调用void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
void led1_toggle(void)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_Pin_8);
}
主函数
/* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init(); /* LED初始化 */
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init(); /* LED初始化 */
// led1_on();
// led1_off();
while(1)
{
led1_toggle();
delay_ms(500);
}
}