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

Alios Things开发套件之点灯

[复制链接]
netlhx 发布时间:2018-7-6 09:26
点个灯是为了上手,了解一些最基础的东西,比如程序框架,外设的一般操作方式。

Alios即然是一个OS,程序框架必然和裸机操作不同,先看个简单的hello-world,代码如下
  1. #include <aos/aos.h>

  2. static void app_delayed_action(void *arg)
  3. {
  4.     LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());
  5.     aos_post_delayed_action(5000, app_delayed_action, NULL);
  6. }

  7. int application_start(int argc, char *argv[])
  8. {
  9.     LOG("application started.");
  10.     aos_post_delayed_action(1000, app_delayed_action, NULL);
  11.     aos_loop_run();

  12.     return 0;
  13. }
复制代码
头文件aos.h是alios动力的源头,先不管有多复杂,照抄就是了。
application_start是程序的入口点,硬件上电初始化后,要跳到这里来执行。

aos_post_delayed_action(1000, app_delayed_action, NULL)的作用是延迟执行指定的代码,在1秒钟后执行app_delayed_action函数,这个用法有点和Android中的Handler.postDelay方法类似。

然后在app_delay_action函数中,反复延迟调用自身,从而达到反复执行的目的。

在入口函数中的aos_loop_run则是进入事件循环,该干啥就干啥。

点灯用到GPIO,alios要忽略硬件之间的差异,必然得提供一份统一的API及差异化的硬件配置,统一的API提供了GPIO的初始化、读写操作,而差异化的硬件配置则针对特定的硬件平台。

这个差异化的配置文件位于board目录下,针对Alios Things Development Kit来说,该文件为
  1. AliOS-Things\board\developerkit\hal\hal_gpio_stm32_l4.h
复制代码
中,部分代码摘录如下

  1. #include "stm32l4xx_hal.h"
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <stdbool.h>
  6. #include "aos/kernel.h"

  7. #define PINS_IN_GROUP  16
  8. #define GROUP_GPIOA    0
  9. #define GROUP_GPIOB    1         
  10. #define GROUP_GPIOC    2
  11. #define GROUP_GPIOD    3         
  12. #define GROUP_GPIOE    4
  13. #define GROUP_GPIOF    5
  14. #define GROUP_GPIOG    6
  15. #define GROUP_GPIOH    7
  16.          
  17. #define HAL_GPIO_0                 ((uint8_t)0)        /* represent GPIOA pin 0 */
  18. #define HAL_GPIO_1                 ((uint8_t)1)        /* represent GPIOA pin 1 */
  19. #define HAL_GPIO_2                 ((uint8_t)2)        /* represent GPIOA pin 2 */
  20. #define HAL_GPIO_3                 ((uint8_t)3)        /* represent GPIOA pin 3 */
  21. #define HAL_GPIO_4                 ((uint8_t)4)        /* represent GPIOA pin 4 */
  22. #define HAL_GPIO_5                 ((uint8_t)5)        /* represent GPIOA pin 5 */
  23. #define HAL_GPIO_6                 ((uint8_t)6)        /* represent GPIOA pin 6 */
  24. #define HAL_GPIO_7                 ((uint8_t)7)        /* represent GPIOA pin 7 */
  25. #define HAL_GPIO_8                 ((uint8_t)8)        /* represent GPIOA pin 8 */
  26. #define HAL_GPIO_9                 ((uint8_t)9)        /* represent GPIOA pin 9 */
  27. #define HAL_GPIO_10                ((uint8_t)10)       /* represent GPIOA pin 10 */
  28. #define HAL_GPIO_11                ((uint8_t)11)       /* represent GPIOA pin 11 */
  29. #define HAL_GPIO_12                ((uint8_t)12)       /* represent GPIOA pin 12 */
  30. #define HAL_GPIO_13                ((uint8_t)13)       /* represent GPIOA pin 13 */
  31. #define HAL_GPIO_14                ((uint8_t)14)       /* represent GPIOA pin 14 */
  32. #define HAL_GPIO_15                ((uint8_t)15)       /* represent GPIOA pin 15 */
  33.          
  34. #define HAL_GPIO_16                ((uint8_t)16)       /* represent GPIOB pin 0 */
  35. #define HAL_GPIO_17                ((uint8_t)17)       /* represent GPIOB pin 1 */
  36. #define HAL_GPIO_18                ((uint8_t)18)       /* represent GPIOB pin 2 */
  37. #define HAL_GPIO_19                ((uint8_t)19)       /* represent GPIOB pin 3 */
  38. #define HAL_GPIO_20                ((uint8_t)20)       /* represent GPIOB pin 4 */
  39. #define HAL_GPIO_21                ((uint8_t)21)       /* represent GPIOB pin 5 */
  40. #define HAL_GPIO_22                ((uint8_t)22)       /* represent GPIOB pin 6 */
  41. #define HAL_GPIO_23                ((uint8_t)23)       /* represent GPIOB pin 7 */
  42. #define HAL_GPIO_24                ((uint8_t)24)       /* represent GPIOB pin 8 */
  43. #define HAL_GPIO_25                ((uint8_t)25)       /* represent GPIOB pin 9 */
复制代码
这个倒是非常清楚,不过在官方的文档里却没有提到,需要用户自己去找,找了很久才找到!

GPIO通用的API列表如下
  1. 1 hal_gpio_init
  2. 2 hal_gpio_output_high
  3. 3 hal_gpio_output_low
  4. 4 hal_gpio_output_toggle
  5. 5 hal_gpio_input_get
  6. 6 hal_gpio_enable_irq
  7. 7 hal_gpio_disable_irq
  8. 8 hal_gpio_clear_irq
  9. 9 hal_gpio_finalize
复制代码
有了这些基础,接下来就可以点灯了。

开发板上提供了LED1, LED2,LED3,对应的硬件连接如图

2018-07-06_091207.png

对应前面的GPIO映射得知在ALIOS中其编号为22,接下来修改代码如下

  1. #include <aos/aos.h>
  2. #include <hal/soc/soc.h>

  3. #define LED1 22
  4. gpio_dev_t led;


  5. static void app_delayed_action(void *arg)
  6. {
  7.     //LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());
  8.     hal_gpio_output_toggle(&led);
  9.     aos_post_delayed_action(500, app_delayed_action, NULL);
  10. }

  11. int application_start(int argc, char *argv[])
  12. {
  13.     LOG("application started.");
  14.     /* gpio port config */
  15.     led.port = LED1;
  16.     /* set as output mode */
  17.     led.config = OUTPUT_PUSH_PULL;
  18.     /* configure GPIO with the given settings */
  19.     hal_gpio_init(&led);

  20.     aos_post_delayed_action(1000, app_delayed_action, NULL);
  21.     aos_loop_run();

  22.     return 0;
  23. }

复制代码


非常简单的代码,然后编译,上传到开发板,LED1开始闪烁。

关于开发环境,使用的是VSCode,使用之前记得先安装相关的组件,如下

2018-07-06_092454.png

然后就可以在VSCode里打开Github上拉下来的代码文件夹,开始体验。




评分

参与人数 4 ST金币 +12 收起 理由
damiaa + 5 赞一个!
toofree + 5 好高大上
斜阳__ + 1 赞一个!
creep + 1 赞一个!

查看全部评分

收藏 评论13 发布时间:2018-7-6 09:26

举报

13个回答
电子星辰 回答时间:2018-7-6 10:33:00
学习学习
mrtalentnan 回答时间:2018-7-6 10:47:18
感谢,学习了,回复ST
斜阳 回答时间:2018-7-6 12:16:24
alios的文档怎么样?
Paderboy 回答时间:2018-7-6 12:21:43
赞赞赞,N神点灯大法好。。
七哥 回答时间:2018-7-6 12:26:59
好高大上,VSCode是什么东西我都不知道
damiaa 回答时间:2018-7-6 14:23:57
好,我也玩去。
anobodykey 回答时间:2018-7-6 20:54:53
这个开发套件免费吗
奏奏奏 回答时间:2018-7-7 04:22:18
感觉一个点灯比mbed都要复杂
STM1024 回答时间:2018-7-7 09:18:39
alios用到了HAL?
KEY1 回答时间:2018-7-11 18:24:02
有没有相关 教程 或者说明, Alios 的
爱电子辉辉 回答时间:2018-9-30 10:50:22
楼主可以出个详细的VSCode 开发STM32的教程吗?其中包含哪些插件,代码补全之类的,我现在遇到补全结构体的时候出来一大堆的东西。。之前用过ATOM.补全比VSCode好点
z258121131 回答时间:2018-9-30 11:27:28
哪里有这种套件?
我爱下载 回答时间:2018-9-30 13:23:16
非常好的介绍

所属标签

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