RT-Thread Studio与CubeMX联合编程之rtthread stm32h743的使用(十一)spi设备SFUD驱动的使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图:
在这里插入图片描述
在这里插入图片描述
1.建立新工程,选择相应的芯片型号及debug引脚及调试器
在这里插入图片描述
2.编译下载,可以看到串口打印正常
在这里插入图片描述
3.在工程中打开cubemx,设置串口及时钟,设置内容如上一章节,spi的管脚设置需要参考原理图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.打开drv_clk.c更改调试级别后编译下载可以看到打印时钟信息。
在这里插入图片描述
在这里插入图片描述
5.打开软件包中心,打开spi和sfud框架,如图:
在这里插入图片描述
6.保存后,在board.h中打开spi注册,如图:
在这里插入图片描述
7.编译下载,发送list device指令查询下设备,如图可以看到有spi设备了
在这里插入图片描述
8.在applications文件夹下添加程序,注意,flash片选脚为G10.
在这里插入图片描述
在这里插入图片描述
这里需要修改为片选引脚
在这里插入图片描述
代码如下:

#define SPI_BUS_NAME                        "spi1"
#define W25Q_SPI_DEVICE_NAME                "spi10"
#define W25Q_FLASH_NAME                     "W25Q512"
//FAL_USING_NOR_FLASH_DEV_NAMErt_uint8_t wData[4096] = {"SPI bus write data to W25Q512 flash."};
rt_uint8_t rData[4096];static int rt_hw_spi_flash_init()
{rt_err_t ree = RT_EOK;ree = rt_hw_spi_device_attach(SPI_BUS_NAME, W25Q_SPI_DEVICE_NAME, GPIOA, GPIO_PIN_15);/* 使用 SFUD 探测 spi10 从设备,并将 spi10 连接的 flash 初始化为块设备,名称 W25Q128 */if (RT_NULL == rt_sfud_flash_probe(FAL_USING_NOR_FLASH_DEV_NAME, W25Q_SPI_DEVICE_NAME)){return -RT_ERROR;}return ree;
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
static void sfud_w25q_sample(void)
{rt_spi_flash_device_t flash_dev;sfud_flash_t sfud_dev;struct rt_device_blk_geometry geometry;// 1- use sfud apirt_kprintf("\n 1 - Use SFUD API \n");sfud_dev = rt_sfud_flash_find_by_dev_name(W25Q_FLASH_NAME);if(sfud_dev == RT_NULL){rt_kprintf("sfud can't find %s device.\n", W25Q_FLASH_NAME);}else{rt_kprintf("sfud device name: %s, sector_count: %d, bytes_per_sector: %d, block_size: %d.\n",sfud_dev->name, sfud_dev->chip.capacity / sfud_dev->chip.erase_gran,sfud_dev->chip.erase_gran, sfud_dev->chip.erase_gran);if(sfud_erase_write(sfud_dev, 0x002000, sizeof(wData), wData) == SFUD_SUCCESS)rt_kprintf("sfud api write data to w25q128(address:0x2000) success.\n");if(sfud_read(sfud_dev, 0x002000, sizeof(rData), rData) == SFUD_SUCCESS)rt_kprintf("sfud api read data from w25q128(address:0x2000) is:%s\n", rData);}// 2- use rt_device apirt_kprintf("\n 2 - Use rt_device API \n");flash_dev = (rt_spi_flash_device_t)rt_device_find(W25Q_FLASH_NAME);if(flash_dev == RT_NULL){rt_kprintf("rt_device api can't find %s device.\n", W25Q_FLASH_NAME);}else{rt_device_open(&flash_dev->flash_device, RT_DEVICE_OFLAG_OPEN);if(rt_device_control(&flash_dev->flash_device, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry) == RT_EOK)rt_kprintf("spi flash device name: %s, sector_count: %d, bytes_per_sector: %d, block_size: %d.\n",flash_dev->flash_device.parent.name, geometry.sector_count, geometry.bytes_per_sector, geometry.block_size);if(rt_device_write(&flash_dev->flash_device, 0x03, wData, 1) > 0)rt_kprintf("rt_device api write data to w25q128(address:0x3000) success.\n");if(rt_device_read(&flash_dev->flash_device, 0x03, rData, 1) > 0)rt_kprintf("rt_device api read data from w25q128(address:0x3000) is:%s\n", rData);rt_device_close(&flash_dev->flash_device);}
}
MSH_CMD_EXPORT(sfud_w25q_sample, sfud w25q128 sample);

9.编译下载可以看到打印信息,flash已经被检测到
在这里插入图片描述
10.读取下flash数据,可以看到读取成功
在这里插入图片描述在这里插入图片描述
可以看到我们就可以通过sfud指令读写flash了。挂载的w25q64可以被正常操作,其余操作指令如下,可以尝试:

sf probe [spi_device]           - probe and init SPI flash by given 'spi_device'
sf read addr size               - read 'size' bytes starting at 'addr'
sf write addr data1 ... dataN   - write some bytes 'data' to flash starting at 'addr'
sf erase addr size              - erase 'size' bytes starting at 'addr'
sf status [<volatile> <status>] - read or write '1:volatile|0:non-volatile' 'status'
sf bench                        - full chip benchmark. DANGER: It will erase full chip!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hubstudio指纹浏览器:海外代理IP新选择,IPXProxy为何备受推崇?

许多人都会把Hubstudio指纹浏览器和代理IP进行搭配使用&#xff0c;为了保证网络操作的顺利进行&#xff0c;例如亚马逊的多账号管理。那有没有好用的海外代理IP呢&#xff0c;如何在Hubstudio指纹浏览器中使用代理IP呢&#xff1f; 下面就给大家推荐好用的一家海外IP代理&…

积鼎CFD:基于Virtualflow在溃坝洪水演进数值仿真分析

近期&#xff0c;多地遭受了前所未有的洪水侵袭&#xff0c;每一次灾害都如同警钟长鸣&#xff0c;提醒我们水库大坝安全的重要性&#xff0c;超标准暴雨的突袭让大坝的安全防线面临前所未有的考验。面对这一挑战&#xff0c;CFD技术可为溃坝洪水的预测与管理开辟新的路径。凭借…

vue根据文字长短展示跑马灯效果

介绍 为大家介绍一个我编写的vue组件 auto-marquee &#xff0c;他可以根据要展示文本是否超出展示区域&#xff0c;来判断是否使用跑马灯效果&#xff0c;效果图如下所示 假设要展示区域的宽度为500px&#xff0c;当要展示文本的长度小于500px时&#xff0c;只会展示文本&…

如何借助物联网实现农情监测与预警

如何借助物联网实现农情监测与预警&#xff1f; 物联网技术&#xff0c;作为信息技术与传统行业的深度融合产物&#xff0c;正逐步变革着农业生产的管理模式&#xff0c;特别是在农情监测与预警领域展现出巨大潜力。其核心在于通过感知层的各类传感器、通信层的数据传输技术以…

高编:线程

一、pthread 线程 优点&#xff1a; 比多进程节省资源&#xff0c;可以共享变量。 概念&#xff1a; 线程是轻量级进程&#xff0c;一般是一个进程中的多个任务。进程是系统中最小的资源分配单位.线程是系统中最小的执行单位 特征&#xff1a; 1、共享资源 2、效率高 …

qt可点击的QLabel

需求——问题与思路 使用wpf实现一个可点击的超链接label相当简单&#xff08;如下图&#xff09;&#xff0c;但是qt的QLabel不会响应点击事件&#xff0c;那就从QLabel继承一个类&#xff0c;然后在该类中重写mousePressEvent函数&#xff0c;并在该函数中对左键点击事件做响…

应对SQL注入攻击:保障网站安全的策略

在互联网的广阔天地中&#xff0c;网站安全始终是站长用户和企业开发者不可忽视的重要议题。其中&#xff0c;SQL注入攻击作为一种常见的网络攻击手段&#xff0c;严重威胁着网站的数据安全和业务稳定。什么是SQL注入攻击&#xff0c;我们该如何应对这种攻击呢&#xff1f;今天…

成都欣丰洪泰文化传媒有限公司电商服务的新星力量

在当今这个数字化飞速发展的时代&#xff0c;电商行业如日中天&#xff0c;成为拉动经济增长的新引擎。在这股浪潮中&#xff0c;一家名为成都欣丰洪泰文化传媒有限公司的企业&#xff0c;凭借其专业的电商服务能力和创新的营销策略&#xff0c;成为了众多品牌背后的强大推手。…

怎么保护CAD图纸丨CAD图纸防泄密方法推荐

怎么保护CAD图纸丨CAD图纸防泄密方法推荐 在现代工程设计和建筑行业中&#xff0c;CAD图纸承载着项目的核心信息&#xff0c;是极其重要的知识产权。一旦CAD图纸被盗或泄露&#xff0c;不仅可能导致商业机密的丧失&#xff0c;还可能给公司带来重大经济损失&#xff0c;甚至面…

AI新功能发布:AI生成数据库和AI规划任务,CoCodeAI再添新成员!

Hi&#xff0c;大家好&#xff0c;好久不见&#xff01; 我是CoCodeAI智能助手CoCo。 CoCodeAI智能助手CoCo 我无比荣幸地为大家揭晓 CoCode开发云的璀璨新星&#xff1a; AI生成数据库AI规划任务。 近日&#xff0c;CoCode开发云旗下Co-Project V3.8智能项目管理平台重磅发…

MySQL数据库中文乱码处理

出现中文乱码之后处理方式 1、执行下面语句查看一下关于编码方式 show variables like %char%结果展示&#xff1a;【你应该和我的不一样】 2、如果你的和我查询结果不一致请设置成一致语句&#xff0c;根据自己需要复制语句 如下&#xff1a;【除了最后一条记录哈】 SET G…

2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、实现代码及参考论文

2024 年江西省研究生数学建模竞赛题目交通信号灯管理 1 题目 交通信号灯是指挥车辆通行的重要标志&#xff0c;由红灯、绿灯、 黄灯组成。红灯停、绿灯行&#xff0c;而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一…

文件扫描件怎么弄?文件扫描就用这5个方法

在快节奏的现代生活中&#xff0c;我们经常需要处理大量纸质文件&#xff0c;因为它们不仅占用空间&#xff0c;还可能因时间的流逝而损坏或丢失。 幸运的是&#xff0c;有了文件扫描软件手机版&#xff0c;我们可以将这些文件轻松转换为PDF格式&#xff0c;既保留了原始布局&…

第五届计算机、大数据与人工智能国际会议(ICCBD+AI 2024)

随着科技的飞速发展&#xff0c;计算机、大数据和人工智能等前沿技术已成为推动社会进步的重要力量。为了加强这一领域的学术交流与合作&#xff0c;促进技术创新与发展&#xff0c;第五届计算机、大数据与人工智能国际会议&#xff08;ICCBDAI 2024&#xff09;将于2024年11月…

Unreal Engine@Jetson Orin Nano尚不支持

Unreal EngineJetson Orin Nano尚不支持 1. 源由2. Unreal Engine介绍3. 问题4. 编译方法5. 补充 1. 源由 最近在看SC-Explorer方面的内容&#xff0c;在模拟方面采用了Unreal Engine。 本打算跑下模拟&#xff0c;因此打算在JetsonOrin的板子上试试看。 2. Unreal Engine介绍…

5款简洁干净,功能强悍,专注实用的软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.音量控制利器——EarTrumpet ​ EarTrumpet是一款专为Windows用户设计的音量控制软件。它允许用户轻松…

`THREE.LineBasicMaterial` 是 three.js 中用来创建用于绘制线条的基本材质。

demo案例 THREE.LineBasicMaterial 是 three.js 中用来创建用于绘制线条的基本材质。以下是它的入参、出参、方法和属性的详细说明。 入参 (Constructor Parameters) THREE.LineBasicMaterial 构造函数可以接收一个包含多个属性的对象。常用属性如下&#xff1a; const ma…

第一后裔快速领取掉宝奖励礼包教程

7月2日第一后裔在steam正式上线&#xff0c;全新刷宝射击mmo玩法&#xff0c;角色的招式非常新颖 &#xff0c;画面冲击感十足&#xff0c;而且游戏人物的自定义功能非常丰富&#xff0c;超级细节真实的人物建模&#xff0c;加上超带感的服装自定义系统&#xff0c;让你能玩一整…

在CentOS7云服务器下搭建MySQL网络服务详细教程

目录 0.说明 1.卸载不要的环境 1.1查看当前环境存在的服务mysql或者mariadb 1.2卸载不要的环境 1.2.1先关闭相关的服务 1.2.2查询曾经下载的安装包 1.2.3卸载安装包 1.2.4检查是否卸载干净 2.配置MySQLyum源 2.1获取mysql关外yum源 2.2 查看当前系统结合系统配置yum…

优思学院|今时今日还有谁想干供应商质量工程师(SQE)?

引言&#xff1a;SQE的迷思 供应商质量工程师&#xff08;SQE&#xff09;这个职位&#xff0c;听起来颇具技术性和专业性&#xff0c;但在职场中&#xff0c;却常常被视为一个既有挑战又不容易受到欢迎的岗位。SQE究竟是一个怎样的角色&#xff1f;谁愿意选择这个职业&#x…