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

在STM32F407上跑OpenHarmony鸿蒙操作系统

[复制链接]
攻城狮Melo 发布时间:2022-11-6 21:36
前言
4 \2 N3 C$ y1 Y( z2 s. l3 \. ?$ }openharmony移植示例 基于最新的master版本,目前支持的芯片有:7 \! _- m  |2 S+ Q
STM32F407
! `0 A& \  ]5 U3 X  u6 B3 X+ {
0 b. j  |( I% @1 I( Z2 ?1 {7 {+ L: U目标是移植更多的开发板更多的MCU支持OpenHarmony
" ]8 h- c- C$ b: ]
% A7 K2 n/ ^, K5 w( K- E经过几天的努力,终于成功把最新版本的OpenHarmony轻量系统内核移植到ARM单片机上,现在代码开源、移植文章也完成7篇,后续会考虑增加视频讲解,直播。以便大家也可以自己移植。$ c) l" l0 v2 h  t( Q% F
4 t+ p& T8 Q, C3 H, }
效果
7 [3 [- X! q0 r2 `0 Z" @
开发板照片如下,自己在网上随便买的一块( j( r. o: Z# X8 z; p2 e
10f26488fbdf44b986cdb4689bd27322.jpg
0 q- ~% |1 D1 f8 @* _' z0 g0 r* d# [/ s5 e7 ]  [* ^
目前OpenHarmony内核已经跑起来了,可以实现开发板上的LED灯闪烁。
/ F6 [: L8 m8 |串口调试打印信息:
1 j# P5 q7 P- P  z: h1 d
" ]- s# B/ f. S& o* | 510d4311b5c54e5587c5a5e6d7907600.png ) ?; Q! F: K6 a
  z; S$ U4 D9 Y/ d6 Z6 M# H
系统创建了两个线程,如下:
1 v( h+ w8 a* {2 {4 V! W
' w, ?% V, [7 x
  1. <font face="Arial" size="3">
    ; a* g) d9 f7 N3 v
  2. //线程2,用于点灯和打印
    8 r; d. D# O! i! Y. ^
  3. VOID TaskSampleEntry2(VOID)  X) A$ C: e7 l' B. }# L1 u  `/ h3 q
  4. {
    & b! B6 S& \# w! ?
  5.         printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);
    9 v5 \) n8 w: V7 ~5 C! k# f( l( U
  6.         led_init();
    " F3 @2 \: R! I0 \0 e) S
  7.     while (1) {
    # `% N+ I6 J+ _( \( y1 L$ Q; |
  8.         printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);. P; N8 `- n% ~. O; v
  9.                
    ; x7 P; N0 f+ ?2 O) v) J
  10.                 led_on(0);2 P, e, w& f/ H& U% D5 V
  11.                 led_on(1);
    + F" S* b' ?5 M( F1 o2 }: S  |
  12.                 led_on(2);5 b5 V, w3 P- p; F
  13.                 led_on(3);
    * F2 F# G9 S' ]5 p9 I
  14.         LOS_TaskDelay(1000);
      l% B# C) w, R2 r' G' T/ u
  15.                 + @0 J# z/ S3 Z8 H$ D. [
  16.                 led_off(0);" P( F2 B1 V, M- `1 m  y
  17.                 led_off(1);5 d/ `$ O' L; {( d$ e* d: ^" |2 \2 \
  18.                 led_off(2);9 @6 j8 N+ a- t( \1 M
  19.                 led_off(3);' p: }1 H- h/ f4 y. H1 ?! S
  20.                 LOS_TaskDelay(1000);1 g' Y* {' v* h0 s$ C# g" _# h/ j  G
  21.     }# @; V1 f9 y. w/ H2 T7 `
  22. }/ t7 G: O8 G6 V

  23. - S: I- m9 K5 H% C* y4 d/ O
  24. //线程1,用于打印" m* `' Y4 O5 [  {4 V
  25. VOID TaskSampleEntry1(VOID)
    9 S* y% j7 E- p+ q. b- ]# J
  26. {+ i5 F1 f; Y6 a! i  @  u
  27.         printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);
    ( ?6 U7 D! l& k7 J6 P/ F$ V
  28.     while (1) {
    * \, w7 V! n0 }1 J# Z2 `/ g
  29.         printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);
    & w: \* A1 J7 h
  30.         LOS_TaskDelay(1000);" f5 W8 n/ k5 f, b6 n# p
  31.     }
    2 e, {  C% a! m5 q
  32. }
    2 X0 p! ^- A8 S4 w  ~
  33. & [1 D- @% G9 ^; l
  34. //创建线程
    8 S; t) }- A  U) i  O1 F# ]
  35. VOID TaskSample(VOID)6 m+ X8 C* I6 L# N& X
  36. {
    7 c% c0 U" a* z7 l
  37.     UINT32 uwRet;+ I/ ^- k* k5 l$ a4 W
  38.     UINT32 taskID1;
    ' o6 ?, ?8 ~' I
  39.     UINT32 taskID2;
    8 b# ?2 Y- `( z$ _4 J& W" o# U
  40.         UINT32 taskID3;5 o% a* u' R) b6 d
  41.     TSK_INIT_PARAM_S stTask = {0};7 F$ s# @' m# ?5 y! I

  42. 3 h* m' o+ M. H' l0 u% d4 V# j
  43.     stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry1;
    7 n8 F; S0 ]+ T& \
  44.     stTask.uwStackSize = 0x1000;' [" s/ W: D0 _& }+ [) d
  45.     stTask.pcName = "TaskSampleEntry1";( W5 f. O; X* P3 n% ]- z" P
  46.     stTask.usTaskPrio = 6; /* Os task priority is 6 */: r! \/ {+ X$ ~" m( p) Z
  47.     uwRet = LOS_TaskCreate(&taskID1, &stTask);
    & W7 W/ [7 r8 @9 F! ]
  48.     if (uwRet != LOS_OK) {
    5 `/ W, l/ d3 L/ Y
  49.         printf("Task1 create failed\r\n");4 R" `0 v& M3 K5 {1 r
  50.     }
    7 I+ X& U$ q5 I( F+ _1 U" y5 T! T

  51.   ?0 A" W2 w9 _# P* \5 z/ g$ j
  52.     stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry2;
    7 ?$ r' Q  L' R5 M5 g0 J' x
  53.     stTask.uwStackSize = 0x1000;9 U* K8 g) Q7 h8 d: }+ K& x
  54.     stTask.pcName = "TaskSampleEntry2";8 B# I  Q/ }0 Q* @  U8 f
  55.     stTask.usTaskPrio = 7; /* Os task priority is 7 */
    " [1 Q$ T, f& H; Q! h" [- _) ~
  56.     uwRet = LOS_TaskCreate(&taskID2, &stTask);- q/ a, W) U, b" S9 i/ h; U4 ]  E
  57.     if (uwRet != LOS_OK) {
    ! K; x$ c* ^- S; Z( N
  58.         printf("Task2 create failed\r\n");4 L# F( T) y) N, d; D# E$ ~5 E
  59.     }; b! ]& b# O. k: N) A4 I8 P# G* C
  60.         
    1 ~1 f6 k* F% z% ]& {
  61. }</font>
复制代码

/ D( Q7 P7 O/ b' K3 Z代码开源- A* }2 A: R% [- Q
本次移植所有代码都将会开源给大家,同时也会持续做适配,后面会适配网卡、LCD、触摸屏等驱动。& \- G$ E7 }5 B3 T
————————————————
% b8 X, t8 t$ I5 j' M版权声明:连志安的博客
+ L* P  z( h* x7 i- s9 I6 j' ]; Z8 |- ]

- w7 t! e9 O  S  y2 q# Y; X
赞 收藏 评论1 发布时间:2022-11-6 21:36

举报

1个回答
STMWoodData 回答时间:2022-11-7 18:06:19
学习学习
) I3 R+ _! P+ q2 q2 g

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版