STM32学习探究:流水灯的实现

2019-10-21来源: eefocus关键字:STM32  流水灯  GPIO

流水灯的实现

这里我们使用 stm32mini 开发板实现外接流水灯,这里我采用了三个灯(说明问题就可以了)。外接的引脚分别为PA2,PB8,PC13三个引脚,在连接的时候,采用灯的正极接GPIO引脚,负极接GND(这是一种合理的方式)。

注意:虽然接VCC也可以发光,但是这样不是合理的连接方式,而且,发光的情况刚好与接GND的情况相反。


参考的相关资料如下:


时钟使能:

在这里插入图片描述
在这里插入图片描述

端口配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

端口输出:

在这里插入图片描述

具体实现的代码如下:


//led.h文件

#ifndef __LED_H

#define __LED_H  

#include "sys.h"



//LED端口定义

#define LED0 PAout(2)

#define LED1 PBout(8)

#define LED2 PCout(13)


void LED_Init(void); //初始化     

#endif


//led.c文件

#include "sys.h"   

#include "led.h"


void LED_Init(void)

{

//PA2

RCC->APB2ENR|=1<<2;    //使能PORTA时钟          

GPIOA->CRL&=0XFFFFF0FF; 

GPIOA->CRL|=0X00000300;//PA2 推挽输出     

    GPIOA->ODR|=1<<2;      //A2 输出高

//PB8

RCC->APB2ENR|=1<<3;    //使能PORTB时钟          

GPIOB->CRH&=0XFFFFFFF0; 

GPIOB->CRH|=0X00000003;//PB8 推挽输出     

    GPIOB->ODR|=1<<8;      //PB8 输出高

//PC13

RCC->APB2ENR|=1<<4;    //使能PORTC时钟          

GPIOC->CRH&=0XFF0FFFFF; 

GPIOC->CRH|=0X00300000;//PC13 推挽输出     

    GPIOC->ODR|=1<<13;      //PC13 输出高


}


//test.c文件(主文件)

#include "usart.h"

#include "delay.h"

#include "led.h" 


int main(void)

{  

Stm32_Clock_Init(9); //系统时钟设置

delay_init(72);       //延时初始化

LED_Init(); //初始化与LED连接的硬件接口    

while(1)

{

//优化

LED0=1;

LED1=0;

LED2=0;

delay_ms(200);


LED0=0;

LED1=1;

LED2=0;

delay_ms(300);


LED0=0;

LED1=0;

LED2=1;

delay_ms(100);

}


}


注意:代码的每个子文件的最后都有空行,且不能去掉,因为keil软件自身的问题(我也不知道是bug还是别的什么原因,不过都不重要),去掉会报错,也就是说,编程必须以空行结尾。


如果在建立keil文件的时候,还是比较陌生,可以参考我之前的博客:

https://blog.csdn.net/jianbai_/article/details/90580887


总结

这是一个很简单的任务,为了尽量多的使用引脚,我初始化了PA,PB,PC口,当然GPIO口的选择是根据编程人员自己选择的,依据情况而定的。要想完成这个实验,也可以参考程序源码中的跑马灯实验,到时候将GPIO引脚引出来就可以,本质是一样的。


当然,我们可以多用几个灯,效果会更好点,运行成功之后,可以将其封装为一个函数,到时候可以随时调用,也比较方便。但是,如果灯多了,主函数采用上面的方法就比较麻烦,虽然容易懂,但是代码冗长,我们可以采用移位或者数组加循环的方式,这样编程者会比较轻松,代码也不会太长。



关键字:STM32  流水灯  GPIO 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477808.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32智能小车之路之小车启动
下一篇:STM32流水灯的几种实现方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8L低功耗调试总结
STM8L低功耗调试资料准备功耗数据目标实现低功耗资料准备在调试STM单片机相关功能时,习惯性的进入到STM官方论坛进行资料下载。调试STM8功耗也不例外,找到STM8L的应用笔记,选择最热,先看看官方提供的STM8入门文档,入门资料可以选择中文或者英文(STM8L和STM8AL入门)。资料里面有一段话,对功耗调试相当重要:6.6 不使用的 I/O 和特性微控制器都是为多种应用设计的,通常一个应用不会使用 100 % 的微控制器资源。为了避免不必要的功率消耗 (对电池供电应用特别重要),同时提高 EMC 性能,闲置时钟、计数器或 I/O 都不应浮空。 I/O 应该外部强制 (上拉或者下拉到闲置 I/O 引脚),并且不使用的功能应
发表于 2019-11-14
STM8L低功耗调试总结
STM8的停机模式
首先,STM8有三种低功耗模式,即等待、活跃停机和停机。具体它们三者有什么区别自己看官方手册去吧,这里只讲停机模式的应用,其他的一笔带过!一、进入的方式:等待模式进入用的指令是WFI,而活跃停机和停机用的都是halt(),所不同的是,在执行halt指令之前,如果开启了AWU,则是活跃停机,反之则是停机。还有一点要说明的是,在停机模式下独立看门狗是不能养的,而只能养窗口看门狗。二、具体进入的步骤:1、首先,你声明一个标志位,名字自己取。这个标志位是用来判断系统是该处于运行模式还是处于停机模式的。我这里用fPowerOn_flag,如下:bool fPowerOn_flag = FALSE;有了这个标志位以后就写下面的部分了:int
发表于 2019-11-14
halt低功耗模式
1. stm8l152有5种低功耗模式,wait mode, low power run mode, low power wait mode, active-halt mode, halt mode.2. 在halt模式下,cpu和外设时钟停止,可以通过外部中断或者复位来唤醒。3. 本实验设计为:led灯亮,紧接着进入halt模式,有按键时,中断,快速唤醒,led灯灭。     PWR_FastWakeUpCmd(ENABLE);  //快速唤醒使能     //所有IO输出低电平    GPIO_Init(GPIOA
发表于 2019-11-14
STM8L051低功耗模式测试文档
STM8L051的五种低功耗模式wait ,low power run mode,low power wait mode,Ative-Halt mode,Halt mode。WAIT  mode  在等待模式,CPU的时钟是停止的,被选择的外设继续运行。WAIT mode 分为两种方式:WFE,WFI。WFE是等待事件发生,才从等待模式中唤醒。WFI是等待中断发生,才从等待模式中唤醒。low power run mode  在低功耗运行模式下,CPU和被选择的外设在工作,程序执行在LSI或者LSE下,从RAM中执行程序,Flash和EEPROM都要停止运行。电压被配置成Ultra Low Power
发表于 2019-11-14
stm8l 低功耗 halt_active模式
第一次尝试做低功耗,芯片stm8l,用的半halt模式1、关于唤醒,可以用外部中断和RTC(stm8l不同的模式用的唤醒方式均不同)2、关于省电,如果没达到理想的电流,一般都是gpio口问题,没用到的都悬浮输入或输出低都是可以的,用到的统一量一下电平,看看哪个状态不对
发表于 2019-11-14
STM8L EXITB一个端口两个中断的实现
void EXTI_Config(void){     EXTI_DeInit();       EXTI_SetPinSensitivity(EXTI_Pin_5,EXTI_Trigger_Falling);     ITC_SetSoftwarePriority(EXTI5_IRQn, ITC_PriorityLevel_1);    GPIO_Init(KEY_PORT, KEY_RT_PIN, GPIO_Mode_In_PU_IT);    EXTI_SetPinSensitivity(
发表于 2019-11-14
小广播
何立民专栏 单片机及嵌入式宝典

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

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