当前位置: 首页 > news >正文

【AliOS Things学习笔记】在Developerkit开发板上运行blink例程

本文将介绍怎么样在VScode环境下,将AliOS Tings提供的blink例程在Developerkit开发板上运行起来。
413f8cd9e7ea5426c663ce40bb9ab8b3efc03556
DeveloperKit开发板
在例程中分别用到两个led和一个按钮,上图中用红色的框标识出来。例程正确运行后,会有一个LED按1s的周期闪烁,另外一个LED当按键被按下时,切换输出电平。本文中,各个硬件的分配如下表:
外设名称
对应gpio
实验中的功能
LED1
PB6
每秒闪烁1次
LED2
PE3
当检测到按键时切换输出电平
按钮M
PE11
通过中断方式检测按接下来我们进入代码,并按照具体的硬件对应引脚修改源码。
同VS CODE打开AliOS-Things 2.0源码,如果您还没有AliOS-Things的源码,可以在VS code的控制台中通过git工具进行拉取,拉取命令如下:
git clone https://github.com/alibaba/AliOS-Things.git

打开源码后,我们在源码的app/example/blink目录下,打开blink.c,在源码的顶部找到几个宏定义如下:
#define GPIO_LED_IO     18
#define GPIO_TRIGGER_IO 4
#define GPIO_INPUT_IO   5
上述的几个宏定义需要和我们和实际的硬件对应,对应关系如下表:
宏定义
对应硬件
实际IO口
OS中的引脚编号
实验中的功能
GPIO_LED_IO
LED1
PB6
22
每秒闪烁1次
GPIO_TRIGGER_IO
LED2
PE3
67
当检测到按键时切换输出电平
GPIO_INPUT_IO
按钮M
PE11
75
通过中断方式检测按键
由于AliOS-Things对硬件进行了抽象,所以对GPIO的操作需要先按照一定的规则将MCU的GPIO转换为编号。转换规则为MCU的GPIO bank号 X 16 + 具体gpio在bank中的位置,bank的编号从0开始。如PB6,其bank号为1在bank中的位置为6,则PB6应被转换为 1 X 16 + 6 = 22;同理,PE3=4 x 16 + 3 = 67。因为例程不是为Developerkit开发板而写,所以需要修改例程中的宏第一如下:
#define GPIO_LED_IO     67      // PE3
#define GPIO_TRIGGER_IO 22      // PB6
#define GPIO_INPUT_IO   75      // PE11
完成修改后,保存blink.c文件。
在VS CODE环境中,在左下角的alios-studio中,点击编译目标选择按钮
256281c1a6f3dee6ef45a64b7d3ec2cee979ffbc
此时编辑器顶部的命令输入框会弹出选择要编译的目标,此时选择blink
061bb5cfbf1e7bcee5358013b30baa2741e498d9
紧接着会继续要求选择开发板,此时选择Developerkit开发板。
2ab4808d31eb931edd4e735ae50f473b9a43978d
接下来通过alios-studio工具条的编译按钮启动编译。
e43a7a48afa73182c81626f775ce0ae049618093
等待编译完成。
Making blink@developerkit.bin
Making blink@developerkit.hex

                        AOS MEMORY MAP
|=================================================================|
| MODULE                                   | ROM       | RAM      |
|=================================================================|
| newlib_stub                              | 296       | 0        |
| sal                                      | 6977      | 250      |
| kv                                       | 3055      | 104      |
| common                                   | 256       | 12       |
| libc_nano                                | 19649     | 602      |
| kernel_init                              | 653       | 36       |
| rhino                                    | 16225     | 7821     |
| developerkit                             | 5045      | 1403     |
| vfs                                      | 950       | 1141     |
| digest_algorithm                         | 92        | 0        |
| libgcc                                   | 3320      | 0        |
| stm32l4xx_cube                           | 26592     | 8506     |
| cli                                      | 6234      | 357      |
| yloop                                    | 2369      | 28       |
| device_sal_bk7231                        | 8542      | 265      |
| sensor                                   | 9451      | 303      |
| osal                                     | 1074      | 4        |
| log                                      | 412       | 20       |
| hal                                      | 164       | 12       |
| blink                                    | 325       | 24       |
| atparser                                 | 5882      | 297      |
| armv7m                                   | 1975      | 0        |
| *fill*                                   | 150       | 1599     |
|=================================================================|
| TOTAL (bytes)                            | 119688    | 22784    |
|=================================================================|
Build complete
将Developerkit连接至PC,确保开发板的STlink驱动已被正确安装。
3b06db95172f9fc8a5a68358d6d679fd742cdb6c
通过alios-studio工具条中的下载按钮,将编译好的固件下载到开发板中。
3fe46c048844e03bfead21ad1a20fafce4b58e0f
烧写完成后开发板会自动运行,此时可以看到LED开始按1s为间隔闪烁。按动板上的“M”按钮,LED2会切换输出。这里要指出,blink Demo主要为了演示GPIO的HAL层操作函数,并没有做按键去抖动工作,所以点按按钮时,可能会出现按一次LED2直接切换两次。也请大家在实际的代码设计中注意按键去抖能力的加入。到此,例程已成功完成运行。

相关文章:

  • 黑盒测试的测试方法
  • 开发阶段
  • angular2+ 生命周期
  • 可见面判别算法---光线投射算法
  • [每日短篇] 10 - Docker 清理无用的镜像
  • 书摘—极致产品
  • 0013-如何在Kerberos与非Kerberos的CDH集群BDR不可用时复制数据
  • MySQL数据类型详解
  • React和Redux的连接react-redux
  • VUE-文字跑马灯
  • 虚拟机与Docker有何不同?
  • 命令执行
  • Cesium入门6 - Adding Imagery - 添加图层
  • Python 一行代码完成局域网文件共享
  • RN—Android 物理返回键监听
  • [译] 怎样写一个基础的编译器
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • canvas绘制圆角头像
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript设计模式之工厂模式
  • passportjs 源码分析
  • Python3爬取英雄联盟英雄皮肤大图
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 阿里云前端周刊 - 第 26 期
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 彻底搞懂浏览器Event-loop
  • 规范化安全开发 KOA 手脚架
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • ionic入门之数据绑定显示-1
  • UI设计初学者应该如何入门?
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​iOS实时查看App运行日志
  • ​Linux·i2c驱动架构​
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #{}和${}的区别?
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (独孤九剑)--文件系统
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (生成器)yield与(迭代器)generator
  • (译)2019年前端性能优化清单 — 下篇
  • (转)C#调用WebService 基础
  • . Flume面试题
  • .form文件_SSM框架文件上传篇
  • .net core Swagger 过滤部分Api
  • .net core 连接数据库,通过数据库生成Modell
  • .net refrector
  • @Bean注解详解
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka