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

在STM32F407上跑OpenHarmony鸿蒙操作系统

[复制链接]
攻城狮Melo 发布时间:2022-11-6 21:36
前言
9 c" x1 X! J( d3 S- V+ e5 u# _openharmony移植示例 基于最新的master版本,目前支持的芯片有:& _: Z6 M* B6 `5 f4 s0 V, `# E
STM32F407
4 a9 h2 L6 A; M3 [! e$ Q
/ d& z) I- ]( U' ~6 t目标是移植更多的开发板更多的MCU支持OpenHarmony
! a' _8 _0 ?2 k) X: z
  g: F; [) r% D) ?& Z4 H+ E经过几天的努力,终于成功把最新版本的OpenHarmony轻量系统内核移植到ARM单片机上,现在代码开源、移植文章也完成7篇,后续会考虑增加视频讲解,直播。以便大家也可以自己移植。
' p! f" O9 y. m* G+ ]! ~8 T- O9 D
效果

0 h* ?7 ~' i3 S- O2 n8 \; z开发板照片如下,自己在网上随便买的一块/ ]$ h2 F6 O2 _+ a! c* y- r
10f26488fbdf44b986cdb4689bd27322.jpg ! _' d8 i0 X1 X7 |* |0 e

. ^' K8 _  ~7 t3 n目前OpenHarmony内核已经跑起来了,可以实现开发板上的LED灯闪烁。) O  c* r3 Q7 X( }) j6 F. h
串口调试打印信息:1 c2 T( `5 A0 ~. G
# Y( T! L7 R, R% }2 v; B& [9 t; S, k
510d4311b5c54e5587c5a5e6d7907600.png $ c" p5 f6 \' ^2 p% s" _6 h

+ s. g9 f5 P. x7 L' O系统创建了两个线程,如下:
' d+ w5 l, Q- f9 q: B& V5 _# n9 A* ]) B6 c$ b
  1. <font face="Arial" size="3">% d/ I1 e+ k/ e
  2. //线程2,用于点灯和打印
    : f. S& n. H% |( q9 |; y
  3. VOID TaskSampleEntry2(VOID)
    - z8 K/ d6 q  @2 x. G  w
  4. {
    3 ?+ h, B; k# b$ ~
  5.         printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);5 Z7 V3 O0 I4 N+ E- C
  6.         led_init();' z6 @& C6 n7 \; r& \: G
  7.     while (1) {
    9 m) o: k+ k  j7 ?4 A8 n
  8.         printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);
    , J' k+ K3 p( H% N5 B  i# W$ N
  9.                 & C9 F1 {- u4 c, s" r& c
  10.                 led_on(0);
    6 m6 U+ J* w+ ?! b7 F5 i
  11.                 led_on(1);
    5 ?( k4 A  V% }" z8 d
  12.                 led_on(2);9 ?. O7 ~! s+ I
  13.                 led_on(3);9 A; B8 M2 W$ ?5 P' J6 y( _
  14.         LOS_TaskDelay(1000);4 y# [5 T) |, O9 L
  15.                
    3 F& h: h0 H) Z- w, \' h# S/ w7 P
  16.                 led_off(0);" A- z( X* w8 p0 x8 |
  17.                 led_off(1);- x1 b" L8 p1 g+ [& d; T
  18.                 led_off(2);
    . D- h8 A. M7 w, H4 ]) @- r
  19.                 led_off(3);& D; \5 c9 c' D" Q! z& d
  20.                 LOS_TaskDelay(1000);) P% K$ q( T7 K6 b3 ^
  21.     }
    8 D$ g9 P; A2 ~# {. p- b
  22. }" A, W/ P. Y. i& q* s
  23. 3 G9 N5 i5 b# H+ x2 Z
  24. //线程1,用于打印( A# G$ q6 V4 Y. j% I5 x# P1 v9 m
  25. VOID TaskSampleEntry1(VOID)$ w; d  `9 x7 h5 z. [6 h1 |. y
  26. {
    5 N/ x9 f& a" w/ F' W
  27.         printf("______>>>>>>>>> %s %d\r\n", __FILE__, __LINE__);3 T) H* L, x3 T) v* T. C
  28.     while (1) {
    % m0 ?; g: |+ U' t' e1 y7 x
  29.         printf("___>>>>>> %s %d\r\n", __FILE__, __LINE__);3 I/ L* K) o5 W; J
  30.         LOS_TaskDelay(1000);7 ~& |( n( U% U7 L8 r6 e( B
  31.     }8 ?6 W# \1 S5 ~; s" C' l0 h+ a
  32. }
    $ N% A2 e% r% Q, P. Y
  33. , V4 E9 A+ k, i( {$ T6 L  }+ }
  34. //创建线程; }# R$ K  W! n
  35. VOID TaskSample(VOID)
    ! P. i% e: D- O) x. k1 p
  36. {; _7 w' r! P) a, I( `, o8 z- t; h# o
  37.     UINT32 uwRet;
    ! K" h. X% v$ H
  38.     UINT32 taskID1;7 L, f6 _+ \$ U- [
  39.     UINT32 taskID2;
    7 ?, r1 k' B# n, N
  40.         UINT32 taskID3;8 R. R  W0 G  i1 I# n
  41.     TSK_INIT_PARAM_S stTask = {0};. z5 r! g4 k2 M7 R0 D( x% E
  42. ; z( v! `5 T% P
  43.     stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry1;4 i5 g" E5 X. j; @9 v  j, n8 @5 j
  44.     stTask.uwStackSize = 0x1000;. x6 }# X  Z1 t. i) X1 t
  45.     stTask.pcName = "TaskSampleEntry1";3 {$ N/ z/ b" n% l$ V0 o+ ~5 a
  46.     stTask.usTaskPrio = 6; /* Os task priority is 6 */9 M# c/ l. q3 P+ M9 M9 ~, b: k1 k
  47.     uwRet = LOS_TaskCreate(&taskID1, &stTask);6 R8 A8 p9 M3 {: q- u3 P0 P/ Q
  48.     if (uwRet != LOS_OK) {
    3 J! i' c% Z- X- `' y# a4 T- v  U
  49.         printf("Task1 create failed\r\n");& F6 o4 |; `  U# X' W  {  y4 M
  50.     }
    % f2 _5 y9 T( Q2 T- k2 X7 w

  51. . Q4 X' m3 S  k. [
  52.     stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry2;
    # I/ A, W( V8 @, _! c
  53.     stTask.uwStackSize = 0x1000;; ]# ?. D' \6 h' m
  54.     stTask.pcName = "TaskSampleEntry2";2 N! D& j9 i/ |: g9 r
  55.     stTask.usTaskPrio = 7; /* Os task priority is 7 */( f9 Z& g) c. c: c' e0 o
  56.     uwRet = LOS_TaskCreate(&taskID2, &stTask);
    4 a( C" r$ E2 I( q: U, Z$ u! W
  57.     if (uwRet != LOS_OK) {
    1 u7 D' V' p/ l
  58.         printf("Task2 create failed\r\n");
    % V5 j0 s% n# D& M4 u$ F
  59.     }% ?8 |" O5 h) a9 d* p( w
  60.         
    - T% M# H8 p! u9 K7 [' u
  61. }</font>
复制代码
' D. u  C% D7 I
代码开源
( r  m8 l1 G& N4 b) w本次移植所有代码都将会开源给大家,同时也会持续做适配,后面会适配网卡、LCD、触摸屏等驱动。6 ]7 l( ~* p2 N& V# r
————————————————
1 @7 `8 I6 |1 E4 u/ g" |7 W版权声明:连志安的博客
% X, d5 r9 c( b$ n& l8 d/ d6 L* D6 z7 ^6 a/ t
3 t9 T; Y3 v/ b$ [
收藏 评论1 发布时间:2022-11-6 21:36

举报

1个回答
STMWoodData 回答时间:2022-11-7 18:06:19
学习学习' X& m4 z4 w1 A& |
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版