3、stm32:GPIO输出——LED闪烁、LED流水灯、蜂鸣器

这篇具有很好参考价值的文章主要介绍了3、stm32:GPIO输出——LED闪烁、LED流水灯、蜂鸣器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、GPIO简介

二、GPIO基本结构

三、GPIO模式

四、GPIO常用寄存器

(1)端口配置低\高寄存器(GPIOx_CRL/GPIOx_CRH)(x=A…E)

(2)端口输入数据寄存器(GPIOx_IDR)(x=A…E)

(3)端口输出数据寄存器(GPIOx_ODR)(x=A…E)

(4)端口位设置/清除寄存器(GPIOx_BERR)(x=A…E)

(5)端口位清除寄存器(GPIOx_BER)(x=A…E)​ 

(6)端口位配置锁定寄存器(GPIOx_LCKR)(x=A…E)​ 

五、主要程序

1、第一步:使用RCC初始化GPIO时钟

2、 第二步:使用GPIO_Init函数初始化GPIO

3、第三步设置高低电平

六、完整程序

1、点亮一个灯(低电平亮)

2、流水灯(低电平亮)

3、蜂鸣器(低电平的时候响)

七、其他基础知识

一、GPIO简介

GPIO General Purpose Input Output )通用输入输出口
可配置为 8 种输入输出模式
引脚电平: 0V~3.3V ,部分引脚可容忍 5V
输出模式下可控制端口输出高低电平,用以驱动 LED 、控制蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、 ADC 电压采集、模拟通信协议接收数据等

二、GPIO基本结构

3、stm32:GPIO输出——LED闪烁、LED流水灯、蜂鸣器

GPIO中寄存器有32位,而端口只有16位,故寄存器只有低16位对应的有端口

驱动器用来增加信号的驱动能力

寄存器只用于存放数据 

三、GPIO模式

通过配置 GPIO 的端口配置寄存器,端口可以配置成以下 8 种模式

3、stm32:GPIO输出——LED闪烁、LED流水灯、蜂鸣器

四、GPIO常用寄存器

(1)端口配置低\高寄存器(GPIOx_CRL/GPIOx_CRH)(x=A…E)


​ 端口配置寄存器共16位,但每4位数据表示1位,共需要64位,而STM32中每个寄存器都为32位,因此分为端口配置低寄存器和端口配置高寄存器。通过端口配置寄存器可以配置GPIO工作模式与端口输出速度。

注意:输出速度可以限制输出引脚的最大翻转速度,作用是降低功耗、提高稳定性,一般情况下配置为50MHz。

(2)端口输入数据寄存器(GPIOx_IDR)(x=A…E)


​ 输入数据共16位,但寄存器共32位,因此寄存器高16位为空。

(3)端口输出数据寄存器(GPIOx_ODR)(x=A…E)


​ 输出数据共16位,但寄存器共32位,因此寄存器高16位为空。

(4)端口位设置/清除寄存器(GPIOx_BERR)(x=A…E) ​ 高16位用于位清除,低16位用于位设置。

高16位:为0不影响;为1清0;
低16为:为0不影响;为1置1。

(5)端口位清除寄存器(GPIOx_BER)(x=A…E) ​ 高16位为空,低16位用于清除,方法同上。

(6)端口位配置锁定寄存器(GPIOx_LCKR)(x=A…E) ​ 高15位为空,低17位用于锁定,较少使用。

五、主要程序

    1、第一步:使用RCC初始化GPIO时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

2、 第二步:使用GPIO_Init函数初始化GPIO

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//通用推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50兆hz的速度
    //用结构体的函数初始化GPIO口
    GPIO_Init(GPIOA, &GPIO_InitStructure);//第二个参数为指向结构体的指针,故传地址

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

若要使用多个端口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;

若要使用A/B/C/D的全部端口GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All

3、第三步设置高低电平

		GPIO_ResetBits(GPIOA, GPIO_Pin_0);//0
		GPIO_SetBits(GPIOA, GPIO_Pin_0);//1
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//0
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);//1
		
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);

GPIO_WriteBit直接写1或0来设置电平的时候,需要将将数字强制转换成枚举类型BitAction

Bit_RESET和Bit_SET也是枚举类型BitAction

六、完整程序

1、点亮一个灯(低电平亮)(LED连接PA0口)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	//使用RCC初始化GPIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	//使用GPIO_Init函数初始化GPIO
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//通用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50兆hz的速度
	//用结构体的函数初始化GPIO口
	GPIO_Init(GPIOA, &GPIO_InitStructure);//第二个参数为指向结构体的指针,故传地址
	
	while (1)
	{
		//使用输出或输入函数控制GPIO口
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);//0
		Delay_ms(500);
		GPIO_SetBits(GPIOA, GPIO_Pin_0);//1
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//0
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);//1
		Delay_ms(500);
		
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);
		Delay_ms(500);
	}
}

2、流水灯(低电平亮)(LED连接PA0~PA6)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001 低电平点亮
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000
		Delay_ms(100);
	}
}

3、蜂鸣器(低电平的时候响)(蜂鸣器接口为PB12)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(100);
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(100);
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(100);
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(700);
	}
}

七、其他基础知识

1、A15、B3、B4三个端口默认是JTAG调试端口,如果要当作普通端口,要进行一些相关的配置

2、有源蜂鸣器:内部自带振荡器,频率固定

     无源蜂鸣器:不带振荡器,要提供震荡脉冲才能发生,可以发出不同频率的声音

3、推挽输出高低电平都有驱动能力

     开漏输出高电平相当于高阻态,没有驱动能力,低电平有驱动能力文章来源地址https://www.toymoban.com/news/detail-493895.html

到了这里,关于3、stm32:GPIO输出——LED闪烁、LED流水灯、蜂鸣器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • STM32F103C8T6定时器实现led的周期闪烁及PWM实现流水灯

    STM32F103C8T6定时器实现led的周期闪烁及PWM实现流水灯

    通过定时器Timer方式实现时间的精准控制,相当于给CPU上了一个闹钟,CPU平时处理其它任务,当定时时间到了以后,处理定时相关的任务。请设置一个5秒的定时器,每隔5秒从串口发送“hello windows!”;同时设置一个2秒的定时器,让LED等周期性地闪烁。 使用TIM3和TIM4,分别输

    2024年01月23日
    浏览(12)
  • STM32第二课:灯的亮灭、流水灯、有源蜂鸣器

    STM32第二课:灯的亮灭、流水灯、有源蜂鸣器

             STM32的第二课,我们来学习如何使用STM32控制等的亮灭,使用多重控制制作我们自己的流水灯,然后再了解一下有源蜂鸣器的用法,创造出不一样的声音。         首先开头包含STM32的头文件#include \\\"stm32f10x.h\\\",这个头文件包含STM32众多的重要驱动,一定要把这个头文

    2024年01月24日
    浏览(10)
  • STM32单片机 超入门项目:流水灯(不同闪烁模式和速度)

    STM32单片机 超入门项目:流水灯(不同闪烁模式和速度)

    流水灯通过交替闪烁实现灯光流动的效果,本篇将分析如何采用STM32单片机实现流水灯。 STM32单片机(STM32F103RCT6)、发光二极管 4(我用的是七彩快闪,用红绿蓝LDE自行搭配也可)、1k电阻 4、面包板飞线等自备。 打开STM32CubeMX,选择型号STM32F103RCT6,配置调试器PinoutConfigurati

    2023年04月09日
    浏览(11)
  • STM32F103之点亮LED流水灯

    STM32F103之点亮LED流水灯

    目录 一、设计分析及代码思路 1.实现流水灯步骤 2.代码设计过程 二、创建项目 1.新建项目 2.编写代码 三、仿真运行 四、连接电路 1.器件连接 2.程序烧录 五、代码烧录及实现 1.烧录实现 2.流水灯实现 六、总结  配置时钟使能寄存器 配置端口寄存器 设置输出模式 实物连接及

    2024年04月25日
    浏览(11)
  • 【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32

    【蓝桥杯嵌入式】点亮LED灯,流水灯的原理图解析与代码实现——STM32

    🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -  蓝桥杯嵌入式_勾栏听曲_0的博客 🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️ 📌个人主

    2024年02月03日
    浏览(20)
  • Stm32f103c8t6(proteus仿真)学习——1.点亮LED流水灯

    Stm32f103c8t6(proteus仿真)学习——1.点亮LED流水灯

    软件准备:keil uVsion 5 和 proteus 8.15 打开proteus8.15 - 新建项目 - 改名 - 一直next 鼠标右键 - 放置 - 元件 - From Libraries 搜索Stm32 - 选择stm32f103c8 画出点亮一个LED灯的原理图 提示,各元器件搜索: 主控芯片:stm32 电阻:res LED灯:led 鼠标右键 - 放置 - 元件 - From Libraries 地和VCC 在左侧

    2024年02月08日
    浏览(10)
  • 【stm32】01,今晚,整个32将为你闪烁(GPIO输出,点亮led灯)

    【stm32】01,今晚,整个32将为你闪烁(GPIO输出,点亮led灯)

    往期内容: 【stm32】00亲爱的勇者,在踏上这个波澜壮阔的大陆之前,厉兵秣马,我们即刻出发 各位勇者你们好啊,我是weib。祝贺你们已经厉兵秣马做好在这个世界中闯出一番天地的准备了,也欢迎来到第一个关卡——GPIO的输出操作,闲言少叙让我们进入正题吧。 请各位勇

    2024年02月12日
    浏览(8)
  • 【51单片机】:闪灯、流水灯(从左往右)、流水灯(从右往左)、蜂鸣器。

    【51单片机】:闪灯、流水灯(从左往右)、流水灯(从右往左)、蜂鸣器。

            言归正传,一切都回归本源,从51再来一次,首先就是最简单的点灯大师。         这么些年从51 到  32  再到  arduino  再到  ESP  等等,都是从点灯大师开始的。 于是介绍如下: 闪灯 流水灯(从左往右) 流水灯(从右往左) 蜂鸣器         LED灯的原理:LED是发

    2024年02月11日
    浏览(14)
  • STM32流水灯

    好的,以下是一篇高质量的CSDN博客STM32流水灯文章: STM32是一种强大的单片机芯片,由STMicroelectronics公司研发。该芯片具有高性能、低功耗和广泛的功能集,可广泛应用于工业控制、车载控制、消费电子等领域。在本文中,我们将介绍如何使用STM32实现流水灯的简单例程程序

    2024年02月06日
    浏览(9)
  • stm32实现流水灯

    stm32实现流水灯

    目录 一、STM32F103C8实现流水灯  二、注意事项  三、总结 打开keil,创建新项目 选择对应芯片    实验代码 c语言代码 汇编语言 添加驱动文件   烧录,烧录前设置生成hex文件    构筑完成后在项目文件的Objects文件中会生成hex文件 接好线路  hex文件生成后用mcuisp进行烧录 实

    2024年02月05日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包