(STM32学习)4.跑马灯和GPIO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40891541/article/details/81163409

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口输出高电平

猜你喜欢

转载自blog.csdn.net/qq_40891541/article/details/81163409