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

目录

一.宏观了解

   1.1 板子及其引脚情况

   1.2 面包板的构造

1.3注意事项

二.点亮第一盏LED灯

三.两盏LED灯的切换


一.宏观了解

   1.1 板子及其引脚情况

   如果你是第一次接触单片机,拿到mbed板子的你也许会茫然,也许你会想这个小小的板子能够做哪些事情,真的可以完成一些大型项目吗?答案是肯定的,stm32 mbed板子可以说是小而精致,可以满足很多项目的需求(这是后话了)。首先我们看一下mbed 的整体状况,看下图:

首先我们看到板子左右分别有一列针脚(我们称作引脚),我们发现每个引脚对应很多信息,这些信息大概表述了这个引脚大概能做哪些事情,在后续的学习中我们会逐渐了解,并且在想做一些事情时能够正确的选择引脚。(这里提一下:stm32板子和51板子不同,51是将某些外设也一起焊接到了一个大板子上,所以在使用51时很多时候不需要理解为什么,直接调用函数就能完成一些事情了,而stm32需要通过对引脚的控制然后自己连接外设)。

注意这里每个针脚的准确名字应该是最靠边缘框内里的字符,如PA_2,但是因为这样很麻烦,我们一般都直接叫板子上面刻的字母,比如PA_2针脚我们就叫它A7,代码中也是同样。

 下面这张图是从学长那里偷来的,他对一些常用的引脚功能做了总结:

   1.2 面包板的构造

     首先面包板的使用就是为了更加方便的连接一些外设,然后利用导线将这些外设构成回路就可以使用了。那么面包板的构造是怎么样的?面包板的怎么使用

 这大概就是面包板的内部构造了,其实原理很简单,我们发现两边分别是竖着的铁片连接在一起的,说明面包板左右两边的插口是公共的,中间是由横着的一条一条的铁片组成。所有每小段横着的铁片是公共的,然后又与其他相独立。

 也就是说面包板的最边缘的两列是竖向连通的,这里经常分别用来接3V3和GND,然后靠中间的五个孔是横向连通的,左右两组在中间分隔。下图红线相连的就表示为电路也是相连的

这里接上杜邦线之后,我们可以看到我画出来的红色线代表是等价的 

1.3注意事项

 这里有几个注意事项,非常重要!很可能程序的bug就出自这里。

  • A4A5的ADC只能输入,不能输出 (说实话ADC作为输出的情况很少)

  • D7D8不能用

  • 对于PWM,PWMx/yN与PWMx/y的输出是反向的,比如D1和D3,D0和D6。

    相同的的x代表同样的frequency,同样的y代表同样的占空比,yN相当于占空比为(1-Y)。例如PWM1/2和PWM1/3输出相同的频率的方波,但是占空比可以分别设置。

  • 程序里设置的LED1,是板子上的LD3亮

二.点亮第一盏LED灯

 根据上个教程的内容,打开在线编辑器,然后创建一个项目(这里我给项目命名为:LEDcsdn)

 点击mian.cpp 这是我们写代码程序的地方

 打开之后编译器会自动给你补齐一个程序,这都不重要,我们留下头文件,然后自己写程序。我们使用的语言是c语言,如果对c语言不是很了解(博主建议去b站:翁恺c语言),不需要看完,花半天时间看完循环部分就ok了。

/* mbed Microcontroller Library
 * Copyright (c) 2019 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */

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

//定义一个输出的引脚
DigitalOut firstled(D5);




int main()
{
   while(1){
   firstled=1;
   wait(1);
   firstled=0;
   wait(1);
   }
}

 这里我们发现与c语言不同的地方在于一个DigitalOut函数,这个就是我们刚刚说的定义引脚,DigitalOut是定义一个输出类型的函数,firstled是我们给这个引脚取的名字,然后括号中的D5代表我们选择的引脚。在程序中如果firstled=1,引脚输出3.3v的高电平,如果让firstled=0,引脚输出0v的低电平,然后结合发光二极管:

 长脚正极,短脚负极接地(GND),如果正极为高电平(也就是firstled为1)发光,反之不发光。然后这里我们需要用到一个wait函数和while(1)循环,wait里面的单位是秒,程序的现象是以一秒为间隔进行发光和熄灭。如果不用wait间隔的话,我们会发现我们人眼看不出它的发光,因为程序跑一行的速度大概在十的负9次方,所以如果不用wait,人眼捕捉不到那么快的发光瞬间。while循环是让这种状态一直持续,而不是进行一轮之后就退出程序了。

  也许你在编译完成之后会发现页面最下面显示了warning,这个影响不大,如果想不要warning的话可以使用thread_sleep_for()函数,单位是ms。同时要加一个头文件#include"platform/mbed_thread.h"

WeChat_20220423175010

三.两盏LED灯的切换

竟然我们知道了如何进行引脚的输出,那么我们就可以进行多个灯的一些操作了。那么我们来尝试实现两盏灯的轮流切换吧。

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

DigitalOut firstled(D5);
DigitalOut secondled(D6);


int main()
{
while(1)
{
    firstled=1;
    secondled=0;
    wait(1);
    firstled=0;
    secondled=1;
    wait(1);
}

}

这里无非就是定义两个输出引脚,然后其它原理就是如此。

WeChat_20220423174819

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

猜你喜欢

转载自blog.csdn.net/weixin_64524066/article/details/124363432