STM32实验一:GPIO之流水灯

发布者:温暖心绪最新更新时间:2019-10-19 来源: eefocus关键字:STM32  GPIO  流水灯 手机看文章 扫描二维码
随时随地手机看文章

前面写过一篇关于STM32单片机的GPIO的文章,本来是打着从实用角度来做的实验,但是发现不积跬步无以至千里啊,咱们从头开始,先做一个最简单的,入门级的,单片机系统中的hello world,流水灯实验!


我手中有一个神舟3的开发板,我就用这个板子来做实验,板子中的实验一共用到4个LED灯来做流水灯的实验,这里我们也用这4个灯,他们分别是GPIOF中的6、7、8、9这4个。


1、首先我们复制我们之前做过的模板工程到一个新建文件夹中,(如,你可以取个名字叫流水灯实验的文件夹)神舟开发板的例程中在项目中添加了两个文件,分别是led.c和led.h,这是一种习惯,每做一个项目的时候都在其中添加一个.c和对应的.h文件,这样可以是工程看起来更加规整!本来我是不想添加这个的,这里为了良好的编程习惯,我们也添加一个!并且我更改了模板文件中的一些名字,在下图中我将标志出来



2、接下来我们来看一下程序,程序一共分为两部分,一个main.c,一个led.c,因为程序比较简单,所以在led.h中我们就不做任何定义了,这也省去了一些麻烦!按照习惯,我们先从main程序看起!


#include "stm32f10x.h"

#include "led.h"

void LED_config(void);//使用函数前先进行函数声明

 

/*******************************************************

                                                      

* 函数名称: delay

*     输入: 无

*     输出: 无

* 功能描述: 延时函数                          

                                                      

*******************************************************/

 

void delay(vu32 nCount)

{

  for(; nCount != 0; nCount--);

}

 

/*******************************************************

                                                      

* 函数名称: main

*     输入: 无

*     输出: 无

* 功能描述: 主函数                         

                                                      

*******************************************************/

 

int main(void)

{

  LED_config(); //调用4个LED灯初始化函数

 

  while(1)

  {

GPIO_ResetBits(GPIOF,GPIO_Pin_6);//第一灯亮

 

delay(800000); //延时

 

GPIO_SetBits(GPIOF,GPIO_Pin_6); //第一灯灭

 

delay(800000); //延时

 

GPIO_ResetBits(GPIOF,GPIO_Pin_7); //第二灯亮

 

delay(800000); //延时

 

GPIO_SetBits(GPIOF,GPIO_Pin_7); //第二灯灭

 

delay(800000); //延时

 

GPIO_ResetBits(GPIOF,GPIO_Pin_8); //第三灯亮

 

delay(800000); //延时

 

GPIO_SetBits(GPIOF,GPIO_Pin_8); //第三灯灭

delay(800000); //延时

 

GPIO_ResetBits(GPIOF,GPIO_Pin_9); //第四灯亮

 

delay(800000); //延时

 

GPIO_SetBits(GPIOF,GPIO_Pin_9); //第四灯灭

 

delay(800000); //延时

  }

}


分析一下程序,LED_config();这个函数是调用了led.c中的函数,一会会贴出led.c文件,GPIO_ResetBits、

GPIO_SetBits这两个函数是库文件为我们提供的GPIO操作函数,我们贴出来看一下


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

  /* Check the parameters */

  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  assert_param(IS_GPIO_PIN(GPIO_Pin));

  

  GPIOx->BRR = GPIO_Pin;

}

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

  /* Check the parameters */

  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  assert_param(IS_GPIO_PIN(GPIO_Pin));

  

  GPIOx->BSRR = GPIO_Pin;

}

这两个函数的作用就是将端口置1或者清0

我们再来看一下led.c文件


void LED_config(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;

 

/* 配置神舟III号LED灯使用的GPIO管脚模式*/

 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE); /*使能LED灯使用的GPIO时钟*/

 

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; 

 

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出模式

 

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  

  GPIO_Init(GPIOF, &GPIO_InitStructure);  /*神州III号使用的LED灯相关的GPIO口初始化*/

}

这里主要就是GPIO的配置,前面我们也说过,一共3个步奏,

1)、使能GPIOD的时钟


2)、填充GPIO的属性结构体


3)、传递参数至初始化函数


这里要注意,我们将管脚模式配置为推挽输出模式,这个需要注意一下,因为之后的实验中我们还会给关键配置成其他的模式


程序编写完毕,编译下载到实验板中完成实验!

关键字:STM32  GPIO  流水灯 引用地址:STM32实验一:GPIO之流水灯

上一篇:初学STM32及GPIO入门之流水灯
下一篇:【STM32】入门 · 流水灯

推荐阅读最新更新时间:2024-11-16 22:13

STM32之关于USART以及波特率的一些思考
一、UART与USART?   UART:通用异步收发器    USART:通用同步和异步收发器   同步:发送端发送数据后,接收端回应后才发下一个数据包,是为阻塞模式   异步:发送端发送收据后,不需要等待接收端回应,接着发送下一个数据包,是为非阻塞模式   半双工:允许数据在两个方向上传输,但是某一时间,只允许数据在一个方向上传输   全双工:允许数据同时在两个方向上传输   SPI为同步全双工通信、IIC为同步半双工通信,UART为异步全双工通信、USART为同步或异步通信   UART数据格式:          数据帧格式:开始位、数据位、奇偶校验位、停止位       起始位:开始发送一个字节数据,数据线为逻辑0状态
[单片机]
<font color='red'>STM32</font>之关于USART以及波特率的一些思考
详解STM32中的ADC
ADC简介 STM32F103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次、连续、扫描或间断执行,ADC转换的结果可以左对齐或右对齐储存在16位数据寄存器中。ADC的输入时钟不得超过14MHz,其时钟频率由PCLK2分频产生。 ADC功能框图讲解 学习STM32开发板上的外设时首先要了解其外设的功能框图,如下: 功能框图可以大体分为7部分,下面一一讲解: 电压输入范围 ADC所能测量的电压范围就是VREF- ≤ VIN ≤ VREF+,把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得
[单片机]
stm32使用过程中的注意事项
1.ADC采用值转换成具体的物理量值 ADC采样值在寄存器中是16位整形数据,要转换成具体的电压量,则必须进行换算。例如12位的转换精度,满量程的二进制为0000 1111 1111 1111,对应十进制数为1095,对应的电压为3.3V。所以计算公式为 电压 = (采样二进制值/1096)*3.3(V) 特别注意,转换电压为浮点类型,所以要将采样二进制值强制转换成浮点型。 uint16_t ADC_ConvertValue; float ADCtoVoltage; ADCtoVoltage = ((float)ADC_ConvertValue/4096)*3.3; 2.STM32F0x系列RCC配置
[单片机]
基于Modbus的RS485通讯+STM32+IAR
最近一直在看Modbus相关的内容,也在网上搜罗了许久,发现大部分内容都是基于协议的书面解释,很少有成功的例程供大家参考,在此将自己最近更改调试通过的例子跟大家分享一下,在此要感谢某论坛的xukai871105. 介绍下附件工程:采用的MCU为STM32F103RBT6,ST库版本为3.5版,FreeModbus为1.5版,开发环境为IAR6.3版,调试器为Jlink V8,用到的调试工具为Jobs版的USB转RS485转接板。 话不多说,上图:代码中大部分都有详细的注释: 看看Jobs版的转接板吧: 来个上位机虚拟端Modbus Poll 的效果图: 工程文件打包上传: 基于Modbus的RS485通讯 ST
[单片机]
基于Modbus的RS485通讯+STM32+IAR
STM32软件学习】ST-LINK Utility的使用
STM32 ST-LINK Utility软件主要的功能就是量产(批量下载代码的工具)。 它也是比较实用的一个工具,当我们需要查看芯片FLASH数据时,可以很快定位查找到想要的数据(前提是没有添加保护)。 需要配和STLink使用。 接线,SWD接口。 VCC GND SCLK SDIO和单片机分别相对即可! keil在线使用 选择ST-Linker Debugger 这里务必检查,又没出出现DeviceName,没有出现的话就得,重新检查接线!! 擦除整片扇区,然后选择相应的Flash大小编程算法,比如我用C8T6,那就选对应128K的F10X算法! 最后load到单片机! 使用STM32
[单片机]
【<font color='red'>STM32</font>软件学习】ST-LINK Utility的使用
16-基于单片机的心形流水灯
具体实现功能 系统由STC89C51/52单片机+按键模块+LED灯模块+电源构成。 具体功能: (1)至少10个发光管4种花样自动变换,循环往复; (2)彩灯花样变换的快慢节拍可以手动和自动方式控制,手动控制按钮按一次转换一次;自动控制方式每15秒变换一次,1分钟循环一遍; (3)系统复位清零开关。 设计背景 霓虹灯是城市的美容师,每当夜幕降临时,华灯初上,五颜六色的霓虹灯就把城市装扮得格外美丽。LED数码灯带采用全新的结构和专有技术,主体由高亮度发光二极管(简称LED)通过特殊的专利结构进行连接,运用特有的光学技术与专有的包覆层设计而形成。主要特性是节能、环保、防震、防水,其最大的特点就是发光均匀,360度
[单片机]
16-基于单片机的心形<font color='red'>流水灯</font>
基于STM32物联网开发板(4)--LCD屏
1.概述 屏幕尺寸为1.3寸,分辨率240*240,颜色格式RGB565,驱动IC:ST7789VW; 超大可视角度:大于160°(显示屏中可视角度最大的一种屏幕); 宽电压供电(3V~5V),兼容3.3V和5V电平逻辑,无需电平转换芯片; 采用7线制SPI接口; 工作温度范围为工业级(-20℃~60℃); 军工级工艺标准,长期稳定工作; 硬件接口: 引脚 说明 LEDK PB0背光 CS PA4片选 SCL PA5时钟 SDA PA7主机输出 RES PB1复位脚(电平复位) D/C PC4数据命令选择脚 2.通讯协议 ST7789VW是一款用于262K彩色图形型TFT-LCD的单片
[单片机]
基于<font color='red'>STM32</font>物联网开发板(4)--LCD屏
stm32红外遥控总结
我用的红外遥控是使用的NEC协议,即使用PWM来调制发送的信息 NEC协议,其特征如下: 1、8位地址和8位指令长度; 2、地址和命令2次传输(确保可靠性) 3、PWM脉冲位置调制,以发射红外载波的占空比代表“0”和“1”; 4、载波频率为38Khz; 5、位时间为1.125ms或2.25ms; NEC码的位定义:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us脉冲+560us低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑1应该是560us低+1680
[单片机]
<font color='red'>stm32</font>红外遥控总结
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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