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

Alios Things开发套件之点灯

[复制链接]
netlhx 发布时间:2018-7-6 09:26
点个灯是为了上手,了解一些最基础的东西,比如程序框架,外设的一般操作方式。
6 @8 x7 t/ q% q% c8 m* S: T
5 e3 m2 V0 J7 j6 U- c9 l$ x- SAlios即然是一个OS,程序框架必然和裸机操作不同,先看个简单的hello-world,代码如下1 @- P$ }) \- Y+ ~. F4 v
  1. #include <aos/aos.h>1 d; P7 s0 U  S8 @

  2. 8 o- k5 I- P* _" q/ R) `
  3. static void app_delayed_action(void *arg); Z0 Q- v3 K6 O; v- s
  4. {
    , v9 T3 p+ {% _
  5.     LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());
    ( }+ e* o* T. ], Y; d6 |3 @
  6.     aos_post_delayed_action(5000, app_delayed_action, NULL);
    * L! d+ |$ w+ |
  7. }, [, W. x( _  b* |

  8. * m0 K/ m5 J! M
  9. int application_start(int argc, char *argv[])
      u6 O  O: N& {6 }: w* s
  10. {6 X  m; M5 h; H  V7 O4 ~6 S9 h
  11.     LOG("application started.");5 e$ e0 }3 p; S6 X. c" ?
  12.     aos_post_delayed_action(1000, app_delayed_action, NULL);; E; q$ J$ A& ?. P
  13.     aos_loop_run();
    + L8 s! T2 t2 y! f7 G7 s

  14. . q! `  o0 A( x4 I
  15.     return 0;! W( a* y( U6 m: f8 Q1 u( N
  16. }
复制代码
头文件aos.h是alios动力的源头,先不管有多复杂,照抄就是了。
" y" j' |7 t1 g8 v6 H) M1 @8 r: Happlication_start是程序的入口点,硬件上电初始化后,要跳到这里来执行。4 l5 F! j8 _* W9 O) _6 A

% e/ p) o8 r1 s$ kaos_post_delayed_action(1000, app_delayed_action, NULL)的作用是延迟执行指定的代码,在1秒钟后执行app_delayed_action函数,这个用法有点和Android中的Handler.postDelay方法类似。
4 I# S/ P- Y# {2 r) L) W7 b7 h5 w: r/ k! _+ A" }
然后在app_delay_action函数中,反复延迟调用自身,从而达到反复执行的目的。0 l0 {# e5 }0 k" o

5 h0 C, S" w0 V& y在入口函数中的aos_loop_run则是进入事件循环,该干啥就干啥。7 w1 j. T' i/ `# Y0 t  z
1 T# r8 }1 l' c# O: W4 k. i
点灯用到GPIO,alios要忽略硬件之间的差异,必然得提供一份统一的API及差异化的硬件配置,统一的API提供了GPIO的初始化、读写操作,而差异化的硬件配置则针对特定的硬件平台。2 |, l% u6 ]* x/ V: E- M

: w( v0 S" W0 m这个差异化的配置文件位于board目录下,针对Alios Things Development Kit来说,该文件为' H6 A5 T$ Y3 W9 b/ ~' ~6 X
  1. AliOS-Things\board\developerkit\hal\hal_gpio_stm32_l4.h
复制代码
中,部分代码摘录如下; K: w) G, B; `8 W# D

2 y7 U2 ?" S( l, A
  1. #include "stm32l4xx_hal.h"# f  o& Q' D3 Y& y% U
  2. #include <string.h>1 ~, t6 y+ b4 k. G3 O# W% S
  3. #include <stdlib.h>3 V) |& |* ?* F9 g* G- Q
  4. #include <stdio.h>
    " T8 G  F" g: Y6 ]7 I1 x" M0 J
  5. #include <stdbool.h>
    7 l1 ^$ \" `( T: p6 b$ C
  6. #include "aos/kernel.h"
    3 \; f  o. l3 l& {

  7. & S% M  _: K  c7 l6 O
  8. #define PINS_IN_GROUP  16& c, F, U/ L5 L! l( R+ ?
  9. #define GROUP_GPIOA    0
    ' M. s. F5 F4 }4 t; R
  10. #define GROUP_GPIOB    1         
    # r1 Q8 w! y, U" I# v5 D1 y/ Q
  11. #define GROUP_GPIOC    27 ?* j- J) |* e
  12. #define GROUP_GPIOD    3         
    * s, L( }+ j+ F  {! K7 [
  13. #define GROUP_GPIOE    4' c/ j1 Z' o, \4 _" H
  14. #define GROUP_GPIOF    54 U+ T8 _- P, q! W: N
  15. #define GROUP_GPIOG    6
    7 P9 t" {3 F$ M9 H+ q2 l
  16. #define GROUP_GPIOH    75 o  \. g9 Z6 I8 a5 }# V
  17.          8 z+ p3 U2 s: X. O
  18. #define HAL_GPIO_0                 ((uint8_t)0)        /* represent GPIOA pin 0 */7 W! d: A* T6 h5 q6 ~
  19. #define HAL_GPIO_1                 ((uint8_t)1)        /* represent GPIOA pin 1 */
    ' s8 D, B; X' C5 J! H* J; j
  20. #define HAL_GPIO_2                 ((uint8_t)2)        /* represent GPIOA pin 2 */
    ( d/ g1 \9 g! d
  21. #define HAL_GPIO_3                 ((uint8_t)3)        /* represent GPIOA pin 3 */
    % O1 \+ ?/ n9 x% o
  22. #define HAL_GPIO_4                 ((uint8_t)4)        /* represent GPIOA pin 4 */$ ]2 i" ~1 B. f$ F. A" m& v
  23. #define HAL_GPIO_5                 ((uint8_t)5)        /* represent GPIOA pin 5 */
    , B) U- J* h# A1 }2 f
  24. #define HAL_GPIO_6                 ((uint8_t)6)        /* represent GPIOA pin 6 */% h( X; q; R" F1 F. v* S
  25. #define HAL_GPIO_7                 ((uint8_t)7)        /* represent GPIOA pin 7 */
    * v* n# t, t1 r4 H" Q9 C$ a
  26. #define HAL_GPIO_8                 ((uint8_t)8)        /* represent GPIOA pin 8 */
    6 Y! y  A0 k; Y9 ?7 {% p
  27. #define HAL_GPIO_9                 ((uint8_t)9)        /* represent GPIOA pin 9 */3 W/ o# d9 h- F2 j) ]
  28. #define HAL_GPIO_10                ((uint8_t)10)       /* represent GPIOA pin 10 */  {* m) d2 H. g# e. W# ]
  29. #define HAL_GPIO_11                ((uint8_t)11)       /* represent GPIOA pin 11 */8 e6 r0 x8 j& y  w2 _
  30. #define HAL_GPIO_12                ((uint8_t)12)       /* represent GPIOA pin 12 */
    ; y  ]0 \0 [' J9 @; Q$ h! V) c8 ^' B
  31. #define HAL_GPIO_13                ((uint8_t)13)       /* represent GPIOA pin 13 */
    . y5 ?' W) @9 G5 G* H- `4 j  E
  32. #define HAL_GPIO_14                ((uint8_t)14)       /* represent GPIOA pin 14 */
    / {: T. M% ?4 s( t( ]4 e) T
  33. #define HAL_GPIO_15                ((uint8_t)15)       /* represent GPIOA pin 15 */
    ) h1 ?& w1 P9 ^5 i% [" }% j; V
  34.          
    2 D7 u  T( r& ^- x# ?" C
  35. #define HAL_GPIO_16                ((uint8_t)16)       /* represent GPIOB pin 0 */, J: l* A' q4 W# R& ]# F
  36. #define HAL_GPIO_17                ((uint8_t)17)       /* represent GPIOB pin 1 */
    2 [3 y5 f3 l3 l/ \
  37. #define HAL_GPIO_18                ((uint8_t)18)       /* represent GPIOB pin 2 */0 L6 R! f* V% \' M6 X+ C& H5 p' w
  38. #define HAL_GPIO_19                ((uint8_t)19)       /* represent GPIOB pin 3 */0 V0 e6 P+ B% D( T( }% P- h
  39. #define HAL_GPIO_20                ((uint8_t)20)       /* represent GPIOB pin 4 */
    ) b8 ^7 j  p9 A% b
  40. #define HAL_GPIO_21                ((uint8_t)21)       /* represent GPIOB pin 5 */
    ! u( ^$ r* N/ Q0 h* U7 p
  41. #define HAL_GPIO_22                ((uint8_t)22)       /* represent GPIOB pin 6 */4 e6 w, M- i3 ?" l* y1 K- S
  42. #define HAL_GPIO_23                ((uint8_t)23)       /* represent GPIOB pin 7 */. ~3 L3 g' g$ q) d! J5 D  {% T! P
  43. #define HAL_GPIO_24                ((uint8_t)24)       /* represent GPIOB pin 8 */9 N' ~. F  R' O: _% C
  44. #define HAL_GPIO_25                ((uint8_t)25)       /* represent GPIOB pin 9 */
复制代码
这个倒是非常清楚,不过在官方的文档里却没有提到,需要用户自己去找,找了很久才找到!
4 b# _, v0 ~' q$ g! S- r- }6 L0 M6 F" t6 o( H% a2 n& R
GPIO通用的API列表如下8 I0 Q5 S0 ]/ l/ c# |% b( P8 _
  1. 1 hal_gpio_init# x9 _% E8 a: L+ ^) @; A) u. s
  2. 2 hal_gpio_output_high9 m  Y- j' F# p( R6 u8 W
  3. 3 hal_gpio_output_low# P' g& v! r9 b' {( I
  4. 4 hal_gpio_output_toggle6 J8 z' U& e0 T, j3 `
  5. 5 hal_gpio_input_get/ n! A, d! o: H1 `* j' G
  6. 6 hal_gpio_enable_irq' o# ~) @. i; n, u% `- r
  7. 7 hal_gpio_disable_irq; h; _! W" g" X0 T4 I4 g
  8. 8 hal_gpio_clear_irq
      Y- G$ c9 ]' a0 ?
  9. 9 hal_gpio_finalize
复制代码
有了这些基础,接下来就可以点灯了。% }- D9 u- q0 b# V' u

- R+ u4 Y7 O5 ~; x" E开发板上提供了LED1, LED2,LED3,对应的硬件连接如图
* C8 p0 w# n/ u% E
1 o. k- ]( O; m  I  ]8 t% ] 2018-07-06_091207.png 0 L7 b. Z: Z& r2 s" r) L$ R, {
. @: b1 w7 {: K  P0 G
对应前面的GPIO映射得知在ALIOS中其编号为22,接下来修改代码如下
& T1 h* ^) J5 J) D7 ]+ V% t) F+ t, ]( q* e4 Y
  1. #include <aos/aos.h>
    # r& H7 n) [% f9 [0 p5 I% O
  2. #include <hal/soc/soc.h>
    6 I* i9 m( T% P, {* b+ O& x9 G

  3. ! a  d. b5 J& Y* t: d
  4. #define LED1 22# x0 T# i7 E( \. l5 {  a# X
  5. gpio_dev_t led;
    3 t- _7 X9 Y) j1 _7 q

  6. + R% ?" h6 j% _

  7. 3 D/ g7 a: m+ D( V
  8. static void app_delayed_action(void *arg)& h* |5 q  k  Y" b
  9. {
    & z8 U2 b: ?6 @- T% O5 v1 A
  10.     //LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());& L; p7 ]+ I( c- {% {
  11.     hal_gpio_output_toggle(&led);9 @# o; o! G0 u
  12.     aos_post_delayed_action(500, app_delayed_action, NULL);+ y5 @$ p6 U$ O" n
  13. }
    % o  A$ D0 \2 M% j% Z0 ]# M

  14. 6 _' ^3 ?, J7 w& e; a) t
  15. int application_start(int argc, char *argv[])% b9 k! K2 f% D4 B# z/ P& R
  16. {0 C0 c" w9 _& e; o
  17.     LOG("application started.");
      |- Z" d# o) D% @; Z
  18.     /* gpio port config */
    / K1 k" ]7 r: f! s5 Z- e# f
  19.     led.port = LED1;
    6 O2 Z9 s5 M9 j: Z! q( v
  20.     /* set as output mode */
    0 u9 x5 l5 }6 c( f0 A* f0 m
  21.     led.config = OUTPUT_PUSH_PULL;
    . z+ }' |) D  B, A2 m( _8 u3 Y
  22.     /* configure GPIO with the given settings */( l% N9 T# D2 z) ~& Q5 ?0 G0 m. A
  23.     hal_gpio_init(&led);
    % x  O. \6 U$ O

  24. 5 [" X- o! w  i* z
  25.     aos_post_delayed_action(1000, app_delayed_action, NULL);9 D9 \2 T% E8 L9 f
  26.     aos_loop_run();
    ( {( S5 H3 d1 z/ @: G9 E

  27. * a( W4 ~1 x- f
  28.     return 0;
    8 C+ m9 B% y/ n" b) U8 J% g
  29. }
    5 h/ l6 s6 C$ S8 z
  30. / W! p( l5 V( V+ a
复制代码

% Z  Z9 ^. N* f, C. }6 P$ }
. E7 }" j1 F$ n1 w0 O非常简单的代码,然后编译,上传到开发板,LED1开始闪烁。
+ L! [& L3 B6 V3 M4 e
( X. W% ~: Y3 _关于开发环境,使用的是VSCode,使用之前记得先安装相关的组件,如下
1 H7 z9 S$ {' ]# Z. i
; I  W: M" ~% E+ `$ T2 L 2018-07-06_092454.png
3 g* ^% D( X' W" [, m
. H2 Y( F; h6 o( |. Z9 U8 {然后就可以在VSCode里打开Github上拉下来的代码文件夹,开始体验。
% V' J4 o% Q, d0 Q' p& h$ C
3 ^& X! K5 O& Q' l8 p( r' g9 ^
4 i' r2 U. ^  A& A  I
- C  q5 j9 @3 b$ Q9 A% H
0 {* m+ @2 t3 p3 P

评分

参与人数 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神点灯大法好。。
4 @3 H- ?& y, |# r, {0 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?( D4 D3 V! _% ]8 b6 A3 C/ H. V
AI++ 回答时间: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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版