1、main.c
void main(void)
{
//PB2 led
led(1); //点亮led
delay_ms(20);
led(0); //熄灭led
delay_ms(2000);
/********************************************************************/
//寄存器操作GPIOB PB2方法
GPIOB->BSRR = 0x04; //BSRR寄存器PB2置1, 在第3位写1, 0b100
delay_ms(20);
GPIOB->BSRR = 0x40000; //BSRR寄存器PB2置0,在第18位写1, 0b0100 0000 0000 0000 0000
delay_ms(2000);
}
2、led.h
#ifndef __LED_H
#define __LED_H
//
#include "gpio.h"
//宏定义 三目运算符定义 led(1) PB2高电平, led(0) PB2低电平
#define led(x) do{ x? \
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, 1): \
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, 0); \
} while(0)
//宏定义 PB2上的led翻转电平
#define led_toggle() do{ HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);} while(0)
//我的函数声明
void led_init(void);
#endif
3、led.c
#include "led.h"
//初始化GPIOB和PB2
void led_init(void)
{
//使能GPIOB时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
//定义结构体变量led
GPIO_InitTypeDef led;
//led结构体赋值
led.Pin = GPIO_PIN_2;
led.Mode = GPIO_MODE_OUTPUT_PP;
led.Speed = GPIO_SPEED_FREQ_LOW;
//初始化结构体
HAL_GPIO_Init(GPIOB, &led);
//关闭PB2 LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
}