STM32H743ZIT6+LWIP+MPU+CUBEMX,通过stm32cubemx完成初始化,ping包亲测没问题,带解释!!

文章耗时两个月,原来写了一半,后来遇到其他项目,中间自己重新画了一块电路板。终于把初始化功能实现了,网上的教程能用的确实凤毛麟角!

一、MPU配置详解

个人对stm32H7的MPU属于新接触,为了弄懂,自己也查阅了资料,看视频讲解。结合这次配置LWIP,分享下个人的学习心得。

MPU(Memory Project uint)内部保护单元。简单理解,就是一个内存管理员。对内存添加访问权限和设置内存单元(region)访问属性。

1、访问权限包括:

MPU REGION NO ACCESS          无访问(特权级&用户级都不可访问)
MPU REGION PRIV RW                 仅支持特权级读写访问
MIPU REGION PRIV RW URO        禁止用户写访问(特权可读写访问)
MPU REGION FULL ACCESS          全访问(特权级&用户级都可访问)
MPU REGION PRIV RO               仅支持特权读访问
MPU REGION PRIV RO URO     只读(特权&用户都不可以写

我们一般会选择 MPU REGION FULL ACCESS          全访问(特权级&用户级都可访问)

2、内存单元(region)访问属性

(1)Normal memory   性能最强
CPU以最高效的方式加载和存储字节、半字和字,CPU对于这种内存区的加载或存储不一定要按照程序代码的顺序执行
(2)Device memory
加载和存储要严格按照次序进行,确保寄存器按照正确顺序设置
(3)strongly ordered
程序完全按照代码顺序执行,CPU会等待当前加载存储执行完毕后才执行下一条指令,导致性能下降。

3、访问属性组成:

MPU TEX field level                         内存类型

MPU Shareability Permission        是否共享

MPU Cacheable Permission           是否缓存

MPU Bufferable Permission           是否缓冲

可缓存作用是开启Cache,加速CPU访问SRAM。

可缓冲的作用是开启Buffer,把CPU和Cache从较低的SRAM操作摆脱出来。

可共享的作用是解决master的数据同步。不要开启。

我们一般选择是CPU+Cache+Buffer+SRAM模式。此时充分利用cortex—M7的性能。

如何实现。这里涉及到内核的架构。

下面是STM32H743ZIT6地址映射图!

我们查看上面的图和内存映射地址表。

挨个讲!

(1)cortex-m7的cpu内核集成了L1-cache,包含I-Cache和D-Cache,分别是指令缓存和数据缓存。大小都是16KB。

(2)TCM RAM分为ITCM RAM(64KB)和DTCM RAM(128KB)的速率能到480MHz,无需配置MPU。

(3)AXI SRAM(512KB)AXI SRAM( D1 域) :

– 映射基地址 0x2400 0000 的 AXI SRAM,速率是240MHz,若提升速率要配置MPU

(4)AHB SRAM( D2 域):一共288KB,速率是240MHz,若提升速率要配置MPU

分为三个区域:

– 映射基地址 0x3000 0000 到 0x3001 FFFF(128KB)的 AHB SRAM1,

– 映射基地址 0x3002 0000 到 0x3003 FFFF(128KB)的 AHB SRAM2.

– 映射基地址 0x3004 0000 到 0x3004 FFFF(64KB) AHB SRAM3。

(5)AHB SRAM( D3 域):

– 映射到地址 0x3800 0000 的 AHB SRAM4,速率是240MHz,若提升速率要配置MPU

我们一般会选择Normal memory 

stm32H7支持管理最多16个单元region。随着序号(region number)的增加,优先级随着增加。

二、cubemx配置

看到教程常见用AHB D2的SRAM3,这次我们先跟着使用.

1、打开stm32cubemx,点击cortex-M7

(1)默认模式使能

CPU ICache 使能

CPU DCache  使能

MPU Control Mode 选择  Background Region Privileged accesses only + MPU Disabled during hard fault, NMl and FAULTMASK handlers

(2)下面是Region 0设置

MPU Region        Enabled
MPU Region Base Address   0x30040000
MPU Region Size  256B
MPU SubRegion Disable  0x0
MPU TEX feld level  level 1
MPU Access Permission    ALL ACCESS PERMITTED
MPU Instruction Access   ENABLE
MPU Shareability Permission   DISABLE
MPU Cacheable Permission      DISABLE
MPU Bufferable Permission       ENABLE

0x30040000是 AHB SRAM3的基地址。

MPU Region Size  256B

这是用于eth的收发buffer256B

MPU SubRegion Disable  0x0 不配置Region 子单元

MPU TEX feld level 配置策略为level1,此时性能最强,配置为0也可以。

MPU Access Permission    ALL ACCESS PERMITTED  所有权限打开
MPU Instruction Access   ENABLE    指令访问权限打开
MPU Shareability Permission   DISABLE   不可分享
MPU Cacheable Permission       ENABLE  开启缓存
MPU Bufferable Permission       ENABLE  开启缓冲

(3)下面是Region 1设置

MPU Region        Enabled
MPU Region Base Address   0x3004 4000
MPU Region Size 16KB
MPU SubRegion Disable  0x0
MPU TEX feld level  level 0
MPU Access Permission    ALL ACCESS PERMITTED
MPU Instruction Access   ENABLE
MPU Shareability Permission   DISABLE
MPU Cacheable Permission       ENABLE
MPU Bufferable Permission       ENABLE

0x3004 4000落在映射基地址 0x3004 0000 到 0x3004 7FFF(32KB)的 AHB SRAM3中.(正好中间位置)

MPU Region Size  16KB ?

这是用于存放lwip协议栈开的内存.

MPU SubRegion Disable  0x0 不配置Region 子单元

MPU TEX feld level 配置策略为level1,此时性能最强,配置为0也可以。

MPU Access Permission    ALL ACCESS PERMITTED  所有权限打开
MPU Instruction Access   ENABLE    指令访问权限打开
MPU Shareability Permission   DISABLE   不可分享
MPU Cacheable Permission       ENABLE  开启缓存
MPU Bufferable Permission       ENABLE  开启缓冲

2、时钟配置

3、ETH配置

(1)MODE :RMII

(2)设置TX/RX 描述符地址

(3)使能中断

(4)设置GPIO

除了标配的RMII有关的管脚,速度设置为Very High外。

再添加一个RESET_PHY 管脚。

控制PHY芯片复位。

4、LWIP配置

(1)选择PHY芯片

使能LWIP后,配置PHY 芯片,默认就是LAN8742,选择即可。

(2)、配置IP,

LWIP-DHCP不使能。

IP地址,掩码,网关自己设置。

(3)堆栈设置

堆栈大小设置大一些。

基地址还是0x3004 4000,落在AHB SRAM3内。

(4)、网卡设置

网卡状态回调函数,使能!

网卡连接回调函数,使能!

5、配置DEBUG

然后生成初始化代码!

三、代码

(1)main.c中添加PHY芯片硬件复位

  MX_GPIO_Init();
	HAL_Delay(20);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);
	HAL_Delay(20);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);
	HAL_Delay(20);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);
	HAL_Delay(20);

(2)使能D2SRAM3时钟

   __HAL_RCC_D2SRAM3_CLK_ENABLE();

(3)ethernetif_inpu函数

为网卡数据接收任务。LwIP中是通过一个task(ethernetif_input)轮询检查DMA控制器的状态以判断是否有数据接收到。

ethernetif_input程序写到eth中断里是因为使用终端的方式接收网络通信数据,而原先的HAL_ETH_IRQHandler这里边在这个程序里边没有进行实际的应用。

这里的目的,触发ETH中断,直接调用ethernetif_input函数。

(4)添加MX_LWIP_Process();

该函数的作用是从以太网缓冲区读取接收到的数据包, 将其发送到 lwIP 堆栈进行处理

四、测试

烧录.

1 、Ping 包

2、用ATKKPing

测试一分钟。无丢失!

下一篇分享stm32H723+LWIP+cubemx完成以太网初始化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915551.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python制作一个简单的端口扫描器,用于检测目标主机上指定端口的开放状态

import argparse # 用于解析命令行参数 from socket import * # 导入 socket 库的所有内容,用于网络通信 from threading import * # 导入 threading 库的所有内容,用于多线程操作 # 创建一个信号量,初始值为 1,用于线程同步&…

网络基础Linux(整理)

计算机网络背景 网络发展 独立模式: 计算机之间相互独立; 网络互联: 多台计算机连接在一起, 完成数据共享; 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起; 广域网WAN: 将远隔千里的计算机都连在一起; 所谓 "局域网" 和 "广域网" 只是一个…

我的第一个PyQt5程序

PyQt5的开发环境配置完成之后,开始编写第一个PyQt5的程序。 方法一:使用将.ui转换成.py文件的方法 import sys from FirstPyQt import Ui_MainWindow from PyQt5.QtWidgets import *#QtCore,QtGui,QtWidgets # from QtTest import Ui_MainWindow#导入Q…

面试:TCP、UDP如何解决丢包问题

文章目录 一、TCP丢包原因、解决办法1.1 TCP为什么会丢包1.2 TCP传输协议如何解决丢包问题1.3 其他丢包情况(拓展)1.4 补充1.4.1 TCP端口号1.4.2 多个TCP请求的逻辑1.4.3 处理大量TCP连接请求的方法1.4.4 总结 二、UDP丢包2.1 UDP协议2.1.1 UDP简介2.1.2…

Vue全栈开发旅游网项目(11)-用户管理前端接口联调

联调基本步骤 1.阅读接口文档 2.配置接口地址 3.使用axios获取数据 4.将数据设置到模型层 1.发送验证码联调 1.1 配置接口地址 文件地址:src\utils\apis.js //系统相关的接口 const SystemApis {sliderListUrl:apiHost"/system/slider/list/",//发送…

【相关分析方法】MATLAB计算滑动时滞相关系数

【相关分析方法】MATLAB计算滑动时滞相关系数 1 滑动时滞相关系数2 MATLAB代码2.1 函数代码2.2 案例参考滑动时滞相关系数(Moving Time-Lagged Cross-Correlation, TLCC) 是一种常用于分析两个时间序列之间的滞后关系的工具。它可以帮助我们确定一个时间序列相对于另一个时间…

llama-cpp模型轻量化部署与量化

一、定义 定义配置环境遇到的问题,交互模式下模型一直输出,不会停止模型量化Qwen1.5-7B 案例demo 二、实现 定义 主要应用与cpu 上的部署框架。由c完成。配置环境 https://github.com/ggerganov/llama.cpp https://github.com/echonoshy/cgft-llm/blo…

MySQl基础----Linux下数据库的密码和数据库的存储引擎(内附 实操图和手绘图 简单易懂)

绪论​ 涓滴之水可磨损大石,不是由于他力量强大,而是由于昼夜不舍地滴坠。 只有勤奋不懈地努力,才能够获得那些技巧。 ——贝多芬。新开MySQL篇章,本章非常基础,但同时需要一定的Linux基础,所以假若你没学习…

Qwen2-VL:发票数据提取、视频聊天和使用 PDF 的多模态 RAG 的实践指南

概述 随着人工智能技术的迅猛发展,多模态模型在各类应用场景中展现出强大的潜力和广泛的适用性。Qwen2-VL 作为最新一代的多模态大模型,融合了视觉与语言处理能力,旨在提升复杂任务的执行效率和准确性。本指南聚焦于 Qwen2-VL 在三个关键领域…

科技资讯|Matter 1.4 标准正式发布,低功耗蓝牙助力其发展

连接标准联盟(CSA)宣布推出最新的 Matter 1.4 版本,引入了一系列新的设备类型和功能增强,有望提高包括 HomeKit 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

群控系统服务端开发模式-应用开发-前端登录页面开发

一、清理不必要的文件 1、删除auth-redirect.vue a、在根目录src文件夹下views文件夹下找到登录文件夹login,在login文件夹中删除auth-redirect.vue文件。 b、在根目录mock文件夹下role文件夹中的routes.js文件中,删除下面的代码 {path: /auth-redirect…

深入理解接口测试:实用指南与最佳实践5.0(三)

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

mongoDB的安装及使用

mongodb的安装参考: Centos系统中mongodb的安装详解_centos安装mongodb-CSDN博客 不要下载最新的版本,新的版本中mongo命令无法使用,也就是安装后不能通过mongo命令登录,我这里使用5.0.30版本; mongodb客户端demo: …

vue3面试题1|[2024-11-12]

问题1:vue2与vue3的区别 1.vue2 和 vue3 双向绑定 方法不同 vue2:Object.defineProperty() ***使用这种方法,对于后添加的属性是劫持不到的,所以就会出现数据更新了, 但是视图没有更新,所以vue2就需要使用$…

python-24-一篇文章彻底掌握Python HTTP库Requests

python-24-一篇文章彻底掌握Python HTTP库Requests 一.简介 在 Python 中,Requests 是一个非常流行且易于使用的 Python HTTP 库,专门用于发送 HTTP/HTTPS 请求,获取请求响应; 可能觉得HTTP请求不是应该前端去做么?…

打造移动友好网站:UI设计的自适应技巧

随着移动互联网的快速发展,手机已成为人们获取信息的主要渠道之一。对于UI设计师而言,打造一个能够自适应手机屏幕的网站变得尤为重要。这不仅能够提升用户体验,还能在搜索引擎优化(SEO)中占据优势。以下是实现UI设计网…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

STM32问题集

这里写目录标题 一、烧录1、 Can not connect to target!【ST-LINK烧录】 一、烧录 1、 Can not connect to target!【ST-LINK烧录】 烧录突然 If the target is in low power mode, please enable “Debug in Low Power mode” option from Target->settings menu 然后就&…

正点原子IMX6ULL--嵌入式Linux开发板学习中常用命令和笔记记录

学习路线图 传驱动文件 sudo cp chrdevbase.ko chrdevbaseApp /home/txj/linux/nfs/rootfs/lib/modules/4.1.15/ -f bootcmd setenv bootcmd tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000 setenv bootcmd tftp 80800000 zImag…

29.电影院售票系统(基于springboot和vue的Java项目)

目录 1.系统的受众说明 2 论文背景 2.1 国内研究现状&#xff1a; 2.2 国外研究现状&#xff1a; ​​​​​​​2.3 所用技术 3 系统需求分析 ​​​​​​​3.1 需求分析 ​​​​​​​3.2 可行性分析 3.2.1技术可行性分析 3.2.2市场可行性分析 3.2.3经济可…