stm32 mbed 入门教程(三)----开关

目录

1.DigitalIn(数字输入)

2.怎么实现DigitalIn的高低电平

3.虚接


stm32 mbed 入门教程(三)----开关_第1张图片

上期教程stm32 mbed入门教程(二)---点亮第一盏灯

我们通过DigitalOut数字输出,控制小灯的亮和灭的状态。那么我们可曾想过,当我们把程序烧录进mbed板子时,我们能不能在mbed跑程序运行的过程中通过对mbed的一些操作实现对mbed的一些控制。答案是肯定的!既然存在数字输出(DigitalOut),那么也就存在数字输入(DigitalIn)------这里我把它形象的比作开关

1.DigitalIn(数字输入)

数字输入和数字输出在逻辑中只能对应0和1这两个数值,0代表低电平,1代表高电平,那么对于我们的DigitalOut,我们在程序中通过引入引脚,然后再在程序中对这个引脚的输出状态进行设定,然后通过引脚的输出电平状态实现对外设的使用。那么数字输入DigitalIn则恰恰相反,当我定义一个引脚为数字输入DigitalIn时,我们可以外部控制这个引脚高电平和低电平从而起到开关的作用。我们先来看一个程序。

#include"mbed.h"
#include"platform/mbed_thread.h"

DigitalIn switch1(D5);
DigitalOut redled(D4);
DigitalOut greenled(D3);
int main()
{
    while(1){
    if(switch1==1)
{
    redled=1;
    greenled=0;
}else{
   redled=0;
   greenled=1;
}


}
}

这里我们可以看到,我们定义了一个D5引脚上的DigitalIn,命名为siwtch1,然后定义了两个输出引脚D3和D4,分别用于控制红灯和绿灯的亮与灭。注:mbed板子上左边的D7和D8不能使用,其他D口都可以用作数字输入和数字输出,右边的A口中如果看到每个引脚的标志信息有DAC则可以使用数字输入和输出。我们可以看到我们在if-else 语句中使用了我们输入的引脚,联系c语言和这里的关系,在c语言中我们在使用if-else语句时,我们是不是需要输入scanf对程序进行交互,那么在博主个人看来,DigitalIn的数字输入其实可初略的理解我是我们与mbed板子的一个人机交互。

2.怎么实现DigitalIn的高低电平

那么对于初学者来说,问题来了,我们怎么给数字输入的引脚高电平和低电平呢?这里我们继续来研究一下我们的板子信息,看下图:stm32 mbed 入门教程(三)----开关_第2张图片

我们可以看到mbed板子右边倒数第二个有个3v3的标志,这个引脚是mbed的一个电源口,始终持续输出3.3v左右的电压。那么我们说高电平为1,低电平为0.那么对于上述程序,当我们通过杜邦线 把3v3口与D5引脚相连,则给了这个引脚高电平,那么此时switch1则为逻辑值1.那么如果杜邦线一端不接3v3呢?会出现什么情况?这里就需要考虑到接下来要讲的虚接问题

3.虚接

首先我们要搞清楚,什么是虚接?顾名思义,就是连接在数字输入引脚的杜邦线的另一端没有接入任何地方,在空气中悬空,则称为虚接。如果对这个不能理解的话,可以自己尝试尝试。

那么我们如何解决这个问题呢?因为大部分时候我们希望在不接3v3的时候,此时为低电平,数字输入的引脚逻辑值为0.

stm32 mbed 入门教程(三)----开关_第3张图片

这个就是处理虚接的一些小函数。如果在定义数字输入引脚加上PullDown,就说明如果针脚悬空,电压肯定小于1.6,则判断为0.那么PullUp则同理,判断为1.PullNone则是不确定的。为了达到上诉lab的效果,我们自然会选择PullDown。

那么修改后的代码如下:

#include"mbed.h"
#include"platform/mbed_thread.h"

DigitalIn switch1(D5,PullDown);
DigitalOut redled(D4);
DigitalOut greenled(D3);
int main()
{
    while(1){
    if(switch1==1)
{
    redled=1;
    greenled=0;
}else{
   redled=0;
   greenled=1;
}


}
}

注:如果在学习过程中出现任何问题,私信博主,互相交流。如果博文中有出现错误的地方请批评指正。关注螺丝小工,互相学习探讨。

你可能感兴趣的:(stm32,mbed,保姆级入门教程,c语言,单片机,stm32)