历史上的今天
返回首页

历史上的今天

今天是: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引脚引出来就可以,本质是一样的。


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



推荐阅读

史海拾趣

Dowosemi公司的发展小趣事

Dowosemi公司一直将产品质量视为企业的生命线。他们建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都进行严格的把控。此外,公司还定期对员工进行质量培训,确保每一位员工都能深刻理解并贯彻执行质量标准。这种对质量的坚持让Dowosemi公司的产品在市场上赢得了良好的口碑。

Gravitech公司的发展小趣事

在电子保护器件领域,Dowosemi公司以其创新的TVS二极管技术崭露头角。该公司研发团队经过数年的努力,成功开发出具有PS级响应速度、大瞬态功率和低漏电流的TVS二极管。这一技术突破大大提高了产品的性能,满足了市场对高效能过电压保护元件的需求。Dowosemi公司凭借这一优势,迅速在市场上确立了领先地位。

BCD Semi(Diodes)公司的发展小趣事

在电子行业的发展过程中,市场波动和风险挑战是不可避免的。某一年,全球半导体市场出现了严重的产能过剩,导致产品价格大幅下跌。面对这一挑战,BCD Semi(Diodes)公司及时调整生产策略,优化产品结构,降低生产成本,成功度过了这一行业寒冬。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

为了进一步提升技术实力和市场份额,ACP Optoelectronic Technology Co Ltd积极寻求与其他企业的战略合作。公司先后与多家知名电子企业签订了技术合作协议,共同开发新产品,共享市场资源。这些合作不仅提升了ACP Optoelectronic Technology Co Ltd的技术水平,也为其带来了更多的商业机会,推动了公司的快速发展。

ERP公司的发展小趣事

为了进一步拓展市场和提高竞争力,电子智链开始寻求与其他企业建立生态合作关系。公司与多家电子制造设备供应商、原材料供应商和物流服务商建立了战略合作关系,共同打造了一个覆盖电子产业全链条的生态圈。这一合作模式不仅为客户提供了更加全面和高效的解决方案,还促进了整个电子产业的协同发展。

BLACK&DECKER公司的发展小趣事

随着公司的不断发展壮大,BLACK&DECKER开始进军国际市场。1993年,公司在中国成立了第一家工厂,这标志着BLACK&DECKER全球化战略的重要一步。此后,公司通过在全球范围内设立生产基地和销售网络,不断扩大品牌影响力。同时,BLACK&DECKER还通过收购其他知名品牌,如得伟(DeWalt)等,进一步巩固了其在电子行业中的领先地位。

问答坊 | AI 解惑

优秀设计的十条戒律

钱又不够了,再上新内容…

查看全部问答>

关于LM3S8962评估板的OLED驱动芯片的中文手册

目前翻译了一些,通过翻译深入理解OLED现实原理,有助于后续项目的升入开发,共享给坛友,不对之处,请指正!…

查看全部问答>

请教一个移植boa的问题

请教一个boa的问题 cgi串口程序在arm上单独运行可以,但是用boa服务器调用该串口程序时,程序报错:不能打开串口。 还有一个问题就是我怎么不能使用post传递数据,user已经改为root 谢谢 …

查看全部问答>

keil MDK启动文件分析---基于LPC2100系列(其实都是相通的)

转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性。MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS1.2编译为25.4KB(都是bin格式),但用MDK编译出来仅有19.5KB( ...…

查看全部问答>

关于MC9S12XS128 单片机之间 SPI通信的一些问题

最近在做一个东西,上面用到了两篇XS128之间的主从机通信一片主机一片从机。下面用A(主机)  B(从机)代替单功形式,A通过直接写数据寄存器吧数据发送到B,B生成中断响应 接收数据。完全好用在尝试A接收B的数据时。首先B写数据寄存器,进入死 ...…

查看全部问答>

TI官网的ADC资料

本帖最后由 dontium 于 2015-1-23 13:13 编辑 大家参考一下 …

查看全部问答>

实现记录

数码管动态扫描实现了秒表、开始、暂停功能。开始/暂停公用一个键,还有一个键用来记录之前暂停的数(之前有多个暂停),要求至少能记录4个以上。求实现记录功能。 开始/暂停函数如下: void key_1 ()  // k1函数{    & ...…

查看全部问答>

在CCS4中编译BIOS项目时出错

我在CCS4中创建了一个“swi_example”的项目(其实是CCS4自带的示例)。再将NewTargetConfiguration.ccxml文件添加,以及 .cmd 文件(复制以前在非dsp/bios项目用过的cmd文件)。 这样,编译时,CCS显示:   .......... --preproc_with_co ...…

查看全部问答>

大家是否知道这个芯片

本帖最后由 dontium 于 2015-1-23 11:40 编辑 我在一个电路上看到一个芯片,应该是TI的,贴片封装,10个引脚,上面第一行写着72 TI,第二行写着JAAQ,大家是否知道啊,还有就是我不太明白这个贴片上写的JAAQ代表什么意思,72是不是就是人们常说的器 ...…

查看全部问答>