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

查看: 802|回复: 1

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

[复制链接]

82

主题

636

回帖

121

蝴蝶豆

版主

最后登录
2020-7-12
发表于 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

主题

380

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-11-26
发表于 2017-3-30 18:55:21 | 显示全部楼层
顶一下。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版