STM32L476R与Mbed快速入门——流水灯(mbed)

今年呢因为疫情影响,通院祖传的项目设计课程可能会延期。但是往年的项目设计的节奏是十分紧的,按照周检查的进度只能刚好做完,几乎没有调试时间。

目前呢CSDN更新比较慢,知乎已经更到中断了,所以感兴趣的可以先移步知乎

我数了一下,这周应该是第六周了,如果按照以往的进度来看,你应该已经完成了,外观设计,网页设计,海报和视频设计,并且能使用FPGA驱动伺服电机,成功点亮流水灯,画出你工图最高水平的机械设计图——没错要有三视图,实现了FPGA与STM32的通信,能够使用I²C读取颜色传感器和距离传感器的数据。

由于之前拖更严重,今天先补一下第三周的检查内容:点亮流水灯。已经搞定流水灯的同学可以直接跳过,没有的呢可以先看一看。

首先输入网址:https://os.mbed.com/进入mbed os进行在线编译。

新建一个工程:

右击 My Programs,然后选择 New Program 弹出对话框,要求添加开发板平台。

在这里插入图片描述
单击 Add Platform 按钮,弹出网页,所有支持 mbed 的开发板都列出了。选 择所需要的 ST 公司的 NUCLEO-L476RG 开发板点击下。
在这里插入图片描述
弹出对应开发板的详细介绍,点击右侧 Add to your Mbed Compiler 按钮。
在这里插入图片描述
再次打开编译器,要用的开发板已经添加进 IDE 了。
在这里插入图片描述
2. 在 Template 下拉菜单里,选择 Blinky LED test for the ST Nucleo boards, 然后单击 OK 按钮。

在这里插入图片描述
3. 新的程序文件夹将创建在 My Programs 目录下,双击打开main.cpp文件
在这里插入图片描述
4. 我们现在来看一下每一行代码的含义。

首先 #include “mbed.h”

这个"mbed.h"可以理解为大一时经常用的"stdio.h"是一个比如导入的头文件。只不过这里面包含的不仅仅是printf和scanf,还有很多单片机操作指令。比如下面紧接着的这行:

DigitalOut myled(LED1);

DigitalOut A(B)是一个特殊的命令,其含义是将端口B****设置为数字(0-1)输出(在某种程度上,他也实现了 bool A的作用,也就是定义了一个布尔变量A),并且将端口B命名为A。这样以后在调用端口B的时候,就可以直接使用A来调用,提高了程序的可读性。这里的含义就是把LED1端口定义为“myled”,并且这个端口只能输出高(3.3v)或低(0v)电平。

下面我们来逐句理解主程序。

int main() {
    
    
    while(1) {
    
    
        myled = !myled; // LED is ON
        wait(0.8); // 800 ms
    }
}

int main 自然是进入主程序的意思。这里最让新手小白困惑的可能是while(1)的存在,因为这样会进入一个死循环,而在大一的C语言课中,几乎是没有使用过死循环的,那么这里为什么要使用一个死循环呢。

其实也很简单我们肯定想一开机STM32就不停的闪烁流水灯,直道关机断电才停止。while(1)的作用就是保证了流水灯的一直闪烁。

之前我们已经定义过了myled是值端口LED1,并且呢他是一个布尔变量。布尔变量对自己取反,自然就实现了0-1的交替。而0,1又分别对应了高低电平,自然也就实现了LED灯的亮灭。

wait(t)是一个延时指令,你可以理解为必须延时t秒后,系统才会执行下一条指令,也就是再次进入循环体,执行myled =!myled。调节t的大小,就可以控制LED的闪烁频率,t越小,闪烁的频率越大。

当我们编写完后,点击上方的compile
在这里插入图片描述
点完后系统会自动保存你的程序内容,并自动下载一个.bin文件。连接STM32L476R,电脑会显示一个空间挺大的可移动磁盘,什么都不要懂,直接把.bin文件拖进去。然后这个可移动磁盘会自己弹出。点一下板子上的黑色RESET按钮,就可以观察到流水灯的效果了。

猜你喜欢

转载自blog.csdn.net/yikuanglancheng/article/details/105407335