STMCU小助手
发布时间:2022-4-16 21:00
|
本文将重点讲解STM32的MAC控制器,也就是下图区域2。, w5 f/ s) ~2 i% R, l$ ]9 N) Z0 { * a% x8 U6 V7 H# a, Q) j
3 h3 F! m; m# A 01、STM32的MAC概述) M. e8 S- H% @' v STM32的MAC控制器全称是:MediaAccess Control。" b: o8 h2 S% c9 B0 Z" @ STM32F207的MAC控制器支持的模式" p! C+ c& [, _2 a0 h ' r: F* \ Y! C2 x2 F2 ]5 n 符合IEEE 802.3 MAC S j) Q, _: r3 x- Q8 ~+ ? 10/100Mbps网络: D* l5 U3 d B) w 全双工和半双工通信 6 c7 \6 O' ]4 @! ^ 和外部PHY的MII接口和RMII接口8 Z4 ? E4 L7 n, A8 ? 支持前导码和帧起始数据(SFD)插入或删除 支持IPv4的头部checksum校验和检查 0 ~- n0 ^) I4 b( Y 支持以太网唤醒 有效载荷检查
& m3 n/ P9 A% r$ v$ v 其实ST在设计MAC控制器时,设计了其他功能,PTP(IEEE1588)精确时间协议,MMC网络统计功能,这些功能并不常用,本人也没有接触,就不再讲解。 7 y. h' y$ a! ? 对于上面说到的:支持前导码和帧起始数据(SFD)插入或删除。 % a% z1 |7 U3 b7 Q$ S3 T 一个以太网数据结构如下: & B% s- o/ \- B( h6 [6 I( g' n
大多数网络设备都是支持前导码和帧起始数据(SFD)插入或删除。所以可以说,这是网络硬件设备在以太网帧前打包的数据。个人认为并不属于TCP/IP协议簇的内容。# X; P" N x- B6 x3 L/ D * R* w- i% d: S* t 02、MAC地址过滤 STM32的MAC控制器支持MAC地址过滤的。( v+ g- k. [' L0 u! Q2 V9 G4 n1 V. q 目的地址过滤:7 L% D6 L& V/ x 单播过滤 组播过滤. d( W6 Z0 }: k) y% J* O4 Y/ \ & P, H6 a- c) ]8 K# J$ O! ~/ b' y 广播过滤 注意:广播过滤会导致ARP广播也收不到。2 C( p, A9 ~. `+ ?+ \3 {4 h $ ~( B* s" t8 C0 J A: s0 l# a1 k! l 源地址过滤:. g# j5 W5 U, n3 b 1 I; Q9 f& X7 p- u9 C, B 单播过滤) [* c+ r. O i( V7 m STM32的MAC控制器还支持:规则翻转,比如,原来只允许单播过滤接收,翻转之后,只有单播不接收。2 E% b, J E- E( H : U7 u) b5 ]# h) p2 C1 R- l* M( Z. y0 s 在STM32实际项目开发中,只需要调用ST的库文件即可9 l. K3 x9 H! C) m/ d0 t
关于MAC地址相关信息,什么是广播,MAC地址表示方法,请看之前的推文《以太网数据首部》。; j" _2 j( {9 q q6 q5 C8 S0 s 03、有效载荷检查 有效载荷检查其实是IP协议要求长度必须大于46个字节,不足时填充pad字节,具体细节请看《5000字“肝”了这篇IP协议》。) K# V8 F/ u( a- Z( b* c 当从应用程序接收的字节数低于60时(DA+SA+LT+Data),零被附加到发送帧以使数据长度正好为46字节,以满足最小数据字段的要求IEEE802.3要求。 6 T; u, X! _& b4 T3 E
5 @2 L6 k7 f% S$ T* f 04、Checksum校验和 首先明确,STM32的MAC控制器并不能对TCP/IP协议中所有的Checksum自动校验。STM32实现了IPv4,ICMP,TCP和UDP协议的Checksum校验和。3 V' i# r) J3 a% e 5 e5 E$ g1 \7 t5 h( |" L7 T2 D 发送的时候,STM32会自动计算Checksum校验和并自动插入。+ L e' h- i; A' } @+ `8 F " H- S- X/ d) h 接收的时候,STM32会自动校验Checksum校验和是否正确。 1 @( ]& t q1 J9 \5 C& ^ 上述功能可以通过以下操作开启: % R6 X/ m- D( |5 O# o4 p2 A) Q 通过在ETH_MACCR寄存器中设置IPCO位来启用接收校验和卸载。2 r# {1 R/ t8 Q, `1 q4 B 通过在TDES1寄存器中设置CIC位,在传输时启用校验和计算和插入。1 K6 E0 J# Q/ `; N+ U. T . S' V/ G& z6 ~# c+ X 但实际代码开发中,并不需要操作寄存器,使用ST的库接口如下( u0 {7 W& } y- m
2 ]/ g9 d; {8 X& s, } |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版