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/ic477807.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32流水灯的几种实现方法
下一篇:嵌入式ARM学习知识

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

推荐阅读

stm32正点原子学习笔记(29)独立看门狗实验
; IWDG_ReloadCounter(); 9     IWDG_Enable();10     11 }iwdg.h1 #ifndef __IWDG_H2 #define __IWDG_H3 4 #include "stm32f10x.h"5 6 void iwdg_init(uint8_t IWDG_Prescaler,uint16_t Reload);7 8 9 #endifmain.c 1 #include "exti.h" 2 #include "
发表于 2019-11-11
stm32正点原子学习笔记(29)独立看门狗实验
stm32独立看门狗时间设置
//prer:分频数:0~7(只有低 3 位有效!) rlr:自动重装载值,0~0XFFF.//分频因子=4*2^prer.但最大值只能是 256!//rlr:重装载寄存器值:低 11 位有效//时间计算(大概):Tout=((4*2^prer)*rlr)/32 (ms).void IWDG_Init(u8 prer,u16 rlr){IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //取消寄存器写保护IWDG_SetPrescaler(prer); //设置 IWDG 分频系数IWDG_SetReload(rlr); //设置 IWDG 装载值IWDG_ReloadCounter
发表于 2019-11-11
STM32的IWDG(独立看门狗)详细用法
章参考资料:《STM32F4XX 中文参考手册》IWDG 章节。1、IWDG简介:  STM32 有两个看门狗,一个是独立看门狗另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看门狗号称警犬,本章我们主要分析独立看门狗的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。  2 、IWDG功能框图剖析①独立看门狗时钟    独立看门狗的时钟
发表于 2019-11-11
STM32的IWDG(独立看门狗)详细用法
STM32独立看门狗:你看狗都独立了
参考GIT:STM32--软看门口--不需要任何硬件支持--它在IC里面已经集成了。(算是独立看门狗的误解吧)一个倒计数,减减减减减减,减到0就会触发一个系统复位信号也就是单片机重启了。喂狗呢?就是隔一段时间就给这个倒计数重现装载数据,保持它不要到0.头文件:#ifndef _WDG_H_#define _WDG_H_ void watch_dog_init(void);void feed_dog(void); #endif 实现:#include "stm32f10x_iwdg.h"#include "wdg.h"void watch_dog_init
发表于 2019-11-11
stm32f0 hal adc配置
Clock Prescaler:和系统时钟同步并且二分频Sampling Time :采样时间,采样时间是你通过寄存器告诉STM32采样模拟量的时间,设置越长越精确
发表于 2019-11-11
stm32f0 hal adc配置
STM32 MFRC522 IC读卡 程序及原理图
#include "stm32f10x.h" ///////////////////////////////////////////////////////////////////////MF522命令字/////////////////////////////////////////////////////////////////////#define PCD_IDLE              0x00               //取消当前命令#define
发表于 2019-11-11
STM32 MFRC522 IC读卡 程序及原理图
小广播
何立民专栏 单片机及嵌入式宝典

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

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