stm32学习之路——LED闪烁实验

1.代码示例

#ifndef _GPIO_H_
#define _GPIO_H_
#include "stm32f10x.h"
void GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
 
    // 启用GPIOC时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
 
    // 配置GPIOC第13引脚为推挽输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

#endif

这段代码是用于配置STM32微控制器上的一个GPIO(通用输入输出)引脚的,具体来说,是配置GPIOC的第13号引脚为推挽输出模式。下面我将逐行解释这段代码的作用:

  1. GPIO_InitTypeDef GPIO_InitStructure;
    • 这行代码声明了一个GPIO_InitTypeDef类型的变量GPIO_InitStructureGPIO_InitTypeDef是一个结构体类型,用于存储GPIO配置的各种参数,比如引脚号、模式、速度等。这个结构体是由STM32的库函数定义的,用于方便地进行GPIO配置。
  2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    • 这行代码的作用是启用GPIOC端口的时钟。在STM32微控制器中,要使用任何外设(包括GPIO端口),首先需要使能该外设的时钟。RCC_APB2PeriphClockCmd是一个函数,用于控制APB2总线上的外设时钟。RCC_APB2Periph_GPIOC是一个宏,代表GPIOC端口的时钟。ENABLE是一个宏,表示使能时钟。
  3. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    • 这行代码设置GPIO_InitStructure结构体中的GPIO_Pin成员为GPIO_Pin_13,意味着我们要配置的是GPIOC的第13号引脚。
  4. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    • 这行代码设置GPIO_InitStructure结构体中的GPIO_Mode成员为GPIO_Mode_Out_PP,表示将GPIOC的第13号引脚配置为推挽输出模式(Push-Pull Output)。推挽输出模式是一种常见的输出模式,适用于驱动LED、继电器等负载。
  5. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    • 这行代码设置GPIO_InitStructure结构体中的GPIO_Speed成员为GPIO_Speed_50MHz,表示GPIO引脚的输出速度为50MHz。STM32的GPIO引脚支持不同的速度配置,以适应不同的应用场景。
  6. GPIO_Init(GPIOC, &GPIO_InitStructure);
    • 这行代码调用GPIO_Init函数,将前面配置好的参数(存储在GPIO_InitStructure中)应用到GPIOC端口上。GPIOC是一个指向GPIOC端口的指针,&GPIO_InitStructureGPIO_InitStructure变量的地址,表示将GPIO_InitStructure中的配置应用到GPIOC端口。

总结来说,这段代码的作用是启用GPIOC端口的时钟,并将GPIOC的第13号引脚配置为推挽输出模式,输出速度为50MHz。这是在使用STM32微控制器进行GPIO操作时的一个常见步骤,用于初始化GPIO引脚,以便后续的控制操作。

2.主程序

#include "stm32f10x.h"
#include "delay.h"
#include "gpio.h"
int main(void)
{
	GPIO_Config();
	while(1)
	{	
		//低电平点亮
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);
		//延时
		Delay(1000);
		//熄灭
		GPIO_SetBits(GPIOC,GPIO_Pin_13);
		Delay(1000);
	}
}

 

 

上一篇:Android AOSP 架构和各层次开发内容介绍


下一篇:c++数字雨实现