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

3.2.STM32-LED闪烁LED流水灯蜂鸣器

点亮LED

首先我们按照视频把硬件电路搭载好

博主的面包板不太好使,根本插不进去,所以我就先用这个松一松孔

在这里插入图片描述

最后摆好就是这个样子
在这里插入图片描述
接下来我们跟着视频新建一下工程吧

在上一节课我们讲到过,操作STM32的GPIO总共需要3个步骤

  1. 使用RCC开启GPIO的时钟
  2. 使用GPIO_Init函数初始化GPIO
  3. 使用输出或者输入的函数控制GPIO口

这里总共涉及了RCCGPIO两个外设

步骤一

我们最常用的RCC库函数是
1. RCC_AHB外设时钟控制
2. RCC_APB2外设时钟控制
3. RCC_APB!外设时钟控制

在这里插入图片描述

我们使用APB2外设时钟控制,外设选GPIOA,状态参数选ENABLE
在这里插入图片描述
步骤一完成

步骤二

我们再看GPIO的库函数,其中 GPIO_Init 是非常重要的函数,这个函数的作用是,用结构体的参数来初始化GPIO口

//我们需要先定义一个结构体变量,然后再给结构体赋值,最后调用这个函数,这个函数内部就会自动读取结构体的值,然后自动把外设的各个参数都配置好

//这种 Init 函数在STM32中基本所有外设都有,一般我们初始化外设都是使用这个 Init 函数来完成的

Mode参数

我们跟随视频来到GPIO的模式(mode)参数,这和我们之前讲的GPIO有八种工作模式相吻合
在这里插入图片描述

在这里插入图片描述

  1. AIN(Analog IN)是模拟输入
  2. IN_FLOATING是浮空输入
  3. IPD(In Pull Down)是下拉输入
  4. IPU(In Pull Up)是上拉输入
  5. Out_OD(Out Open Drain)是开漏输出
  6. Out_PP(Out Push Pull)是推挽输出
  7. AF_OD(Atl Open Drain)是复用开漏
  8. AF_PP(Atl Push Pull)是复用推挽

我们点灯用的是推挽输出,所以复制Out_PP这一项

Pin参数

在这里插入图片描述

这里因为我们使用的是GPIOA外设的0号引脚,所以选择GPIO_Pin_0

Speed参数

在这里插入图片描述

选择50MHz即可

最后,把GPIO初始化结构体的地址放到GPIO_Init的第二个参数,当这个GPIO_Init函数执行完,这个GPIOA外设的0号引脚就自动被配置为推挽输出、50MHz的速度了

它内部的主要执行逻辑就是读取结构体的参数、执行一堆判断和运算、最后写入到GPIO配置寄存器

步骤三

在这里插入图片描述

本小节我们只介绍这四个GPIO的输出函数

  1. GPIO_SetBits,第一个参数是GPIOx,第二个参数是GPIO_Pin,这个函数可以把指定的端口设置为高电平
  2. GPIO_ResetBits,参数和1相同,但是把指定的端口设置为低电平
  3. GPIO_WriteBit,这个函数有三个参数,前两个也是指定端口的,第三个是BitValue,这里是根据第三个参数的值来设置指定的端口
  4. GPIO_Write,第一个参数是GPIOx,选择外设,第二个参数是PortValue,Port就是端口的意思,这个函数可以同时对16个端口进行写入操作

我们分别用一下试试

GPIO_ResetBits

先看该函数的定义,第一个参数是选择哪一个外设,我们选GPIOA,第二个选择哪个端口,我们选PA0,即GPIO_Pin_0
在这里插入图片描述

最后代码是这样的
在这里插入图片描述

经过博主的一顿debug,终于是点亮了LED
在这里插入图片描述
这说明我们端口配置的没问题,而且PA0已经输出了低电平

GPIO_SetBits

在这里插入图片描述
在这里插入图片描述
可以看到输出高电平的时候就不亮了

GPIO_WriteBit

前两个参数是一样的,我们跳转一下定义看第三个参数在这里插入图片描述
第三个参数是BitVal

  1. Bit_RESET,清除端口值,也就是置低电平
  2. Bit_SET,设置端口值,也就是置高电平

我们先试试Bit_RESET,低电平

在这里插入图片描述
可以看到LED灯又亮起来了

再试试Bit_SET,LED熄灭

在这里插入图片描述
前三个输出函数(GPIO_ResetBits,GPIO_SetBits,GPIO_WriteBit)我们介绍完毕,GPIO_Write我们在下一个例程介绍

LED闪烁

为了实现LED闪烁,我们就需要在 主循环 里,写上

点亮LED,延时一段时间
熄灭LED,延时一段时间

这样的逻辑

我们根据视频教程,把延时函数添加到工程里来在这里插入图片描述
这里用的是一个输出函数GPIO_WriteBit的两种参数类型代表点亮和熄灭

我们也可以用两个输出函数GPIO_ResetBits和GPIO_SetBits分别代表点亮和熄灭

如果我们非要给一个数,1是高电平,0是低电平,这样怎么办呢?

我们可以加上一个BitAction把他们的变量类型强制转换,达到类似的效果

LED闪烁

最后我们再研究一下 推挽输出开漏输出驱动 问题

推挽模式下,高低电平都是有驱动能力的,这时正反接LED都能亮(但是为啥博主反接LED搞半天也亮不起来)

开漏模式下,仅有低电平有驱动能力

LED流水灯

外设时钟是一样的,不用变,不过我们在LED闪烁工程只初始化了一个端口,而现在我们要初始化八个端口PA0~7

我们可以利用按位或的操作,进行批量选中

其实批量选中外设,引脚等等也可以利用按位或的操作

为了省事,我们干脆把所有端口都设置成推挽输出模式

并且为了同时控制所有端口,我们就可以使用GPIO_Write这个函数了

我们跳转到这个函数的定义,把它的参数填充完毕

注意它的第二个参数PortVal,意思是指定写到输出数据寄存器的值
就是直接写到GPIO的ODR寄存器中的
在这里插入图片描述
所以我们直接这样写8个GPIO_Write函数

0x0010就是16,对应二进制就是0100

因为是低电平点亮方式,所以需要按位取反,表示该端口运转,其他端口不运转

在这里插入图片描述

流水灯

蜂鸣器

我们先看一下接线图
在这里插入图片描述

这个VCC正极接到正极供电孔,GND负极接到负极供电孔,然后I/O控制极就随便选择一个IO口接上就行了,A15、B3、B4这三个口暂时先别选,我们从引脚定义图可以看到,这三个口默认是JTAG的调试端口在这里插入图片描述

我们按照视频进行操作

最终效果(上传中)

使用库函数的方法

Method 1

打开.h的文件的最后,看看都有哪些函数,以gpio.h文件为例,右键转到定义,查看一下函数和参数的用法。

可以下一个有道词典,方便查词
在这里插入图片描述

Method 2

打开up主提供的“参考文档”里面的这个库函数用户手册在这里插入图片描述

这里面有所有库函数的使用方法,是中文
在这里插入图片描述
里面还有例子,用的时候直接复制就行

不过这个用户手册并不对应我们现在用的这个库函数的版本

我们使用的库函数是V3.5.0版本的,部分用法有差异

不过也可以看官方提供的,英文版本
在这里插入图片描述

Method 3

利用搜索引擎,参考别人的代码

下节预告:学习GPIO的输入部分

http://www.dtcms.com/a/596886.html

相关文章:

  • 4-ARM-PEG-Methoxy(2),化学特性、纯化策略与表征方法
  • 4-ARM-PEG-DSPE(2),多功能PEG脂类偶联分子及反应原理
  • php做的网站安全吗宣传推广方案怎么写
  • 建设网站的发布与推广分销商城的服务商
  • Linux:文件 mmap 读写流程简析
  • Ros1 Noetic(本地)和Ros2 Humble(docker)之间相互通信及设置初始位姿
  • 使用 Docker Compose 部署 Redis 单节点 和 主从架构
  • 群晖NAS上使用最新版WordPress安装部署个人的博客或网站
  • 在Visio中保存PDF时去除空白区域
  • AI学习路线图2025:从入门到进阶的完整指南
  • 电气工程师求职问答-初级篇
  • Learn Git Branching
  • 凡科快图网站中医院网站源码
  • 太原网站快速排名提升河北婚庆网站建设定制
  • [Spring 注解详解]为何 @Service 不仅仅是 @Component?
  • 前端高频面试题之Vue(初、中级篇)
  • 谷歌云发布 Axion Arm 处理器与 TPU v5p,加速 AI 基础设施闭环
  • STM32H743-ARM例程43-SD_IAP_FPGA
  • 甘肃做网站找谁网上帮人卖东西的平台
  • 数据分析笔记01:数据分析概述
  • 瑞利信道下PSK水声通信系统均衡技术
  • 网站建设存在的问题及对策软文代写发布
  • Note:汽车轮胎的电阻测量-目的是减少静电对新能源汽车电气件的损坏风险
  • RabbitMQ 核心知识点
  • Python使用消息队列rabbitmq
  • GBD调试KingSCADA详细步骤
  • 做美妆的网站南昌优化网站分析
  • 上海个人医疗网站备案尖扎县公司网站建设
  • 多端统一的教育系统源码开发详解:Web、小程序与APP的无缝融合
  • uniapp小程序 订阅消息推送