1> 硬件框图
2> 工作模式
C语言描述
/**
* @brief Configuration Mode enumeration
*/
typedef enum
{ GPIO_Mode_AIN = 0x0, // Analog Input 模拟输入
GPIO_Mode_IN_FLOATING = 0x04, // input floating 浮空输入
GPIO_Mode_IPD = 0x28, // Input pull-down 下拉输入
GPIO_Mode_IPU = 0x48, // Input pull-up 上拉输入
GPIO_Mode_Out_OD = 0x14, // Output open-drain 开漏输出
GPIO_Mode_Out_PP = 0x10, // Output push-pull 推挽输出
GPIO_Mode_AF_OD = 0x1C, // Alternate function push-pull 复用推挽输出
GPIO_Mode_AF_PP = 0x18 // Alternate function open-drain 复用开漏输出
}GPIOMode_TypeDef;
3> 点灯实验
3.1> 硬件设计
看原理图得到信息:
PB5控制DS0灯
PE5控制DS1灯
PB5,PE5引脚输出低电平,点亮LED;
输出高电平关闭LED;
3.2> 程序设计
bsp_led.c:
void LED_Init(void)
{
GPIO_InitTypeDef gpio_Struct_tmp = {0};
// 2话不说,先使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
// PB5
gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
gpio_Struct_tmp.GPIO_Speed = GPIO_Speed_50MHz;
gpio_Struct_tmp.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_Init(GPIOB, &gpio_Struct_tmp);
// PE5
gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
gpio_Struct_tmp.GPIO_Speed = GPIO_Speed_50MHz;
gpio_Struct_tmp.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_Init(GPIOE, &gpio_Struct_tmp);
}
void LED_On(void)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOE, GPIO_Pin_5);
}
void LED_Off(void)
{
GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_SetBits(GPIOE, GPIO_Pin_5);
}
标准库初始化函数 套路:
Step 1> 先用初始化结构体类型GPIO_InitTypeDef ,定义1个临时变量;
Step 2> 给结构体中的成员赋值,例如,gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
Step 3> 把初始化结构体的地址,传给初始化函数 GPIO_Init(),
初始化函数把参数赋值给GPIO模块相关的寄存器,完成配置;
这招我得好好学学;
main.c:
int main(void)
{
LED_Init();
LED_Off();
// LED_On();
while(1) /* stop */;
//return 0;
}