点亮LED 需要单片机上的GIPIO端口引脚 输出对应的电压来对LED进行点亮 ,关于GPIO的初始化流程其实我们只需要牢牢记住这张图即可
具体参考: https://blog.csdn.net/k666499436/article/details/123971479
1. GPIO的初始化 流程
-
使能时钟
- 在stm32中, 每个GPIO 端口都有一个与之对应的时钟线,在使用GPIO之前,必须使能其时钟,通常 通过修改RCC(Reset and Clock Control) 相关的寄存器来实现
-
配置GPIO的引脚模式
- 根据需要选择对应的输出模式 ,比如 输入模式(GPIO_Mode_IN)、输出模式(GPIO_Mode_OUT)、模拟模式(GPIO_Mode_AN)
-
设置输出类型(有图选择输出模式的话就是走下面的部分)
- 如推挽输出(GPIO_OType_PP)或开漏输出(GPIO_OType_OD)。
-
配置引脚速度
- 设置GPIO引脚的输出速度。这可以是低速(GPIO_Speed_2MHz)、中速(GPIO_Speed_25MHz)、高速(GPIO_Speed_50MHz)或非常高速(GPIO_Speed_100MHz)
-
配置上拉/下拉电阻
- 选择是否需要内部上拉 (GPIO_PuPd_UP)或下拉(GPIO_PuPd_DOWN)电阻,或者无上拉下拉(GPIO_PuPd_NOPULL)。
-
初始化GPIO的引脚
- 选择对应需要的引脚
-
(可选)配置中断:
- 如果需要,配置GPIO引脚以触发中断。这通常涉及到中断优先级,设置以及中断处理函数的编写。
- (可选)配置替代功能:
- 如果GPIO引脚被用作替代功能(如用于USART、SPI或I2C通信),还需要配置替代功能寄存器(AFR)来选择具体的外设功能。
2. 代码
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
/*使用32控制 gpiob-> pin_8 引脚 */
void delay(uint32_t time) ;
int main()
{
//使能时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct ;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 ;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT ;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP ;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP ;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz ;
//GPIO 初始化
GPIO_Init(GPIOB, &GPIO_InitStruct);
//寄存器输出
// void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
// void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
while(1)
{
//清除ODR寄存器中的对应位来将GPIOB的8号引脚清零(设置为低电平)
GPIO_ResetBits(GPIOB , GPIO_Pin_8 ) ;
delay(1000);
// 在BSRR寄存器中写入对应的位,将GPIOB的8号引脚设置为高电平。
GPIO_SetBits(GPIOB , GPIO_Pin_8 ) ;
delay(1000);
}
}
void delay(uint32_t time)
{
uint32_t i , j ;
for(i = 0 ; i < time ; i++)
{
for(j = 0 ; j < 0xfff ; j++)
{ }
}
}