当前位置: 首页 > article >正文

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);
	}
}

 

 


http://www.kler.cn/a/398087.html

相关文章:

  • WebSocket协议在Java中的整合
  • 微服务瞎写
  • Vue学习记录03
  • 加速 AI 创新:引入 Elastic AI 生态系统
  • 第八节 如何结合AAA实现用户远程登录-路由基础
  • 二分搜索的三种方法
  • SSH隧道连接(基于linux)
  • 【366】基于springboot的高校物品捐赠管理系统
  • Python常用魔术方法 (学习笔记)
  • Prometheus面试内容整理-PromQL 查询语言
  • 【软件测试】设计测试用例的万能公式
  • git简介和本地仓库创建,并提交修改。git config init status add commit
  • 开启鸿蒙开发之旅:交互——点击事件
  • 领夹麦克风哪个品牌好,手机领夹麦克风哪个牌子好,选购推荐
  • redis集群:怎么找到AOF文件的位置
  • 每日一博 - Java的Shallow Copy和Deep Copy
  • JMeter与大模型融合应用之JMeter日志分析服务化实战应用
  • 使用 Pytorch 搭建视频车流量检测资源(基于YOLO)
  • 提取双栏pdf的文字时 输出文件顺序混乱
  • opencv(c++)----图像的读取以及显示
  • Springboot maven常见依赖、配置文件笔记
  • vue | 劫持原理
  • 【HarmonyOS NEXT】实战——登录页面
  • k8s1.21.1 etcd服务备份恢复
  • 理解 HTML5 Canvas 中逻辑像素与物理像素的关系
  • GStreamer 简明教程(九):Seek 与跳帧