学习STM32mini版(流水灯)

用STM32mini版写一个流水灯

今天,我用STM32mini版来写一个流水灯,自己的能力有限,是个小白,有不完美或者不对的的地方还望赐教。不喜勿喷。
学习一个新东西是一件很开心的事情,但是,自学一件从来没有接触过的事物,或许有点恶心。但是对于32单片机和51单片机的自学者来说,没有什么是比自己点亮流水灯更让人兴奋地了。确实,点亮了流水灯,剩下的无非就是学习其他硬件资源的控制方法。
本文接下来会介绍,流水灯的点亮方式和操作过程中遇到的问题及其解决办法。
为什么学习每一种板子都要从流水灯开始?因为点亮了流水灯,就足以表明学习者对GPIO口可以进行简单操作了,而且对后续模块学习的调试环节也有一定的指示作用。
本次实验用的是STM32mini来进行操作的(不管什么版本,基本操作都一样)。其电路图如图1-1所示。在这里插入图片描述
在这里插入图片描述

要想点亮流水灯,就需要先点亮一个LED灯。

点亮一个LED灯

LED灯是怎样被点亮的呢?众所周知,LED都是单向导电的,简单来讲,在一个固定的通电方向上,只要LED中流过足够的电流,它就发光。现在就是不知道这个足够的电流是多少。那上面图中的LED接口电路来说,它是由右向左导通的,以LED0为例,当LED0右端PB5输出高电平时,电阻和LED两端的总电压为3.3V,那么就由欧姆定律很容易的就可以判断出LED0的电流不会超过3.3mA,因为LED0内部也是有电阻的,因此可以判断LED0发光时流经的电流是小于3.3mA的,一般为1~2mA就会发光。
现在的关键问题是什么呢?问题就是“如何实用程序来控制LED0的PB5输出高电平?”
控制PB5输出高电平的方法可以概述为:
1、找到PB口的控制寄存器,将其设置为输出模式;
2、找到PB口的数据寄存器,将该寄存器中控制PB5的控制位的值设置为1;
3、右端管脚就会输出高电平,相应的LED就会被点亮。
接下来就需要查看具体的PB口控制寄存器、PB口数据寄存器的具体地址以及使用方法。不同的处理器的操作方法都是相似的,不同的寄存器名字可能有所不同,各个寄存器的地址可能有所不同,这样就会使操作变得十分繁琐,为了解决这个问题ST公司的工程师已经把这些东西以固件库的形式提供给广大用户了,使用固件库,自学者只需要了解固件库提供的函数然后调用即可。(笔者将会在另一篇文章中来具体介绍固件库)

流水灯程序分析

尽管还没有介绍固件库函数,但是还是建议看完以下代码的分析。不用通篇理解只需要看一下库函数使用的具体例子即可。咱们日后会对程序段中使用到的函数进行具体的分析。

#include"stm32f10x_gpio.h"

#define Led1_On()    GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define Led1_Off()   GPIO_ResetBits(GPIOB,GPIO_Pin_5)

#define Led2_On()    GPIO_SetBits(GPIOD,GPIO_Pin_6)
#define Led2_Off()   GPIO_ResetBits(GPIOD,GPIO_Pin_6)

#define Led3_On()    GPIO_SetBits(GPIOD,GPIO_Pin_3)
#define Led3_Off()   GPIO_ResetBits(GPIOD,GPIO_Pin_3)

第1行,既然使用了固件库中的函数,那么就需要包含库函数的头文件了。
第2~3行,实现对PB引脚的位置和复位操作,也就是点亮LED,熄灭LED。
第4~7行,实现对PD6、PD3引脚的位置和复位操作。

void LED_Init(void);
void Delay(__IO uint32_t nCount);

第8~9行声明了两个函数。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦影樱飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值