一、网络分层体系
1、OSI参考模型
2、TCP/IP的分层
二、数据的封装和分用
三、以太网帧数据的传输
1、局域网间通讯
2、跨网络通讯
一、网络分层体系1、OSI参考模型OSI 参考模型(Open Systems Interconnection Reference Model)是由国际标准化组织(ISO)制定的网络通信框架标准,通过定义七层标准化通信体系,为不同厂商设备互联提供统一规范:
目的:解决早期网络设备兼容性问题,实现跨厂商、跨平台的互联互通;
核心思想:分层解耦,每层专注特定功能,下层为上层提供服务;
意义:虽实际网络中TCP/IP协议栈更常用,但OSI模型仍是网络协议设计的理论基础和教学工具。
2、TCP/IP的分层网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。TCP/IP分层模型是互联网协议套件的基础,它简化了OSI模型,将网络通信过程划分为四个层次。TCP/IP模型的主要目的是提供一个实际可行的网络通信架构,它是互联网和许多其他网络的基础。TCP /IP,...
一、邮箱API函数
1、邮箱的创建
2、邮箱的发送
3、消息的接收
4、邮箱的脱离/删除
二、创建邮箱示例
1、创建邮箱
2、接收与发送消息
邮箱(Mailbox)是RT-Thread中高效的线程间通信机制,其核心特点是:
传输固定尺寸数据:每条消息为4字节(32位系统),可传递整型或指针
轻量级通信:比消息队列更节省内存,适用于小数据量场景
优先级传递:支持紧急消息优先处理
典型应用场景: 在硬件中断服务中,通过rt_mb_send快速传递传感器状态字,消费线程解析后触发相应动作,避免中断长时间占用CPU资源。
一、邮箱API函数1、邮箱的创建
动态创建邮箱(推荐灵活场景)
1rt_mailbox_t rt_mb_create(const char *name, rt_size_t size, rt_uint8_t flag)
静态创建邮箱
12345rt_err_t rt_mb_init(rt_mailbox_t mb, const char *name, ...
一、消息队列API函数
1、消息队列的创建
2、消息的发送
3、消息的接收
4、消息队列的脱离/删除
二、创建消息队列示例
1、创建消息队列
2、完整示例
消息队列(Message Queue)是一种异步通信机制,其核心功能是:
解耦生产者和消费者:发送方和接收方无需同时在线
缓冲与流量整形:应对瞬时流量过载
优先级处理:支持紧急消息插队
典型案例: 在RT-Thread中,中断服务程序(ISR)通过rt_mq_send非阻塞发送传感器数据,消费者线程按需从队列读取数据,避免ISR因等待导致实时性下降。
一、消息队列API函数1、消息队列的创建
动态创建消息队列
1234rt_mq_t rt_mq_create(const char *name, rt_size_t msg_size, rt_size_t max_msgs, rt_uint8_t flag)
静态创建消息队列
123456rt_err_t r...
一、rt_thread_delay_until()函数
二、rt_thread_delay()函数
三、rt_thread_mdelay()函数
四、rt_hw_us_delay()函数
在RT-Thread实时操作系统中,延时函数是实现任务调度的关键工具。它们允许任务在指定的时间间隔内挂起,释放CPU资源供其他任务运行,从而提高系统响应性和资源利用率。RT-Thread提供了四种主要的延时函数:
绝对延时(精准延时)
1rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
相对延时(基于当前时间)
1rt_err_t rt_thread_delay(rt_tick_t tick)
毫秒级延时
1rt_err_t rt_thread_mdelay(rt_int32_t ms)
微秒级硬件延时(可基于基于DWT或定时器)
1RT_WEAK void rt_hw_us_delay(rt_uint32_t us)
注意:前三个函数受系统tick影响,tick =...
概述
附录-使用STM32H750驱动程序
1、外设初始化文件
2、驱动文件
概述STT-MRAM PM004MNIA 是一种具有 随机存取(Random Access) 特性的非易失性存储器,无需擦除操作,可进行 任意地址的读写操作。它的核心基于 自旋转移扭矩(Spin Transfer Torque, STT) 技术,通过控制电流方向来改变磁性存储单元的状态,从而实现数据的存储与读取。支持写无延迟(Write No Delay) 的特性,显著提高了存储效率。 广泛应用于需要 高速读写、低功耗和长期数据保存 的场景,例如 IoT 设备、工业控制模块、可穿戴设备、传感器系统 等。
特性
描述
存储容量
4Mbit
存储技术
自旋转移扭矩磁随机存取存储器(STT-MRAM)
随机存取能力
支持任意地址的读写操作,无需擦除,写入延迟低
接口支持
SPI 和 QPI(四线并行)
最大 SPI 频率
50MHz
低功耗
Sleep 模式下仅需 2μA
数据保留时间
可达 20 年(在 85°C 环境下)
写入耐久性
支持高达 10⁸...
一、静态线程创建
1、thread_task.c文件
2、thread_task.h文件
二、静态创建线程(自定义实现调度)
1、thread_task.c文件
2、thread_task.h文件
2、修改board.c中的SysTick_Handler()函数
三、动态创建线程
1、thread_task.c文件
2、thread_task.h文件
一、静态线程创建1、thread_task.c文件123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293#include "thread_task.h"#include "main.h"#include <stdio.h> #include "...
WT 是一个调试外设,它的核心功能之一是 CYCCNT(Cycle Count),这是一个32位递增计数器,用于记录 CPU 执行的时钟周期数量。我们可以通过对这个计数器的变化来实现高精度延时。
在使用 DWT 延时之前,需要完成以下操作:
使能 DWT
使能 CYCCNT
清零 CYCCNT
基于 CYCCNT 实现延时逻辑
源码如下:
dwt.delay.h文件
12345678910111213141516171819#ifndef __DWT_DELAY_H#define __DWT_DELAY_H#include "stm32g4xx.h"/* 获取内核时钟频率 */#define GET_CPU_ClkFreq() HAL_RCC_GetSysClockFreq()uint32_t CPU_TS_TmrRd(void);HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);//最大延时值为8秒void dwt_delay_us(uint32_t us);#define HAL_...
一、效果展示
1、在文本中的效果:
2、上位机界面效果:
二、操作
1、直接使用exe文件
2、使用源码编译方法(源码见附录)
三、附录:
1、源码
在写代码时有时要在代码中插入表格,手写太麻烦,所以使用 Python 的 Tkinter 开发了一个功能齐全、可自定义的 ASCII 表格生成器上位机工具。
一、效果展示1、在文本中的效果:12345678┌────────────────────────────────────────────┐│ DW3000 寄存器映射表 │├────────────────────────────────────────────┤│ addr │ name │ width │├──────────┼─────────────────┼───────────────┤│ 0x00 │ DEV_ID │ 32-bit ││ 0x12 │ RX_BUFFER_0 │ 10...
一、了解源码
1、bsp文件夹
2、components文件夹
3、docs文件夹
4、include文件夹
5、libcpu文件夹
6、src文件夹
二、官方移植
1、修改board.c文件
2、修改rtconfig.h文件
一、了解源码从官方下载到RT-Thread Nano源码目录如下图所示

1、bsp文件夹bsp文件夹里面存放的是板级支持包(board support package),用于存放RT-Thread为各种半导体厂商的评估板写好的驱动程序,其中重要的主要是两个文件
board.c:RT-Thread用来初始化开发板硬件的相关函数;
rtconfig.h:RT-Thread功能的配置头文件,可以裁剪RT-Thread的功能;
2、components文件夹其它第三方加进来的组件,比如gui、fatfs、lwip和finsh等。nano版本只放了finsh,是RT- Thread组件里面最具特色的,它通过串口打印的方式来输出各种信...
一、示例代码
二、GPIO_InitStruct参数配置
1、GPIO_InitStruct.Pin
2、 GPIO_InitStruct.Mode
3、GPIO_InitStruct.Pull
4、GPIO_InitStruct.Speed
在 STM32 的开发中,GPIO(通用输入/输出)是一种极其重要且常用的外设资源。无论是用于控制 LED、按键、电机驱动,还是与其他外设之间通信,GPIO 都是实现这些功能的核心接口。
一、示例代码这是一个在 STM32 HAL 库中非常常见的初始化函数,用于配置 GPIO 引脚为输出模式,并设置相应的参数。
12345678910111213141516171819202122232425/** * @brief 初始化GPIO引脚(用于LED控制) * @param 无 * @retval 无 */void GPIO_Init(void){ /* 初始化GPIO结构体,所有成员默认为0 */ GPIO_InitTypeDef GPIO_InitStruct = &...