1.推挽输出:可以输出强高低电平
2.文件:
USER组:system_stm32f10x.c 定义系统时钟初始化函数SystemInit等
stm32f1x_it.c 定义部分中断服务
main.c 设置主函数
HARDWARE组:存放外设驱动代码,通过调用FWLib中的固件库来实现
stm32f10x_rcc.c 设置时钟的源文件
stm32f10x_gpio.c 设置GPIOu重要函数
CORE组:存放固件库必需的核心文件和启动文件。
3.GPIO
①STM32的I/O口中,有许多5V兼容的接口,可在芯片的参考手册中查阅,(I/O Level中带FT的就可以兼容5V)。
②STM32每个IO端口都有7个寄存器来控制:配置模式的2个32位的端口配置寄存器CRL和CRH,2个32位的数据寄存器IDR和ODR,1个32位的置位/复位寄存器BSRR,1个32位的锁存寄存器LCKR
③CRH和CRL的作用相同,不过CRL控制低8位,CRH控制高8位。
④
4.重要函数:
①个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
②个读取输入电平函数:
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);
5.初始化GPIO实例:
GPIO_InitTypeDef GPIO_InitStructure;// 创建一个对象
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // LED0-->PB.5 端口配
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数配置 GPIO
6.GPIO_Init()的参数:
①GPIO_InitStructure.GPIO_Pin:用来制定某个IO口。
②GPIO_Mode:
typedef enum { GPIO_Mode_AIN = 0x0, //模拟输入
GPIO_Mode_IN_FLOATING = 0x04, //浮空输入
GPIO_Mode_IPD = 0x28, //下拉输入
GPIO_Mode_IPU = 0x48, //上拉输入
GPIO_Mode_Out_OD = 0x14, //开漏输出
GPIO_Mode_Out_PP = 0x10, //通用推挽输出
GPIO_Mode_AF_OD = 0x1C, //复用开漏输出
GPIO_Mode_AF_PP = 0x18 //复用推挽
}GPIOMode_TypeDef;
这是通过枚举类型定义的。
③GPIO_InitStructure.GPIO_Speed:
typedef enum {GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
7.GPIO寄存器(每个字段的意义)
①CRL
②CRH
③IDR
④ODR
⑤BSRR
使用方法:
8.通过宏定义来实现对某个IO口输出高电平