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

Alios Things开发套件之点灯

[复制链接]
netlhx 发布时间:2018-7-6 09:26
点个灯是为了上手,了解一些最基础的东西,比如程序框架,外设的一般操作方式。
4 M  W' M! b, I0 ^
  ~" M1 q! f9 _/ _" kAlios即然是一个OS,程序框架必然和裸机操作不同,先看个简单的hello-world,代码如下
9 K7 \7 ?& h1 S7 d% x" L7 W
  1. #include <aos/aos.h>1 b- \$ J6 C1 J6 C' h/ U; P! b
  2. 5 Z7 ~/ x% J2 }4 r
  3. static void app_delayed_action(void *arg)% S% F1 t% ?" C5 b( y
  4. {% @% U6 z7 a6 Z4 t" \8 P
  5.     LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());# z/ R# ^# Y3 f1 p$ _, ?
  6.     aos_post_delayed_action(5000, app_delayed_action, NULL);
    ! w4 f+ ~' T& }4 O* o: i' _, S
  7. }
    2 K7 s3 ?' O( B6 h! c2 {

  8. 8 _! z. O0 u: R3 U
  9. int application_start(int argc, char *argv[])
    ' s( g: c1 G; J5 w8 V
  10. {7 P/ h8 G8 ^! i
  11.     LOG("application started.");
    : q( X: T# k2 y- b) b
  12.     aos_post_delayed_action(1000, app_delayed_action, NULL);' w+ O" c5 n1 \3 u% O) X7 N- \
  13.     aos_loop_run();
    1 z; [# ~7 h7 W: W& \

  14. & }& C& A% C8 Z! l9 K
  15.     return 0;( i1 h. _: n' i/ b& x9 Y& X
  16. }
复制代码
头文件aos.h是alios动力的源头,先不管有多复杂,照抄就是了。, I) y$ i- N3 M0 Y7 W
application_start是程序的入口点,硬件上电初始化后,要跳到这里来执行。$ x4 |. C3 _5 i2 }5 x

9 q8 b$ g  c0 M, f$ Q6 Y/ @8 paos_post_delayed_action(1000, app_delayed_action, NULL)的作用是延迟执行指定的代码,在1秒钟后执行app_delayed_action函数,这个用法有点和Android中的Handler.postDelay方法类似。
. w- I! k# P  b8 b) D3 S4 o) k. u, L
然后在app_delay_action函数中,反复延迟调用自身,从而达到反复执行的目的。
$ T$ U' \! v: [8 G8 `! n
6 B  ?3 P- S. q' t2 i0 s在入口函数中的aos_loop_run则是进入事件循环,该干啥就干啥。
9 Y  |" T' U: F3 {! }/ P  K1 q7 [8 D- [# f' A! d3 h- x
点灯用到GPIO,alios要忽略硬件之间的差异,必然得提供一份统一的API及差异化的硬件配置,统一的API提供了GPIO的初始化、读写操作,而差异化的硬件配置则针对特定的硬件平台。3 K' c% H- E5 B2 g7 X& g

9 k$ l- B1 X- F# z/ _5 v# l这个差异化的配置文件位于board目录下,针对Alios Things Development Kit来说,该文件为9 M* \5 z7 @+ `/ C1 I, g
  1. AliOS-Things\board\developerkit\hal\hal_gpio_stm32_l4.h
复制代码
中,部分代码摘录如下$ r' A" o* W7 X- h3 J
$ A8 r- U- G; q/ [: q* x3 k3 d5 {# a
  1. #include "stm32l4xx_hal.h"
    ! p' V$ _$ {# C$ ~
  2. #include <string.h># J5 x$ T3 A0 k  N# U' o6 b' X, s4 e
  3. #include <stdlib.h>) o: J" H7 s7 D9 a- W# t6 w7 {
  4. #include <stdio.h>: i  [6 {5 f* k! L4 T
  5. #include <stdbool.h>
    " r9 X& ^& h4 K9 G7 ~
  6. #include "aos/kernel.h"* {0 G( A( E8 O* v( Z& @  m

  7. 8 r3 j6 W9 A" I: w+ t3 h; h
  8. #define PINS_IN_GROUP  16, o+ ?- |  k9 t  s: [3 Y
  9. #define GROUP_GPIOA    0
    + N3 e- c/ v/ u" l  ~
  10. #define GROUP_GPIOB    1         " e8 G! @: D* V
  11. #define GROUP_GPIOC    2' I! \) @, u$ h' b% ^0 ~0 G6 U
  12. #define GROUP_GPIOD    3         
    3 Z& f& j* B1 e7 G
  13. #define GROUP_GPIOE    44 d% ~0 w8 [6 }) f5 Z
  14. #define GROUP_GPIOF    5. n1 n* i. J8 ?0 ~
  15. #define GROUP_GPIOG    6
      Q  R" @0 s3 w
  16. #define GROUP_GPIOH    7) b2 Y7 n3 O  ?- C* [. m: H
  17.          ( Y0 R4 P0 y5 v$ h& e
  18. #define HAL_GPIO_0                 ((uint8_t)0)        /* represent GPIOA pin 0 */
    , U* \/ d& ^7 M- Y/ _
  19. #define HAL_GPIO_1                 ((uint8_t)1)        /* represent GPIOA pin 1 */5 K5 g. N! |. _0 }2 h! }4 s! X# f
  20. #define HAL_GPIO_2                 ((uint8_t)2)        /* represent GPIOA pin 2 */
    ! j3 q* B. c+ I
  21. #define HAL_GPIO_3                 ((uint8_t)3)        /* represent GPIOA pin 3 */
    . }6 P6 a; ~2 A% A5 k) ^5 |6 R
  22. #define HAL_GPIO_4                 ((uint8_t)4)        /* represent GPIOA pin 4 */6 J3 a' a+ n0 b2 O. E
  23. #define HAL_GPIO_5                 ((uint8_t)5)        /* represent GPIOA pin 5 */' e* l/ U5 ^  ]2 [3 R
  24. #define HAL_GPIO_6                 ((uint8_t)6)        /* represent GPIOA pin 6 */
    - _' e( M2 O0 p$ {7 B
  25. #define HAL_GPIO_7                 ((uint8_t)7)        /* represent GPIOA pin 7 */+ b5 _' h  O: ?  O6 d$ D9 v
  26. #define HAL_GPIO_8                 ((uint8_t)8)        /* represent GPIOA pin 8 */
    ( n" O% Y# `' C& t0 s% j
  27. #define HAL_GPIO_9                 ((uint8_t)9)        /* represent GPIOA pin 9 */' [! X7 V: n- M
  28. #define HAL_GPIO_10                ((uint8_t)10)       /* represent GPIOA pin 10 */
      c0 f- E- i& [
  29. #define HAL_GPIO_11                ((uint8_t)11)       /* represent GPIOA pin 11 */
    ( y" C# _/ N( T  J: l
  30. #define HAL_GPIO_12                ((uint8_t)12)       /* represent GPIOA pin 12 *// A& h/ l. u: }( [) ^- ?
  31. #define HAL_GPIO_13                ((uint8_t)13)       /* represent GPIOA pin 13 */5 F& K) @  ?6 @3 c$ a& W
  32. #define HAL_GPIO_14                ((uint8_t)14)       /* represent GPIOA pin 14 */8 o0 M8 e' Y! B( n4 ]6 m
  33. #define HAL_GPIO_15                ((uint8_t)15)       /* represent GPIOA pin 15 */$ [. ?/ G; [2 `0 Y
  34.          # x" m  q( G% ?+ ~* |
  35. #define HAL_GPIO_16                ((uint8_t)16)       /* represent GPIOB pin 0 */
    6 N% A4 k; [$ s" a" F7 p  p
  36. #define HAL_GPIO_17                ((uint8_t)17)       /* represent GPIOB pin 1 */$ ?* ]# l: ~+ y* B3 l! u
  37. #define HAL_GPIO_18                ((uint8_t)18)       /* represent GPIOB pin 2 */
    4 z3 c$ m9 f5 u7 }  D( n& \
  38. #define HAL_GPIO_19                ((uint8_t)19)       /* represent GPIOB pin 3 */
    7 ?1 _( @. u3 N8 w$ b+ I' w/ C
  39. #define HAL_GPIO_20                ((uint8_t)20)       /* represent GPIOB pin 4 */4 p& ?/ L7 N& g' {
  40. #define HAL_GPIO_21                ((uint8_t)21)       /* represent GPIOB pin 5 */4 }  t) Q2 v4 E  A  Q
  41. #define HAL_GPIO_22                ((uint8_t)22)       /* represent GPIOB pin 6 */
    2 x9 i* j/ |% O9 p1 U8 t3 d- r6 e! p. Q
  42. #define HAL_GPIO_23                ((uint8_t)23)       /* represent GPIOB pin 7 */8 X, d6 m8 r6 |
  43. #define HAL_GPIO_24                ((uint8_t)24)       /* represent GPIOB pin 8 */
    % W/ F; S3 d: Z8 w1 H- c
  44. #define HAL_GPIO_25                ((uint8_t)25)       /* represent GPIOB pin 9 */
复制代码
这个倒是非常清楚,不过在官方的文档里却没有提到,需要用户自己去找,找了很久才找到!2 T* M! J3 P9 h
- M$ O; h3 \- d7 \4 k' ?& o3 P
GPIO通用的API列表如下& u  S1 y% E: [/ W) ^  N  J) ~7 M  u
  1. 1 hal_gpio_init3 {) W/ Q) {1 b/ j0 z! f
  2. 2 hal_gpio_output_high
    5 z' \5 g( h( k9 c6 r! o
  3. 3 hal_gpio_output_low% K  [- I/ ?$ [
  4. 4 hal_gpio_output_toggle
    % ]8 }& \3 c0 L  ^  e
  5. 5 hal_gpio_input_get
    7 x7 o. v& V8 V. u
  6. 6 hal_gpio_enable_irq
    ! Y  t$ {5 c& M: j. d
  7. 7 hal_gpio_disable_irq
    % d2 u( K  w# ?& @% z/ Z
  8. 8 hal_gpio_clear_irq
    % H6 Q3 e9 L$ F3 v
  9. 9 hal_gpio_finalize
复制代码
有了这些基础,接下来就可以点灯了。6 D) W- G. l0 E0 P8 A
4 g9 Q+ @- W- p. s% l" V3 f0 \
开发板上提供了LED1, LED2,LED3,对应的硬件连接如图
/ L5 Z) _. _3 L/ K- H3 r: H3 K0 p% e" X" ~
2018-07-06_091207.png
/ q* f% c: v  {' d) r' \, ]# I1 x# t; t
对应前面的GPIO映射得知在ALIOS中其编号为22,接下来修改代码如下2 P7 M1 n1 i/ @4 R- n) B  [1 y

3 E! H4 f7 b/ _- Y; \, @! l( Y
  1. #include <aos/aos.h>
    : v0 ?9 Y) }  l5 s% T$ k
  2. #include <hal/soc/soc.h>
    ' z7 G- D' Y& ~0 @7 |: t/ b6 P9 M( S. o1 X
  3. : s' P  n# K$ q9 g4 B% i4 t
  4. #define LED1 22
    6 o( W& M+ p2 v# s  o# ?
  5. gpio_dev_t led;( g1 K2 {# R( ?! P0 d
  6. 7 F- h' y4 m) J( R, ^! x* i
  7. + U' A' ^% v! G, H
  8. static void app_delayed_action(void *arg)
    8 h6 ^& P" P! L3 O" a/ \9 L
  9. {- d. a# y$ a9 v) D" o
  10.     //LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());
    / V2 T. c0 D) Y! M) z" E
  11.     hal_gpio_output_toggle(&led);7 J3 |9 ~/ r+ W0 g& g
  12.     aos_post_delayed_action(500, app_delayed_action, NULL);
    0 F* Y: T7 D- S# X# Q/ C7 X7 \
  13. }
    / [. p, Y6 K# s$ t+ l; ^

  14. ) N/ d8 v* K1 f. ~; Q
  15. int application_start(int argc, char *argv[])
    5 J1 l" e: K, N% `
  16. {! N" k1 h2 I* j0 e. A- I
  17.     LOG("application started.");
    $ K# b( x9 w+ s+ S+ Z
  18.     /* gpio port config */
    7 X" d4 N/ k! i0 D- D  A# U& u
  19.     led.port = LED1;: @; F  O& i4 U$ o' L6 p- h  g
  20.     /* set as output mode */7 F8 G3 t- _* o* h
  21.     led.config = OUTPUT_PUSH_PULL;
    & U( g8 K$ K' j
  22.     /* configure GPIO with the given settings */" O: I6 E& N$ w8 u0 \
  23.     hal_gpio_init(&led);# A& C" L  `( M( C

  24. 1 T- R1 l  \0 m2 d4 A0 P5 Z
  25.     aos_post_delayed_action(1000, app_delayed_action, NULL);% h6 j; V1 l5 w8 j( \
  26.     aos_loop_run();' u2 b! q7 C7 h' c: U! ]7 \
  27. ' u0 k( U$ O' r# d
  28.     return 0;
    ! R5 d* h6 ^8 `9 {
  29. }
    + \: S% t# u: l9 y

  30. + A3 ]. U1 z" A6 y
复制代码

1 A3 l3 a/ X( a: H. z+ u0 T3 [  L* i/ T) T6 D! E: A9 i0 J
非常简单的代码,然后编译,上传到开发板,LED1开始闪烁。; I! Q* z/ f# }( m. m

# |- R1 t+ D/ Q3 |+ _. `) U关于开发环境,使用的是VSCode,使用之前记得先安装相关的组件,如下
7 Y# W  t" z0 X) j/ `! D$ l2 O. B# s) |2 m) f; T
2018-07-06_092454.png * i4 F, t! O" J! c, I/ ~# `" G

" ?7 T6 s+ c" s9 b( K7 ]4 p然后就可以在VSCode里打开Github上拉下来的代码文件夹,开始体验。
# P- ]3 l$ r/ h6 P) ~& L- M4 z/ e+ c3 U5 q) X+ F1 j( r
- Y! R. g4 q; ~7 m; f

6 H$ |4 L# `  o. g. k9 i$ r1 Y0 v  [9 @* K9 j$ u3 r# w. S

评分

参与人数 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神点灯大法好。。
8 h) c) v: H$ ]3 e: c' P, k; w
七哥 回答时间: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?
  t9 L8 L" F: f; f- a
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版