历史上的今天
今天是: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引脚引出来就可以,本质是一样的。
当然,我们可以多用几个灯,效果会更好点,运行成功之后,可以将其封装为一个函数,到时候可以随时调用,也比较方便。但是,如果灯多了,主函数采用上面的方法就比较麻烦,虽然容易懂,但是代码冗长,我们可以采用移位或者数组加循环的方式,这样编程者会比较轻松,代码也不会太长。
上一篇:STM32流水灯的几种实现方法
下一篇:嵌入式ARM学习知识
史海拾趣
|
请教一个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写数据寄存器,进入死 ...… 查看全部问答> |
|
我在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是不是就是人们常说的器 ...… 查看全部问答> |




