你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
zhjb1 提问时间:2017-3-30 18: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
收藏 1 评论1 发布时间:2017-3-30 18:00

举报

1个回答
aoxiangwode2008 回答时间:2017-3-30 18:55:21
顶一下。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版