请选择 进入手机版 | 继续访问电脑版

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

Alios Things开发套件之点灯

[复制链接]
netlhx 发布时间:2018-7-6 09:26
点个灯是为了上手,了解一些最基础的东西,比如程序框架,外设的一般操作方式。
5 X/ e5 g1 H- J" ?$ {# L5 ?" H+ j5 _2 S1 u+ w) J; ^7 o
Alios即然是一个OS,程序框架必然和裸机操作不同,先看个简单的hello-world,代码如下
% y* G- m. f, ]$ h
  1. #include <aos/aos.h>
    - Q7 {* E) r. Q3 G

  2. " z8 ?9 b+ Q& O* c* n
  3. static void app_delayed_action(void *arg)6 O( U1 u  _9 v) B
  4. {
    " @& d, r$ s/ O7 @- h) W' R  E' l2 w
  5.     LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());
    6 G% n7 ~" a9 U3 g  S
  6.     aos_post_delayed_action(5000, app_delayed_action, NULL);
    - J2 D# K% m+ s! V
  7. }
    . ^) T4 p. u+ ~
  8. 1 g2 v% w4 M5 p/ F. {
  9. int application_start(int argc, char *argv[])$ M* x, D/ @5 L4 e2 K( i& y
  10. {
    6 x  S. a7 f: i3 h; `9 T: y
  11.     LOG("application started.");
    3 u- u  m# D4 b0 i9 V4 ]6 K
  12.     aos_post_delayed_action(1000, app_delayed_action, NULL);/ }6 `- m& P- k4 k' t3 P8 ^
  13.     aos_loop_run();
    * j. p* A9 @8 \: x, T
  14. 2 C+ f4 C3 G7 e0 D
  15.     return 0;
    . A' O; V' J: e) p: O5 _5 K
  16. }
复制代码
头文件aos.h是alios动力的源头,先不管有多复杂,照抄就是了。/ X3 a4 p' ~$ ^9 d7 B6 _- I, ?
application_start是程序的入口点,硬件上电初始化后,要跳到这里来执行。" |* V4 p, D' W9 k% \) W5 J% y

; k  ^: g- U* `+ q) `# Y( }1 H6 A0 }aos_post_delayed_action(1000, app_delayed_action, NULL)的作用是延迟执行指定的代码,在1秒钟后执行app_delayed_action函数,这个用法有点和Android中的Handler.postDelay方法类似。* R7 j. j* `: n  J  F

; O+ v$ ^5 s( {$ @然后在app_delay_action函数中,反复延迟调用自身,从而达到反复执行的目的。; k' K6 v8 P+ f1 @2 J' r
. K; ]* _& w8 ?) N4 C& w: V% r) p3 Y
在入口函数中的aos_loop_run则是进入事件循环,该干啥就干啥。
8 s" F- v$ m4 @5 s1 }: g+ h
4 S" f2 D/ K# P8 X5 x点灯用到GPIO,alios要忽略硬件之间的差异,必然得提供一份统一的API及差异化的硬件配置,统一的API提供了GPIO的初始化、读写操作,而差异化的硬件配置则针对特定的硬件平台。
  I! J+ D6 C. w7 b: E; |
5 a5 ]7 Z+ R, P这个差异化的配置文件位于board目录下,针对Alios Things Development Kit来说,该文件为+ J% _% ~9 d4 J% d9 X; g/ f
  1. AliOS-Things\board\developerkit\hal\hal_gpio_stm32_l4.h
复制代码
中,部分代码摘录如下$ u# P/ F: y- Y0 ?3 B

( n) M7 m( J0 Z) w8 ~. x/ \7 s6 N
  1. #include "stm32l4xx_hal.h"
    8 B" _8 g7 g; v% g
  2. #include <string.h>
    * w! l7 }5 {4 T+ v. [
  3. #include <stdlib.h>0 U) g5 q* }$ l
  4. #include <stdio.h>/ v. ?! p- @( U( U1 P, L
  5. #include <stdbool.h>
    8 Z# ^! _1 a/ B
  6. #include "aos/kernel.h"( v$ L- w- T* i$ ^/ D: |' J
  7. 4 C& f. W0 N  G' E
  8. #define PINS_IN_GROUP  16
    4 f  J( i" H0 ^
  9. #define GROUP_GPIOA    0$ D+ u( ~$ L9 G/ \. {  H
  10. #define GROUP_GPIOB    1         
    ; t6 k2 @7 ^/ N! _1 u5 v* ~
  11. #define GROUP_GPIOC    2
    * ~( l( k+ [1 i, N+ I, j- _: }; H
  12. #define GROUP_GPIOD    3         : K  k! C& K9 t0 B; v) \
  13. #define GROUP_GPIOE    4
    ; Y6 K( p) J  W& A: R
  14. #define GROUP_GPIOF    5& n$ A  K9 x$ K- Q/ \% j9 d
  15. #define GROUP_GPIOG    6: C& q. ~8 j7 U4 H1 }
  16. #define GROUP_GPIOH    7
    ( P0 e. u2 j3 C6 C; y- P
  17.          4 ~4 [$ |$ o5 f
  18. #define HAL_GPIO_0                 ((uint8_t)0)        /* represent GPIOA pin 0 */+ M& m* t8 P9 ]) q7 N( @, i( f
  19. #define HAL_GPIO_1                 ((uint8_t)1)        /* represent GPIOA pin 1 */
    # h' M2 t% |6 O4 t3 u
  20. #define HAL_GPIO_2                 ((uint8_t)2)        /* represent GPIOA pin 2 */! b+ D0 n5 ^7 k0 ?
  21. #define HAL_GPIO_3                 ((uint8_t)3)        /* represent GPIOA pin 3 */
    ' ^# f  k5 p6 I* h
  22. #define HAL_GPIO_4                 ((uint8_t)4)        /* represent GPIOA pin 4 */4 _& }* V% L3 s3 g- k
  23. #define HAL_GPIO_5                 ((uint8_t)5)        /* represent GPIOA pin 5 */. }$ y  I. c  Z% e9 o( G
  24. #define HAL_GPIO_6                 ((uint8_t)6)        /* represent GPIOA pin 6 */
    9 p, K& X; N/ j4 g8 Q" O" k
  25. #define HAL_GPIO_7                 ((uint8_t)7)        /* represent GPIOA pin 7 */
    ' y, H( X( J. x3 X, M) M& v/ n5 V
  26. #define HAL_GPIO_8                 ((uint8_t)8)        /* represent GPIOA pin 8 */
    # q! S0 ]1 `% s
  27. #define HAL_GPIO_9                 ((uint8_t)9)        /* represent GPIOA pin 9 */
    1 \/ ?/ L; J  i
  28. #define HAL_GPIO_10                ((uint8_t)10)       /* represent GPIOA pin 10 */
    8 l& L6 E& I6 N# P2 d: ~
  29. #define HAL_GPIO_11                ((uint8_t)11)       /* represent GPIOA pin 11 */1 a1 }8 k$ V$ n
  30. #define HAL_GPIO_12                ((uint8_t)12)       /* represent GPIOA pin 12 */9 t* C1 G% a" o0 |2 {  d
  31. #define HAL_GPIO_13                ((uint8_t)13)       /* represent GPIOA pin 13 */
    " I6 J- E/ n9 ]" J
  32. #define HAL_GPIO_14                ((uint8_t)14)       /* represent GPIOA pin 14 */
    # @# g1 x$ N2 k  m$ s
  33. #define HAL_GPIO_15                ((uint8_t)15)       /* represent GPIOA pin 15 */! o1 R1 R. r% ^+ ~* S
  34.          1 `/ Y$ b* I: v9 j5 B! j8 _
  35. #define HAL_GPIO_16                ((uint8_t)16)       /* represent GPIOB pin 0 */
    % Z+ d! m3 W. P* t" J
  36. #define HAL_GPIO_17                ((uint8_t)17)       /* represent GPIOB pin 1 */- ~: L; I4 u9 @9 A) w, K" I! V
  37. #define HAL_GPIO_18                ((uint8_t)18)       /* represent GPIOB pin 2 */) o. |& a0 `* F5 ?/ d5 H% i! j
  38. #define HAL_GPIO_19                ((uint8_t)19)       /* represent GPIOB pin 3 */# M$ ^) {+ A1 X% T6 X# O
  39. #define HAL_GPIO_20                ((uint8_t)20)       /* represent GPIOB pin 4 */9 J% A; I! I+ A( }2 [. C( ^
  40. #define HAL_GPIO_21                ((uint8_t)21)       /* represent GPIOB pin 5 */6 f4 k" B( B5 f5 S8 r( |: t
  41. #define HAL_GPIO_22                ((uint8_t)22)       /* represent GPIOB pin 6 */- |' T( K* \5 U
  42. #define HAL_GPIO_23                ((uint8_t)23)       /* represent GPIOB pin 7 */1 m4 M7 d* M7 X% N
  43. #define HAL_GPIO_24                ((uint8_t)24)       /* represent GPIOB pin 8 */
    7 }0 _; f  g+ w" l/ ?4 C
  44. #define HAL_GPIO_25                ((uint8_t)25)       /* represent GPIOB pin 9 */
复制代码
这个倒是非常清楚,不过在官方的文档里却没有提到,需要用户自己去找,找了很久才找到!
9 H) t% r* J, ~4 ~1 q( J/ ?1 j# ~! \' V" b4 M+ E7 V! V7 c
GPIO通用的API列表如下  u3 H6 m1 n- [! D% o* S6 @! r
  1. 1 hal_gpio_init. p% ?/ c& B  _* |9 _5 u9 R. R  y
  2. 2 hal_gpio_output_high& Z' z- i7 }5 m0 y
  3. 3 hal_gpio_output_low
    1 k8 s5 D: `% a" g, t4 E# `
  4. 4 hal_gpio_output_toggle8 k$ f- R' q4 q' Y0 J) F6 s; l7 k
  5. 5 hal_gpio_input_get
    % ^) ?  K, e' \$ d
  6. 6 hal_gpio_enable_irq" i' g6 k! _8 m7 X9 t& V. {5 Q6 D
  7. 7 hal_gpio_disable_irq
      e6 x! q# M" z1 w+ ~# W* o' S
  8. 8 hal_gpio_clear_irq% ~, P. H( d1 v( M; w
  9. 9 hal_gpio_finalize
复制代码
有了这些基础,接下来就可以点灯了。  G% @+ \4 H: _4 ?

/ O( ~0 V+ ~# b: X9 k, i0 i) s$ n开发板上提供了LED1, LED2,LED3,对应的硬件连接如图
' ]$ n$ Y8 y2 t# o2 x" S
9 O8 Y: b* Z: H# p 2018-07-06_091207.png 6 T# U8 E/ A1 U& u- ^0 y
( K+ S" ^' O2 G( {
对应前面的GPIO映射得知在ALIOS中其编号为22,接下来修改代码如下
" ]# i; G$ k# X, F" Q3 \) x5 \0 K( }4 F" q6 I) U$ J1 M1 ^
  1. #include <aos/aos.h>. _/ W0 o0 ?2 I4 d6 e# j
  2. #include <hal/soc/soc.h>* @4 ]7 X6 H  J; w* n

  3. 0 g% U& ^2 z; ~! b
  4. #define LED1 22/ d8 m5 Y8 e& M& b) p
  5. gpio_dev_t led;, o; C8 \4 K1 [9 V% H
  6. ' C& H, M" A( {' K+ |  H( h6 V2 H( K
  7. . d9 V% ~6 t. n5 N% S
  8. static void app_delayed_action(void *arg)
    ) X; `3 b0 ~$ W! i
  9. {2 \0 s. t$ b6 A7 m+ W$ z
  10.     //LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());) b$ X" j1 [2 [& M7 @
  11.     hal_gpio_output_toggle(&led);; I8 R/ v6 O5 E8 P3 g
  12.     aos_post_delayed_action(500, app_delayed_action, NULL);
    $ L/ H: o, J" `$ f+ v3 h; a
  13. }
    # w+ S: K0 w# Q; a: d1 T1 N5 S2 G5 X2 B$ |
  14. 8 g7 o% q4 z8 \6 K
  15. int application_start(int argc, char *argv[])
    4 @9 w+ c8 R! J6 X2 G8 I5 q, o
  16. {
    ( G, W  M0 h$ a8 ~2 Z4 X
  17.     LOG("application started.");
    6 E: V3 Z: u( X& i' F% k$ ]+ A
  18.     /* gpio port config */
    ) Q+ |: C( |5 B' @- r
  19.     led.port = LED1;
      z+ G( o% N* F% I
  20.     /* set as output mode */
    $ B* r) \& `/ T7 e7 a" G
  21.     led.config = OUTPUT_PUSH_PULL;8 i/ j. K7 y8 Y5 J' f3 l
  22.     /* configure GPIO with the given settings */
    ' O$ F+ L; A3 F7 m+ t, Y0 M
  23.     hal_gpio_init(&led);
    + K. m! e# K" S' g  d

  24. 9 U7 Y( v# d+ \2 I" t
  25.     aos_post_delayed_action(1000, app_delayed_action, NULL);1 U/ ^4 J/ |: C
  26.     aos_loop_run();- r" h4 m" C- `* K

  27. ; E' T$ |  g% i/ Z+ p2 R
  28.     return 0;
    - {  b5 Z* U4 m. V( @
  29. }
    8 W* d% @/ m+ N4 l# i3 g# s
  30. , a* G+ @4 K" V3 P
复制代码

; D3 g8 Z0 s8 I% q( B6 r, r9 d' \! j9 c7 @3 V
非常简单的代码,然后编译,上传到开发板,LED1开始闪烁。
0 e5 e, J# v) c% X) W# D' g( s
3 W# A. Z8 Y8 m/ }, B  i  H关于开发环境,使用的是VSCode,使用之前记得先安装相关的组件,如下6 G! ?8 W& k% ]# v

4 V( O  W" E; }- R* X 2018-07-06_092454.png ; t7 `: @' H5 G
. @/ _& T+ |# b# N! i  j3 k) F: K
然后就可以在VSCode里打开Github上拉下来的代码文件夹,开始体验。
" M6 @* u3 D1 }$ I) e# j/ B+ W$ c6 t" C2 {( L- S# L6 M) E. a% h

5 ]* o& R1 F3 @
# H8 A7 E2 N8 t$ ?4 a% Q3 r, r' [9 V: Z0 j$ t/ ]* j4 ?

评分

参与人数 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神点灯大法好。。3 W" F8 }* E; P3 f+ U$ J" ?+ U  R
七哥 回答时间: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?6 ?8 _8 S1 r, c* x9 L
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 手机版