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

【STM32H5 评测】+ 增加ETH外设和NetX协议栈实验

[复制链接]
BinWin 发布时间:2026-10-31 17:42
        上一篇用 GFXTIM 给 OLED 打节拍,点亮了屏幕。这次琢磨着再添加个外设,这款板子还有个网口虽然百兆,对单片机小应用来说还是够够的。目标是保留之前的ADC采集内部温度,串口打印,OLED刷屏,然后使用NetX 网络协议栈做个网页端的监控界面。能够显示OLED上的界面,还能控制LED。
) u' P7 \) ~$ I3 i, j        但是NetX Duo是需要开启ThreadX才能使用的,在NetX的代码里需要调用任务创建功能,而且socket里遇到的阻塞也都要使用RTOS的时间和信号量来同步,所以CubeMX直接打开软件包。; o) H, T- R: l; y
      2 J; L8 J6 c; e+ f' c
* U+ |8 i( }; I8 F/ G* a8 `! L- a+ h
         1.png 9 r- e2 s/ `! \2 S
         以上还不够,需要自己补充PHY驱动接口,这个从演示包里取,里面挺多资源的。% j  w/ l# `+ \! Z4 b# h( J) s

# }2 b$ W3 {1 D1 [, s, {! `4 S1 q# G2 k# W! S) ?& F; s* Z1 |
         2.png
8 `7 Z4 K# v# v" r5 ?% t5 W       7C131 是 LAN8742A 的身份证。读到了说明 MDIO 通、PHY 有电、复位正常;读到 FFFF 就是管理引脚或者时钟的问题;读到 ID 但没有 link,那就是网线或者对端的问题: O: P5 ^. b: x4 F( N6 v
  1. net: phy@0 id=0007C131 bsr=796D link autoneg-done 100M
复制代码
    还有自己挖的一个坑就是system tick 没有修改为常用的1000Hz,默认的是100哦,导致协议栈像卡死一样。好在宏定义修改一下就行% W5 O- l# K/ g5 D. U
   
  1. #define TX_TIMER_TICKS_PER_SECOND   1006 T2 U; {4 w6 O" V2 x) Q6 r9 W- ~
  2. #define APP_TICKS(ms)  ((ULONG)(((uint32_t)(ms) * TX_TIMER_TICKS_PER_SECOND) / 1000u))
复制代码
   还要注意的是创建了多个任务,要特别注意网络相关任务的优先级。准备资源的任务要优先级配置低一点。
. B# o5 }6 |) T9 P  M- P    不擅长的地方就是web页面的编写,这个毋庸置疑需要AI复制,交互层面一下几个
3 C4 U4 e% c2 |9 i" C- h. E
  1. GET /     10 KB 单页仪表盘(编译进 Flash 的 C 数组)/ Q8 w. X2 T; ^9 L3 L9 e5 X
  2. GET /api/status    全部状态 JSON2 v# }3 [  M: ?9 U9 x, \& ?
  3. GET /api/led?toggle=1    点灯* v3 d; _' t& e; V. H/ g9 R% r/ a" E
  4. GET /api/fb   1024 字节显存原始数据
复制代码
  刷屏的缓冲区传给浏览器,html中按位还原到canvas,实际效果挺好。web画oled的函数
, N6 Q' k5 S3 Z  ]. U  J* N* b  
  1.   function drawOled(b){, W: b$ X: f1 a8 ^9 s! d
  2.     for (let p=0;p<8;p++){
    : x0 L, M) i' C5 y" c
  3.       for (let x=0;x<128;x++){
    ! `9 m  x6 n, e
  4.         const v = b[p*128+x];. g9 ]# ]9 z4 K3 Q; _% c% s3 W7 `) k
  5.         for (let bit=0;bit<8;bit++){
    , d& V2 s  F0 k6 b+ K- U& C# i& w, \
  6.           const on = (v >> bit) & 1;
    , T+ P4 r: W: d6 e  a' V
  7.           const i = ((p*8+bit)*128 + x) * 4;' o/ m  h! P5 z3 V* _3 H
  8.           img.data[i]   = on ? 150 : 4;
    % }/ o2 b  M( s% L& @* f
  9.           img.data[i+1] = on ? 240 : 10;* E/ m- ^$ z' B# e6 T8 a
  10.           img.data[i+2] = on ? 255 : 18;9 R8 Y) C; h. I
  11.           img.data[i+3] = 255;" n: s. I; S! x
  12.         }
    6 ^% H6 G: T& ]) i$ k+ E4 U6 d
  13.       }' }* I, A$ j, t$ V/ ~7 E' p
  14.     }
    ' o! Q+ g/ e6 b! Q1 _, d
  15.     ox.putImageData(img, 0, 0);
    + f5 L  n' c  d1 V6 Y; E
  16.   }
    9 l; C' n6 q7 B" v3 F# i& {7 \4 O
复制代码
      3.png 4.png , i# s' `8 N/ T# A* ~' f3 x: _+ s

' A- r5 U) f' z! _ GFXTIM仍然可以保证屏幕的刷新不受影响,跑了一端时间,网卡连接很稳,不光是NetX牛逼,H5这个处理器也牛。8 q* _7 w3 w/ j& y3 Z
       5.png
/ K, O" K, Z' N% n+ L3 r: T      芯片温度也还是30度的水平,仅比不加屏幕和网络时平均高出3度。最后还得附上实拍
& T% _+ ?( _; z5 a      
; h7 c$ C; Q6 Y/ w      
$ P( z! O( o7 _& W2 |$ p: c( w8 B" V+ c4 e% ]2 k1 u) E
赞 收藏 评论0 发布时间:2026-10-31 17:42

举报

0个回答

所属标签

相似技术帖

官网相关资源

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