历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | STM32学习探究:流水灯的实现

2019-10-21 来源:eefocus

流水灯的实现

这里我们使用 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引脚引出来就可以,本质是一样的。


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



推荐阅读

史海拾趣

BeagleBoard公司的发展小趣事

随着产品线的不断丰富和品质的不断提升,BeagleBoard公司在市场上逐渐获得了更多的认可。他们不仅在国内市场取得了显著的成绩,还积极拓展国际市场,与全球范围内的开发者和企业建立了广泛的合作关系。通过与合作伙伴的共同努力,BeagleBoard的产品逐渐渗透到各个行业领域,为嵌入式系统的发展做出了重要贡献。

Excel-Display Corporation公司的发展小趣事

EDC深知人才是企业发展的核心动力。因此,公司一直致力于人才培养和团队建设。

公司建立了完善的人才培养机制,为员工提供各种培训和学习机会,帮助他们不断提升自己的专业能力和综合素质。同时,EDC还注重员工的福利待遇和职业发展,为员工创造了一个良好的工作环境和发展空间。

在团队建设方面,EDC注重营造积极向上的企业文化和团队合作精神。公司定期组织各种团队活动和文化交流活动,增强员工的凝聚力和归属感。这些举措不仅提高了员工的工作积极性和效率,也为公司的长远发展提供了有力保障。

艾谱科(Epticore)公司的发展小趣事

艾谱科公司深知技术创新的重要性。为了保持产品的竞争力,公司不断加大研发投入,积极引进高素质人才,并与国内外知名科研机构建立合作关系。在研发团队的努力下,艾谱科不断推出具有创新性的产品,如低功耗处理器、高速数据传输模块等。这些新产品不仅提升了公司的市场竞争力,也为客户提供了更加优质的产品选择。

Corsair Memory Inc公司的发展小趣事

进入90年代后期,Corsair再次调整其产品策略,由生产标准内存转变为生产高于规格的内存,即超频内存。这一决策迎合了当时市场对高性能内存的需求,Corsair的超频内存迅速在市场上获得了认可。其产品的超级性能专为极大需求的应用软件而设,也一直被应用关键的服务器及极高性能的工作站(包括游戏系统)上。

BESTECH公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

AXSEM公司的发展小趣事

进入90年代后期,Corsair再次调整其产品策略,由生产标准内存转变为生产高于规格的内存,即超频内存。这一决策迎合了当时市场对高性能内存的需求,Corsair的超频内存迅速在市场上获得了认可。其产品的超级性能专为极大需求的应用软件而设,也一直被应用关键的服务器及极高性能的工作站(包括游戏系统)上。

问答坊 | AI 解惑

全国大学生电子设计竞赛历年试题

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 全国大学生电子设计竞赛历年试题  …

查看全部问答>

自己组装生产摄像机优势在哪?

本人从事安防行业5年,一路走来,一直在做监控摄像机这一块,发现自己组装生产摄像机,有以下几大优势,供大家参考: 第一:摄像机本身组装很简单,技术含量不高,不如自己动手,还学会了组装,与摄像机内部结构。 第二:自己组装生产摄像机,价格 ...…

查看全部问答>

3D报纸引领阅读潮流 成本与内容成制约发展瓶颈

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 自2009年年底起,3D在国内成为了“时尚”的代名词,继3D电影《阿凡达》、《爱丽丝梦游仙境》在中国市场赚得盆满钵满,3D似乎也成为了报刊企业的又一掘金点。   2010年4月16日,湖北《十堰晚 ...…

查看全部问答>

关于开发CDMA的通信模块!

先祝各位达人元旦快乐! 我老板现在想开发CDMA的通信模块,就是网上很多卖的那种,可以通过串口或其他通用接口进行CDMA无线通信,但我查了很长时间仍然没有头绪……望各位达人指点一二: 用于开发CDMA模块一般都有什么芯片?我看网上大部分都是高 ...…

查看全部问答>

请教关于Powerpc文件系统的问题

Powerpc现在编译的文件系统是jff2格式,用串口线先传倒powerpc的RAM里,再复制进flash,但是现在文件系统似乎限制了大小,如果传3M左右就能正常启动,如果大于4M就不能正常启动,系统会不停重启。但是如果系统能正常启动后,用FTP上传文件,则没有 ...…

查看全部问答>

workbench!!

之前用的是vxworks+Tornado开发方式,一切比较顺利!! 最近单位买了最新版的vxworks,开发环境是workbench,刚接触,本打算先做启动软盘尝试启动vxworks,可发现每次编译后,目标机出现v1.6++++++++++++++++++然后又重起,尝试了各种方法,都是这样,请各位 ...…

查看全部问答>

小弟碰到个很奇怪的问题

S3C44B0X那块板子,能在线调试并且LCD显示正常,但是将程序烧录进去后,却发现LCD没有显示了。这是怎么回事呢?有哪位大虾遇到过同样的问题吗? 做LED实验却不管在线调试还是将程序烧录进去,都能得到正确的结果。…

查看全部问答>

【芯币兑换】AVR ATmega16学习板标准原理图

下面是最终版原理图,请大家参考 …

查看全部问答>

有湖北的吗?今年怎么还不出设备清单??

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 都12号了,还不出设备清单,往年都有的,武大咋搞的!!!  …

查看全部问答>