F103ZET6的IO口有7组,每组16个,工112个IO,是A、B~F、G
GPIOA、GPIOB、GPIOC。。GPIOG
GPIO作用:
1、普通IO口
2、端口复用,比如PA9,PA10
3、映射---布线方便
GPIO8中工作方式
输入4中
1、输入浮空 2、输入上拉 3、输入下拉 4、模拟输入
输出4中
1、开漏输出 2、推挽输出 3、开漏复用 4、推挽复用 (主要开漏和推挽的区别)
每个IO端口有7个寄存器控制,分别为
1、CRL 2、CRH (配置模式用,都为32位寄存器,CRL控制低位8个IO,CRH控制高位8个IO) CNX[1:0] MODEX[1:0]
3、IDR 4、ODR IDR为只读数据寄存器、ODR为可读可写寄存器,只有低16位有效
5、BSRR 6、BRR 只有BRR为16位寄存器
7、LCKR 配置锁定寄存器,锁定端口位的配置
GPIO库函数 ----常用的函数
1个初始化函数
void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)
看函数参数第一个结构体,为GPIO_TypeDef*,结构体内部定义的为寄存器
看函数实体,有
assert_param(IS_GPIO_ALL_PERIPH(GPIOx)) //有效性判断
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode))
assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin))
2个读取输入电平函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) //读取单个
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIO) //读取一组
2个读取输出电平函数
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
uint16_t GPIO_ReadOutPutData(GPIO_TypeDef* GPIO)
4个设置输出电平函数
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)
tyoedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
}GPIO_TypeDef;
typedef struct
{
uint16_t GPIO_Pin; //指定要初始化的IO
GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
GPIOMode_TypeDef GPIO_Mode; //设置工作模式,8种中的一个
}GPIO_InitTypeDef;
GPIO初始化:
GPIO_InitTypeDef GPIOInitStructure;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_5; //5引脚
GPIOInitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出
GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz; //IO口速度50MHz
GPIO _Init(GPIOB,&GPIOInitStructure)
使用IO步骤
1、使能IO口时钟 RCC_APB2periphColcmCmd() 不同IO口时钟函数不一样
2、初始化IO口组 GPIO_Init()
3、操作IO口
GPIO_SetBits()
GPIO_ResetBits()