跑马灯实验

STM32F4上的led引脚为PF9 | PF10
LED灯外部高电平,LED灯为推挽上拉输出
stm32f4xx_gpio.c为控制IO口的函数文件
stm32f4xx_rcc.c为时钟使能的重要文件
stm32f4xx_usart.c为串口,system文件夹中有用到

操作IO口函数步骤:
    使能IO口时钟 //调用函数RCC_AHB1PeriphClockCmd(); 不管是使用stm32哪个系列的单片机,我们使用任何一个外设,我们都要先使能IO口或外设时钟。
    初始化IO口模式 //调用函数GPIO_Init();
    操作IO口,输出高低电平 //调用函数GPIO_SetBits(); || GPIO_ResetBits();

编写代码的四个重要函数
1个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_TypeDef* GPIO_InitStruct);
//用来控制GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR
//外设(包括GPIO)在使用之前,几乎都要对先使能对应的时钟

2个读取输入电平函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取某个IO口的输入电平
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); //读取所有IO口输入电平

2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

4个设置输出电平函数:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//实际操作BSRRL寄存器,设置某个IO口输出位高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//实际操作BSRRH寄存器,设置某个IO口输出位低电平
//常用上两个函数
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);


位操作即将操作IO口每1位的1|0膨胀为一个32位的地址,对32位的字的地址进行操作从而对IO口进行操作
哪些区域支持位操作
    SRAM区的最低1MB范围 0x20000000 - 0x200FFFFF
    片内外设区的最低1MB范围 0x40000000 - 0x400FFFFF
 

猜你喜欢

转载自www.cnblogs.com/sailorwithoutsea/p/12394998.html