*GPIO_I/O口
·4种输入
·浮空输入模式
·输入上拉模式
·输入下拉模式
·模拟输入模式(AD转换)
·4种输出
·开漏输出模式
只可以输出强低电平,适合做电流型驱动
·开路复用输出模式
·推挽输出模式
可输出强高地电平,连接数字器件
·推挽复用输出模式
·3种最大输出速度
*GPIO寄存器的配置
·每组GPIO端口有7组寄存器
·两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)
·两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)
·IDR端口输入寄存器
·ODR输出寄存器
16位对应16个IO口
·一个32位置位/复位寄存器(GPIOx_BSRR)
·BSRR端口位设置/清除寄存器
低16位可以快速的使IO口输出高电平(少用)
高16位可以快速的使IO口输出低电平
·一个16位复位寄存器(GPIOx_BRR)
·一个32位锁定寄存器(GPIOx_LCKR)
·所有IO口都可以作为外中断输入
*GPIO重要函数
·初始化函数
# void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
·GPIO_TypeDef* GPIOx
指定串口
·GPIO_InitTypeDef* GPIO_InitStruct
指定引脚
指定速度
指定输出模式
·eg:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //5口输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHZ; //IO口速度50M
GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化
·读取输入电平函数
# uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
# uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
·读取输出电平函数
# uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
# uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
·设置电平函数
# void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
# void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
# void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
# void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
·读取输入电平
# uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
*跑马灯实验
GPIO输出方式:推挽输出——可以输出高低电平
头文件:_gpio.h
函数:_misc.c
_rcc.c
_gpio.c
步骤:
1.使能时钟
2.初始化IO
3.操作IO(重复置高、低)
*按键输入实验
步骤:
1.使能时钟
2.初始化IO-上拉/下拉输入
3.扫描IO口电平
*常用C语言
·位操作
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
·宏定义
#define 标识符 字符串
eg:
#define A 0
·条件编译
#ifdef 标识符
程序段
#else
程序段
#endif
·外部申明
extern
在外部定义过了
·类型别名
eg:
typedef unsigned char unit8_t;
·结构体
Struct 结构体名{
成员列表1
成员列表2
:
}变量名列表
·同一个类型用数组,不同类型用结构体