STM32学习1:GPIO输出实验——点亮三色LED

发布者:Blissful567最新更新时间:2021-03-25 来源: eefocus关键字:STM32  GPIO输出 手机看文章 扫描二维码
随时随地手机看文章

一、概述:


1、发光二极管简介


发光二极管是半导体二极管的一种,可以把电能转化为光能,常简写为LED。常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压约为5V。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算:


R = (E - UF)/IF


式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。LED广泛应用于各种电子电路、家电、仪表等设备中,做电源或电平指示。


2、STM32 GPIO简介


STM32F4每组通用I/O 端口包括4 个32 位配置寄存器(MODER、OTYPER、OSPEEDR 和PUPDR)、2 个32 位数据寄存器(IDR 和ODR)、1 个32 位置位/复位寄存器(BSRR)、1 个32 位锁定寄存器(LCKR) 和2 个32 位复用功能选择寄存器(AFRH 和AFRL)等。


GPIO可以配置成以下8种工作模式:


浮空输入:此端口在默认情况下什么都不接,呈高阻态,这种设置在数据传输时用的比较多。 上拉输入:上拉输入模式与浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,这个上拉电阻的阻值介于30K~50K欧姆,CPU可以随时在输入数据寄存器的另一端,读出I/O端口的电平状态。这种模式的好处在于我们什么都不输入时,由于内部上拉电阻的原因,处理器会觉得我们输入了高电平,这就避免了不确定的输入。该端口在默认情况下输入为高电平。 模拟功能:STM32的模拟输入通道的配置很简单,信号从I/O端口直接进入ADC模块。此时,所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此输入数据寄存器将不能反映端口上的电平状态,也就是说,模拟输入配置下,信号不经过输入数据寄存器,CPU不能在输入数据寄存器上读到有效的数据。该输入模式,使我们可以获得外部的模拟信号 开漏输出:开漏输出不可以直接输出高电平,开漏输出的输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。 开漏复用输出:GPIO的基本功能是普通的I/O,而STM32有自己的各个功能模块,这些内置外设的引脚是与标准GPIO复用的,当作为这些模块的功能引脚时就叫复用。开漏复用输出功能模式与开漏输出模式相比,不同的是输出控制电路的输入,是和片上外设的输出信号相连即与复用功能的输出端相连,此时,输出数据寄存器在输出通道被断开。 推挽复用输出:推挽复用输出功能模式与推挽输出模式相比,不同的是输出控制电路的输入,是和片上外设的输出信号相连,即与复用功能的输出端相连,而输出数据寄存器在输出通道被断开。


二、硬件电路:

在iCore3双核心开发板中,采用一个独立的红绿蓝三色LED与STM32F407相连,限流电阻为1K。其中,红色LED与PI5引脚相连,绿色LED与PI6引脚相连,蓝色LED与PI7引脚相连。


三、实验原理:

本实验通过STM32的三个GPIO口驱动三色LED的三个通道,将GPIO设置为推挽输出模式,采用灌电流的方式与LED连接(如图1-2所示),GPIO输出高电平LED熄灭,GPIO输出低电平LED点亮,通过控制GPIO输出的电平高低从而控制LED的亮灭。


四、源代码:


1、主函数


/*


* Name : main


* Description : ---


* Author : ysloveivy.


*


* History


* --------------------


* Rev : 0.00


* Date : 11/21/2015


*


* create.


* --------------------


*/


int main(void)


{


int i;


led.initialize();


//三色LED交替闪烁


while(1){


LED_RED_ON;


LED_GREEN_OFF;


LED_BLUE_OFF;


for(i = 0;i < 10000000;i++);


LED_RED_OFF;


LED_GREEN_ON;


LED_BLUE_OFF;


for(i = 0;i < 10000000;i++);


LED_RED_OFF;


LED_GREEN_OFF;


LED_BLUE_ON;


for(i = 0;i < 10000000;i++);


}


}


2、GPIO初始化


* Name : initialize


* Description : ---


* Author : ysloveivy.


*


* History


* --------------------


* Rev : 0.00


* Date : 11/21/2015


*


* create.


* --------------------


*/


static int initialize(void)


{


GPIO_InitTypeDef GPIO_uInitStructure;


//LED IO初始化


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);


GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; //初始化连接三色LED灯的IO端口


GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_OUT; //设置端口为输出模式


GPIO_uInitStructure.GPIO_OType = GPIO_OType_PP; //设置输出类型为推挽输出模式


GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉输出


GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz; //设置速度等级


GPIO_Init(GPIOI,&GPIO_uInitStructure);


//PI5、PI6、PI7、接三色LED灯,置高电平,灯熄灭


GPIO_SetBits(GPIOI,GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);


return 0;


}


void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)


这个函数两个参数,第一个参数是用来指定需要初始化的GPIO对应的GPIO组,取值范围为GPIOA~GPIOK。第二个参数为初始化参数结构体指针,结构体类型为GPIO_InitTypeDef。


结构体定义为


typedef struct{


uint32_t GPIO_Pin; //设置IO端口


GPIOMode_TypeDef GPIO_Mode; //设置端口工作模式


GPIOSpeed_TypeDef GPIO_Speed; //设置端口的速度等级


GPIOOType_TypeDef GPIO_OType; //设置端口的类型


GPIOPuPd_TypeDef GPIO_PuPd; //设置上下拉


}GPIO_InitTypeDef;


五、实验现象:


iCore3双核心板上与ARM相连的三色LED(PCB上标示为ARM·LED),红色、绿色、蓝色交替点亮。


关键字:STM32  GPIO输出 引用地址:STM32学习1:GPIO输出实验——点亮三色LED

上一篇:单片机上的按键检测框架
下一篇:中断与事件关系的解剖

推荐阅读最新更新时间:2024-11-17 11:07

stm32专题二十九:Flash 读写保护
设置Flash的读写保护,其实就是操作内部Flash的选项字节。 选项字节在内部Flash的主存储页之后,由于是Flash,不能像内存RAM一样随意写入。由于Flash的写入特性,只能将 1 写成 0,而如果要确保写入数据的绝对正确,则需要先擦除再写入。如果直接对Flash写入,则只能确保写入 0 值是正确的。 选项字节,可以认为是掉电不会丢失的寄存器(Flash空间)。就是用Flash介质来存储配置,要修改选项字节,跟修改Flash一样。 RDP 读保护字节描述(可以通过j-link或st-link读Flash 加密等): RDP配置方式: 2个数据字节 Data0 Data1 3 设置写保护 RDP
[单片机]
<font color='red'>stm32</font>专题二十九:Flash 读写保护
STM32中断NVIC的概念及中断编程步骤
前言 STM32中断非常强大,每个外设都可以产生中断 提示:以下是本篇文章正文内容 一、NVIC 简介 NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。 1.NVIC 寄存器简介 NVIC 结构体定义,来自固件库头文件:core_cm3.h 在配置中断的时候我们一般只用 ISER、ICER 和 IP 这三个寄存器,ISER 用来使能中断,ICER 用来失能中断,IP 用来设置中断优先级。 2.NVIC 中断配置固件库 固件库文件 core_cm3.h 的最后,还提供了 NVIC 的一些函数,这些函数遵循 CMSIS 规则 二、 优先级的定义 1.优先级定义
[单片机]
<font color='red'>STM32</font>中断NVIC的概念及中断编程步骤
STM32之独立看门狗和窗口看门狗定时器
STM32F10系列芯片内置了2个看门狗,提高了更高的安全性等好处。独立看门狗(IWDG)是由专门的40KHz的低速时钟驱动,即使主时钟发生故障也仍然有效。 IWDG的主要特征有自由运行的递减计数器,时钟由独立的RC振荡器提供,看门狗被激活后,则在计数器计数至0x000时产生复位。 WWDG的主要特征有可编程的自由运行递减计数器,条件复位:当递减计数器的之小于0x40,若看门狗被起动则产生复位,要是在窗口外被重新装载,要是看门狗被起动,则产生复位;如果启动了看门狗并且允许中断,当递减计数器等于0x40是产生早期唤醒中断(EWI),他可以被用于重装载计数器以避免WWDG复位。 以下介绍独立看门狗库函数的使用方法。
[单片机]
stm32的can总线理解及应用
CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。 它的通信速度较快,通信距离远,最高1Mbps(距离小于40米),最远可达10千里(速率低于5Kbps)。在总线空闲时,所有单元都可以发送消息(多主控制),而两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。 CAN协议经过ISO标准化后有
[单片机]
一种STM32微控制器处理电机控制的设计和实现
变频器是利用电力半导体器件的通断作用将工频电源变换为另一频率的电能控制装置,能实现对交流异步电机的软起动、变频调速、提高运转精度、改变功率因数、过流/过压/过载保护等功能。变频器集成了高压大功率晶体管技术和电子控制技术,得到广泛应用。变频器的作用是改变交流电机供电的频率和幅值,因而改变其运动磁场的周期,达到平滑控制电动机转速的目的。变频器的出现,使得复杂的调速控制简单化,用变频器+交流鼠笼式感应电动机组合替代了大部分原先只能用直流电机完成的工作,缩小了体积,降低了维修率,使传动技术发展到新阶段。本文将探讨基于ARM的标准微控制器如何在一个被DSP和FPGA长期垄断的市场上打破复杂的控制模式,我们将以意法半导体的基于Cortex-M
[单片机]
一种<font color='red'>STM32</font>微控制器处理电机控制的设计和实现
stm32 库文件_line 函数
定义   内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是否能形成内联函数,需要看编译器对该函数定义的具体处理。 动机   内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。 如果没有内联函数,编译器可以决定哪些函数内联 。 程序员很少或没有控制哪些职能是内联的,哪些不是。 给这种控制程度,作用是程序员可以选择内联的特定应用 。 函数内联问题   除了相关的问题, 内联扩展一般,语言功能作为一个内联函数可能不被视为有价值的,因为它们出现的原因,对于一个数字:
[单片机]
STM32CubeMX学习教程之一:GPIO输出之跑马灯
完整源码下载: https://github.com/simonliu009/STM32CubeMX-GPIO-Control 软件版本: STM32CubeMX V4.25.0 System Workbench V2.4 固件库版本: STM32Cube FW_F1 V1.6.1 硬件:OneNet 麒麟座V2.3 在STM32CubeMX中新建项目,选择正确的MCU型号 首先设置RCC和SYS,如下图 然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图 GPIO设置 PC7, PC8, PA12和 PC10为GPIO_OUTPUT, (这是麒麟座V2.3的四
[单片机]
基于STM32的MDK程序启动
;//HeapSize(inBytes) 0x0-0xFFFFFFFF:8 ;// Heap_SizeEQU0x00000020;//定义堆空间大小 AREAHEAP,NOINIT,READWRITE,ALIGN=3;//定义一个数据段,8字节对齐 __heap_base Heap_MemSPACEHeap_Size;//保留Heap_Size的堆空间 __heap_limit;//标号,代表堆末尾地址,后面有用 PRESERVE8;//指示编译器8字节对齐 THUMB;//指示编译器为THUMB指令 ;VectorTableMappedtoAddress0atReset AREARESET,DATA,READONLY;//
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved