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

Alios Things开发套件之点灯

[复制链接]
netlhx 发布时间:2018-7-6 09:26
点个灯是为了上手,了解一些最基础的东西,比如程序框架,外设的一般操作方式。
0 Z* u+ e3 q# Q1 R9 r5 x) x
) z& ^% }7 \+ y1 o* mAlios即然是一个OS,程序框架必然和裸机操作不同,先看个简单的hello-world,代码如下: \; Q' }) _& P0 ]
  1. #include <aos/aos.h>) Z9 a- |9 ~6 c7 S
  2. 1 k: l6 s$ m3 x$ Y
  3. static void app_delayed_action(void *arg)
    9 e8 ^7 w8 K* S4 D5 K4 W
  4. {9 ?8 [$ j; h5 d5 g+ O" Z; F8 g
  5.     LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());' Z' U- T) T. r7 s
  6.     aos_post_delayed_action(5000, app_delayed_action, NULL);; b0 {9 U& y- [7 S
  7. }
    ; c- ], o* U: H; ]
  8.   y  a- ^2 a! k) z1 j2 o, G
  9. int application_start(int argc, char *argv[])
    . W( T" q# R+ _/ }
  10. {9 F: R/ l4 K, M
  11.     LOG("application started.");! ~& n* j. c+ Q& m; e" ^9 ]
  12.     aos_post_delayed_action(1000, app_delayed_action, NULL);2 Y9 @2 f$ c" T' c( B
  13.     aos_loop_run();
    * W1 X! G3 K" [$ z5 e& {! c* I
  14. * T" D( l3 o: p* t
  15.     return 0;# q8 u1 H: o6 J1 @- v7 N, I! x) G
  16. }
复制代码
头文件aos.h是alios动力的源头,先不管有多复杂,照抄就是了。! R, s/ m9 ~+ ^
application_start是程序的入口点,硬件上电初始化后,要跳到这里来执行。- R7 j. v; v5 |1 ?' o7 `
5 t% K; F6 Z  F; d* C- W7 L2 P5 b
aos_post_delayed_action(1000, app_delayed_action, NULL)的作用是延迟执行指定的代码,在1秒钟后执行app_delayed_action函数,这个用法有点和Android中的Handler.postDelay方法类似。, ]: L1 b; D: W7 J
8 x" S6 K- j/ C) Z* y2 q% w
然后在app_delay_action函数中,反复延迟调用自身,从而达到反复执行的目的。
$ c9 W) u5 o. w! t1 L! p4 a
  T% Z7 _; B: Y6 _$ y2 |( z在入口函数中的aos_loop_run则是进入事件循环,该干啥就干啥。# L% j& O( X( F' i8 R. e, H* I/ \

9 ]$ P" x$ q- P9 b' i8 N8 Q点灯用到GPIO,alios要忽略硬件之间的差异,必然得提供一份统一的API及差异化的硬件配置,统一的API提供了GPIO的初始化、读写操作,而差异化的硬件配置则针对特定的硬件平台。$ p/ |3 J5 Q  X; d" r' `& V
: Y+ J- Q& B" V( O# G
这个差异化的配置文件位于board目录下,针对Alios Things Development Kit来说,该文件为
2 d1 Q. W/ t0 L! w" x
  1. AliOS-Things\board\developerkit\hal\hal_gpio_stm32_l4.h
复制代码
中,部分代码摘录如下
. p. n# m% q% m3 @% k2 `  D! v. e* f" Y5 i
  1. #include "stm32l4xx_hal.h"
    - U1 s# R# A0 T0 w3 i
  2. #include <string.h>
    / w* w( Z% X+ _& u
  3. #include <stdlib.h>3 m0 M) u' t% s) M% @) Y9 q
  4. #include <stdio.h>! L. p7 I( K4 j4 j8 z
  5. #include <stdbool.h>: ]- w/ A& i2 m0 \7 y: u' L
  6. #include "aos/kernel.h"! r3 P! ]* w. {# {( W3 |' [
  7. 4 Y! V$ m8 S3 G1 x
  8. #define PINS_IN_GROUP  162 T6 t" Y- S9 H& ^0 M
  9. #define GROUP_GPIOA    04 ^9 v$ B3 |# A3 c2 ?8 P
  10. #define GROUP_GPIOB    1         
    ) g# }) R$ z. b
  11. #define GROUP_GPIOC    2
    6 m  Z9 [( v7 c
  12. #define GROUP_GPIOD    3         
    ) y2 O( ^8 h- p7 f9 n/ t- s$ T; U
  13. #define GROUP_GPIOE    4
      c: ]: d6 c* v/ x' r
  14. #define GROUP_GPIOF    59 a- b# L5 R' B! h% [) M
  15. #define GROUP_GPIOG    6
    $ D# e9 i& n: Z; P
  16. #define GROUP_GPIOH    7
    ! ]3 {7 X. G( O
  17.          # t/ v: K( C; G* w* Y2 L5 M2 _5 U
  18. #define HAL_GPIO_0                 ((uint8_t)0)        /* represent GPIOA pin 0 */4 t3 ]# ~+ k8 e# ]) A3 k
  19. #define HAL_GPIO_1                 ((uint8_t)1)        /* represent GPIOA pin 1 */
    / U5 Z  c1 s8 X
  20. #define HAL_GPIO_2                 ((uint8_t)2)        /* represent GPIOA pin 2 */
    3 L& \7 ?; J6 y
  21. #define HAL_GPIO_3                 ((uint8_t)3)        /* represent GPIOA pin 3 */; \) G# X( `! D) h! o* M
  22. #define HAL_GPIO_4                 ((uint8_t)4)        /* represent GPIOA pin 4 */
    8 ]) J+ ^* D9 L
  23. #define HAL_GPIO_5                 ((uint8_t)5)        /* represent GPIOA pin 5 */& d" Z- Y$ B8 i$ y! |) X: B
  24. #define HAL_GPIO_6                 ((uint8_t)6)        /* represent GPIOA pin 6 */& W' Q' ~; E' M" j1 n/ e( \; s$ c# f
  25. #define HAL_GPIO_7                 ((uint8_t)7)        /* represent GPIOA pin 7 */
    0 Y# W0 {& c% N6 B) {. W- x, c
  26. #define HAL_GPIO_8                 ((uint8_t)8)        /* represent GPIOA pin 8 */
    2 F9 g" S9 J: E9 `4 t
  27. #define HAL_GPIO_9                 ((uint8_t)9)        /* represent GPIOA pin 9 */5 S+ }( H  |  r- ^
  28. #define HAL_GPIO_10                ((uint8_t)10)       /* represent GPIOA pin 10 */. p* ]; p$ }$ i' @4 `
  29. #define HAL_GPIO_11                ((uint8_t)11)       /* represent GPIOA pin 11 */
    $ y1 A# N+ A( T% n' J7 f. V( ^
  30. #define HAL_GPIO_12                ((uint8_t)12)       /* represent GPIOA pin 12 */$ T% d" A+ O: J/ \- E* q
  31. #define HAL_GPIO_13                ((uint8_t)13)       /* represent GPIOA pin 13 */
    + ^, B1 Y% @  G! ?$ I- E5 S$ ~
  32. #define HAL_GPIO_14                ((uint8_t)14)       /* represent GPIOA pin 14 */
    + u1 J3 N. `% N% n+ T0 Y0 G
  33. #define HAL_GPIO_15                ((uint8_t)15)       /* represent GPIOA pin 15 */
    0 s: U9 E% m8 I6 n' e  \
  34.          
    * s- D) A) l' R3 D0 J
  35. #define HAL_GPIO_16                ((uint8_t)16)       /* represent GPIOB pin 0 *// o4 w$ K9 W  _/ I( _3 K) p" m5 Z
  36. #define HAL_GPIO_17                ((uint8_t)17)       /* represent GPIOB pin 1 */" m- R3 k& o" J: }
  37. #define HAL_GPIO_18                ((uint8_t)18)       /* represent GPIOB pin 2 */
    9 L" R1 E+ ?! Z7 G) ]
  38. #define HAL_GPIO_19                ((uint8_t)19)       /* represent GPIOB pin 3 */* ~1 ~  ?2 L% [  }: h, Q/ @0 s3 N6 N
  39. #define HAL_GPIO_20                ((uint8_t)20)       /* represent GPIOB pin 4 */6 _, [2 W0 ?( @- P- T! k7 V- K( O
  40. #define HAL_GPIO_21                ((uint8_t)21)       /* represent GPIOB pin 5 */" J8 J- V% y4 i) {: u4 D  |
  41. #define HAL_GPIO_22                ((uint8_t)22)       /* represent GPIOB pin 6 */
    / `# W8 }( h* \1 z) Q
  42. #define HAL_GPIO_23                ((uint8_t)23)       /* represent GPIOB pin 7 */; @, Y" A6 e1 v- c9 M
  43. #define HAL_GPIO_24                ((uint8_t)24)       /* represent GPIOB pin 8 */
    ( @" J) k' [# k1 X( k
  44. #define HAL_GPIO_25                ((uint8_t)25)       /* represent GPIOB pin 9 */
复制代码
这个倒是非常清楚,不过在官方的文档里却没有提到,需要用户自己去找,找了很久才找到!
. B7 k+ w9 @  v' S5 L
" h+ ?5 o8 R& k  \GPIO通用的API列表如下7 A6 T0 Q7 V. m; [& u4 N, }9 `
  1. 1 hal_gpio_init" u( J% u9 g- b$ Q
  2. 2 hal_gpio_output_high; G8 p' N; n* Q) P; P; b5 S
  3. 3 hal_gpio_output_low
    1 @, F, N" u. b( ~
  4. 4 hal_gpio_output_toggle
    ( `- b: g# D( R6 y2 P8 ^
  5. 5 hal_gpio_input_get
    0 g; t1 Q5 M) D" J% X& y
  6. 6 hal_gpio_enable_irq/ P+ Y& I  c7 x
  7. 7 hal_gpio_disable_irq
    $ f: s9 {: h. o9 T& y0 b, [
  8. 8 hal_gpio_clear_irq
    3 o+ Q( N1 |% N) S
  9. 9 hal_gpio_finalize
复制代码
有了这些基础,接下来就可以点灯了。! a& F7 R' V, ]9 q
1 Y# v9 ~! X0 ?
开发板上提供了LED1, LED2,LED3,对应的硬件连接如图+ V" i: d  U) ?" z. \: V" Q- U
# N4 D4 w) f- m# W" v. y% d
2018-07-06_091207.png ) M4 `' p1 p6 ~% c' p4 \+ N
. P4 H9 z+ U' C$ [9 t" Z6 y
对应前面的GPIO映射得知在ALIOS中其编号为22,接下来修改代码如下; R5 m& V# r# D$ Q6 y/ n4 Z

4 f" ^! |- B6 S/ j
  1. #include <aos/aos.h>, K& l9 \  V9 U$ W0 m4 ^
  2. #include <hal/soc/soc.h>! ?/ ^! Z/ U+ W. k2 `

  3. 8 T& q1 B6 A8 j7 C+ X. _
  4. #define LED1 22
    : x3 f* Y3 G! w. ]9 M
  5. gpio_dev_t led;5 ~9 }, a, a# K, g% z: b

  6. 8 @/ L4 U% M4 K8 ?
  7. 8 \/ B- L7 a+ b* x2 B/ ^
  8. static void app_delayed_action(void *arg)1 p$ t. J, k( z3 O) b! g4 g) R, A
  9. {2 M1 }7 n$ {1 I% }6 C( E
  10.     //LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());) Z2 K1 U" l( e
  11.     hal_gpio_output_toggle(&led);
    3 ?7 D( S+ v9 h& d
  12.     aos_post_delayed_action(500, app_delayed_action, NULL);
    8 `$ L4 ]' i' M$ V+ Z; Z
  13. }$ b' O" g' Q3 ^* @; V

  14. ; ]/ i5 R- Q! Q( K6 N$ D
  15. int application_start(int argc, char *argv[])
    * S" T% G6 w5 ^- A3 p! q. o3 S& Q
  16. {; t  b7 o% V6 f8 @& x) ~; s+ g
  17.     LOG("application started.");1 c/ \, D! l# _1 S1 j" ^
  18.     /* gpio port config */
    ( E: I+ z8 L5 A" Y) t
  19.     led.port = LED1;) p1 u, I5 a& ?* S9 U  @4 d2 m
  20.     /* set as output mode */
    3 Y' W; G9 E4 @; }0 \
  21.     led.config = OUTPUT_PUSH_PULL;
    6 h' Z$ t- \+ L4 \3 ~* O( S2 x2 E7 q
  22.     /* configure GPIO with the given settings */, b$ M$ V( f7 t/ m1 E3 Z8 L, `
  23.     hal_gpio_init(&led);- v2 W8 p9 [' y% |5 J; C  `- t

  24. 5 S5 S* j* T2 ]2 S" W
  25.     aos_post_delayed_action(1000, app_delayed_action, NULL);
    0 E3 I5 z8 E5 i) p* s5 q6 Q/ [
  26.     aos_loop_run();
    * }1 N" E* j% {2 O+ `2 f' s9 N* I

  27. & T) n2 j5 K1 |; C! l3 i& b
  28.     return 0;" @( n& z0 O. C2 k, j% s
  29. }* k( Q( ~) X1 R7 i% ^

  30. $ R5 l" d; r$ ~4 J1 l) ^) J
复制代码

6 j7 o* }) B* a4 f5 t  y* s
+ `$ Y! \6 T( [+ M8 I非常简单的代码,然后编译,上传到开发板,LED1开始闪烁。
( m& K& R% n8 M4 G+ N1 C! R) N* Y) r% q' K
关于开发环境,使用的是VSCode,使用之前记得先安装相关的组件,如下* S* @+ C; b8 o4 `6 |$ N; }2 n
# H+ X( E+ K& u
2018-07-06_092454.png
7 J: B& Q1 n! ]$ S  h. J9 s7 M3 @2 T  r" w- c) @& ?
然后就可以在VSCode里打开Github上拉下来的代码文件夹,开始体验。  \6 o7 g7 ]: h; U' y2 ?
$ M, c" m) }5 _
0 ]" t- M8 R* y& D8 i4 x
3 C( P: H( [) I! o9 e9 i  M
4 w) g, D3 J2 e' t

评分

参与人数 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神点灯大法好。。! h  k1 x/ L; |( B3 @, q/ H# f$ j
七哥 回答时间: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?
$ D. S' s0 r& z1 Q6 |3 r
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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版