搜索
查看: 1216|回复: 1

[STM32F412] [NUCLEO-F412ZG试用体验] 四、GPIO口的学习实验

[复制链接]

该用户从未签到

82

主题

718

帖子

121

蝴蝶豆

版主

最后登录
2021-1-2
发表于 2017-3-30 18:00:00 | 显示全部楼层 |阅读模式
打开PinNames.h文档,可以看到板载3个LED分别接在PB_0,PB_7,PB_14上,按照Arduino定义,分别为LED1,LED2,LED3,因此控制这3个LED用Arduino定义也可以用PB_x的定义。按照Arduino的定义,双2.54插座上有:4路LED[其中一路接在串口上],1个用户按键,2线UART,4线串口,6路PWM,其中的UART是走的USB串口。这些IO口已经可以完成许多实验了。为了防止实验出问题,我们进入项目文件夹,复制一个main.cpp->mainLed.cpp,打开后一个文件进行操作。见图41。
打开后的文件:
#include "mbed.h"
DigitalOut led1(LED1);
// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main() {
    while (true) {
        led1 = !led1;
        Thread::wait(500);
    }
}
很简单,控制1个LED延时500[不知道是多长,运行后好像是0.5秒]开或关一下。wait等效mS的延时单位。为了更好地理解和掌握GPIO的设置和应用,我们开始以下几个工作:打开PinNames.h和DigitalOut.h两个文档。前一个文档在三中医有较为详细的描述,此处仅仅拿来主义,而打开DigitalOut.h文档可以看到前边注释和定义之后就有一个例子,代码拷贝如下:
* Example:                //例子开始
* @code //代码
* // Toggle a LED        //注释
* #include "mbed.h"        //必须有连接mbed.h函数
*
DigitalOut led(LED1);//对象声明,名称为led(属性为LED1)
* int main() {                //整形主函数main
*     while(1) {        //死循环
*         led = !led;        //led取反——原来led=1,运算后led=0
*         wait(0.2);        //等待0.2秒——浮点数
*     }
* }
* @endcode
比较原来的函数while不同、wait不同,这样就学会了两种描述方法。而Thread::wait(500);是C++中调用线程的写法,很有意思。不理解wait(0.2)与Thread::wait(500)他们有多大区别?以后采用wait(0.2)的写法少敲不少代码。
下边我们改一下程序,让3个LED交替闪烁:
#include "mbed.h"
//Define GPIOs
DigitalOut led1(PB_0);DigitalOut led2(PB_7);DigitalOut led3(PB_14);
//IO Initial
void ioInit(void){led1=0;led2=1;led1=0;}
// main() runs in its own thread in the OS// (note the calls to Thread::wait below for delays)
int main() {
ioInit();
while (true) {
  led1=!led1;led2=!led2;led3=!led3;
  wait(0.1f);
}
}
想法是定义3个Lled1~led3;先定义led1,led3亮,Lled2不亮,这样在循环体中就形成交替闪亮,下载后运行结果确实如此。见图42。

41-添加和删除文件.png
42-led闪烁效果.gif
回复

使用道具 举报

该用户从未签到

8

主题

403

帖子

0

蝴蝶豆

金牌会员

最后登录
2021-7-30
发表于 2017-3-30 18:55:21 | 显示全部楼层
顶一下。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 13:35 , Processed in 0.294502 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表