今年呢因为疫情影响,通院祖传的项目设计课程可能会延期。但是往年的项目设计的节奏是十分紧的,按照周检查的进度只能刚好做完,几乎没有调试时间。
目前呢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按钮,就可以观察到流水灯的效果了。