当前位置: 首页 > news >正文

8,STM32CubeMX配置SPI工程(读取norflash的ID)

1,前言

        单片机型号:STM32F407

        编程环境    :STM32CubeMX + Keil v5

        硬件连接    :SPI1,CS/SS--->PB14

注:本工程在1,STM32CubeMX工程基础(配置Debug、时钟树)基础上完成。

        本工程在4,STM32CubeMX配置UART串口工程基础上完成。

2,STM32CubeMX配置SPI工程

        首先开启STM32的SPI接口,STM32F407一共有三个SPI接口,本文使用接口SPI1。

在Connectivity(1)下方点击SPI1(2)启用SPI接口1。点击设置部分Mode(3)将SPI模式设置为Full-Duplex Master全双工主机模式,可以在Paramater Setting(4)设置分频系数64,让SPI的速度低一些。设置完成后可以看到Pinout view(5)以及显示出信息。这里本文用的是复用功能的SPI1和原SPI1效果相同。

        其次,配置SPI1的CS/SS片选引脚,可以在cubeMX上使用硬件CS/SS片选功能,本文使用软件的方式实现。配置方式如下,首先在PB14(1)引脚处左击选择模式未GPIO_Output,在System Core(2)下选择GPIO(3)进行设置。在PB14 Configuration(4)配置界面,将输出默认电平改为High、上拉输出、输出速度为高(由于SPI传输速度较高)。

3,STM32HAL库常用SPI函数

1,SPI发送函数HAL_SPI_Transmit。输入量hspi为句柄, 输入量pData为传输的数据, 输入量 Timeout为超时时间。

/*** @brief 在阻塞模式下传输一定数量的数据。* SPI_HandleTypeDef@param指向包含* SPI 模块的配置信息。* @param指向数据缓冲区的 pData 指针* @param 大小 要发送的数据量* @param 超时超时持续时间* @retval HAL 状态*/
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

2.SPI接收函数HAL_SPI_Receive。输入量hspi为句柄, 输入量pData为接收的数据, 输入量Size为要接收的数据大小(多少字节),输入量 Timeout为超时时间。

/*** @brief 在阻塞模式下接收一定数量的数据。* SPI_HandleTypeDef@param指向包含* SPI 模块的配置信息。* @param指向数据缓冲区的 pData 指针* @param 要接收的数据量大小* @param 超时超时持续时间* @retval HAL 状态*/
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

2.SPI发送接收函数HAL_SPI_TransmitReceive。输入量hspi为句柄,输入量pTxData为发送的数据, 输入量pRxData为接收的数据, 输入量Size为要接收的数据大小(多少字节),输入量 Timeout为超时时间。(注:为什么会有发送接收函数,SPI通信作为单主多从模式,其协议必须有发送才会有接收。如果只想接收数据,则需要发送一个空数据来实现。)

/*** @brief 在阻塞模式下发送和接收一定量的数据。* SPI_HandleTypeDef@param指向包含* SPI 模块的配置信息。* @param pTxData 指针指向传输数据缓冲区* @param pRxData 指针指向接收数据缓冲区* @param 大小 要发送和接收的数据量* @param 超时超时持续时间* @retval HAL 状态*/
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size,uint32_t Timeout)

4,编程实战(SPI读取norflash的ID)

       首先添加两个.c/.h文件。然后设置norflash的spi的发送接收函数。

uint8_t spi1_read_write_byte(uint8_t Txdata)
{uint8_t Rxdata;HAL_SPI_TransmitReceive(&hspi1 ,&Txdata, &Rxdata, 1, 1000);return Rxdata;
}

        下面是读取norflash的ID时序函数。

/*** @brief       读取芯片ID* @param       无* @retval      FLASH芯片ID*   @note      芯片ID列表见: norflash.h, 芯片列表部分*/
uint16_t norflash_read_id(void)
{uint16_t deviceid;NORFLASH_CS(0);spi1_read_write_byte(FLASH_ManufactDeviceID);   /* 发送读 ID 命令 */spi1_read_write_byte(0);                        /* 写入一个字节 */spi1_read_write_byte(0);spi1_read_write_byte(0);deviceid = spi1_read_write_byte(0xFF) << 8;     /* 读取高8位字节 */deviceid |= spi1_read_write_byte(0xFF);         /* 读取低8位字节 */NORFLASH_CS(1);return deviceid;
}

        编译成功,烧录后打开串口调试助手,实验完成。

相关文章:

8,STM32CubeMX配置SPI工程(读取norflash的ID)

1&#xff0c;前言 单片机型号&#xff1a;STM32F407 编程环境 &#xff1a;STM32CubeMX Keil v5 硬件连接 &#xff1a;SPI1&#xff0c;CS/SS--->PB14 注&#xff1a;本工程在1&#xff0c;STM32CubeMX工程基础&#xff08;配置Debug、时钟树&#xff09;基础上完…...

【MATLAB源码-第178期】基于matlab的8PSK调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在通信系统中&#xff0c;频率偏移是一种常见的问题&#xff0c;它会导致接收到的信号频率与发送信号的频率不完全匹配&#xff0c;进而影响通信质量。在调制技术中&#xff0c;QPSK&#xff08;Quadrature Phase Shift Keyi…...

AIGC学习笔记—minimind详解+训练+推理

前言 这个开源项目是带我的一个导师&#xff0c;推荐我看的&#xff0c;记录一下整个过程&#xff0c;总结一下收获。这个项目的slogan是“大道至简”&#xff0c;确实很简。作者说是这个项目为了帮助初学者快速入门大语言模型&#xff08;LLM&#xff09;&#xff0c;通过从零…...

计算机毕业设计 在线项目管理与任务分配系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

小程序用户截屏事件

原生小程序&#xff1a; wx.setScreenBrightness({value: 0.5 }); 参数值&#xff1a; value屏幕亮度值&#xff0c;范围 0~1&#xff0c;0 最暗&#xff0c;1 最亮 uniapp&#xff1a; uni.setScreenBrightness({value: 0.5 }); 参数值&#xff1a; value屏幕亮度值&a…...

HashMap为什么线程不安全?如何实现线程安全

HashMap线程不安全的原因主要可以从以下几个方面解释&#xff1a; 1. 数据覆盖 假设两个线程同时执行put操作&#xff0c;并且它们操作的键产生相同的哈希码&#xff0c;导致它们应该被插入到同一个桶中。以下是可能发生的情况&#xff1a; 线程A读取桶位置为空&#xff0c;准…...

Python爬虫之requests模块(一)

Python爬虫之requests模块&#xff08;一&#xff09; 学完urllib之后对爬虫应该有一定的了解了&#xff0c;随后就来学习鼎鼎有名的requests模块吧。 一、requests简介。 1、什么是request模块&#xff1f; requests其实就是py原生的一个基于网络请求的模块&#xff0c;模拟…...

当微服务中调度返回大数据量时如何处理

FeignClient 和 Dubbo 可能不是最佳选择。以下是一些适合处理大数据量的技术和方法&#xff1a; 消息队列 简介&#xff1a;消息队列是一种异步通信方式&#xff0c;用于在不同系统之间传递消息。常见的消息队列包括 RabbitMQ、Kafka、ActiveMQ 等。 优点&#xff1a;消息队列…...

【项目经验分享】深度学习点云算法毕业设计项目案例定制

以下是深度学习与点云算法相关的毕业设计项目案例&#xff0c;涵盖了点云数据的分类、分割、重建、配准、目标检测等多个领域&#xff0c;适用于智能驾驶、机器人导航、3D建模等多个应用场景&#xff1a; 案例截图&#xff1a; 基于PointNet的3D点云分类与分割PointNet在大规…...

【Redis 源码】2项目结构说明

1 文件目录结构 deps 这个目录主要包含 Redis 所依赖的第三方代码库。 Jemalloc&#xff0c;内存分配器&#xff0c;默认情况下选择该内存分配器来代替 Linux 系统的 libc-malloc&#xff0c;libc-malloc 性能不高&#xff0c;且碎片化严重。hiredis&#xff0c;这是官方 C 语…...

RP2040 C SDK GPIO和IRQ 唤醒功能使用

RP2040 C SDK GPIO和中断功能使用 SIO介绍 手册27页&#xff1a; The Single-cycle IO block (SIO) contains several peripherals that require low-latency, deterministic access from the processors. It is accessed via each processor’s IOPORT: this is an auxiliary…...

@Transactional导致数据库连接数不够

在Spring中进行事务管理非常简单&#xff0c;只需要在方法上加上注解Transactional&#xff0c;Spring就可以自动帮我们进行事务的开启、提交、回滚操作。甚至很多人心里已经将Spring事务Transactional划上了等号&#xff0c;只要有数据库相关操作就直接给方法加上Transactiona…...

python3中的string 和bytes有什么区别

在Python中,string(字符串)和bytes(字节序列)是两种不同的数据类型,分别用于表示文本和二进制数据。它们的主要区别在于存储的数据类型、编码方式以及使用场景。 1. 存储数据类型 string (字符串,str):用来表示文本数据。string是一个Unicode字符串,其中的每个字符是…...

C~排序算法

在C/C中&#xff0c;有多种排序算法可供选择&#xff0c;每种算法都有其特定的应用场景和特点。下面介绍几种常用的排序算法&#xff0c;包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序&#xff0c;并给出相应的示例代码和解释。 冒泡排序&#xff08;Bubble …...

基于github创建个人主页

基于github创建个人主页 站在巨人的肩膀上&#xff0c;首先选一个创建主页的仓库进行fork&#xff0c;具体可以参照这篇文章https://blog.csdn.net/qd1813100174/article/details/128604858主要总结下需要修改的地方&#xff1a; 1&#xff09;仓库名字要和github的名字一致&a…...

apt update时出现证书相关问题,可以关闭apt验证

vi /etc/apt/apt.conf.d/99disable-signature-verification 添加以下内容&#xff1a; Acquire::AllowInsecureRepositories "true"; Acquire::AllowDowngradeToInsecureRepositories "true"; Acquire::AllowUnauthenticated "true"; 参考链…...

进阶数据库系列(十三):PostgreSQL 分区分表

概述 在组件开发迭代的过程中&#xff0c;随着使用时间的增加&#xff0c;数据库中的数据量也不断增加&#xff0c;因此数据库查询越来越慢。 通常加速数据库的方法很多&#xff0c;如添加特定的索引&#xff0c;将日志目录换到单独的磁盘分区&#xff0c;调整数据库引擎的参…...

翻译:Recent Event Camera Innovations: A Survey

摘要 基于事件的视觉受到人类视觉系统的启发&#xff0c;提供了变革性的功能&#xff0c;例如低延迟、高动态范围和降低功耗。本文对事件相机进行了全面的调查&#xff0c;并追溯了事件相机的发展历程。它介绍了事件相机的基本原理&#xff0c;将其与传统的帧相机进行了比较&am…...

车载诊断技术:汽车健康的守护者

一、车载诊断技术的发展历程 从最初简单的硬件设备到如今智能化、网络化的系统,车载诊断技术不断演进,为汽车安全和性能提供保障。 早期的汽车诊断检测技术处于比较原始的状态,主要依靠操作经验和主观评价。随着汽车工业的发展,车载诊断技术也经历了不同的阶段。20 世纪初…...

“天翼云息壤杯”高校AI大赛开启:国云的一场“造林”计划

文 | 智能相对论 作者 | 叶远风 2024年年初《政府工作报告》中明确提到了“人工智能”行动&#xff0c;人工智能的发展被提到前所未有的高度。 如何落实AI在数字经济发展中引擎作用&#xff0c;是业界当下面临的课题。 9月25日&#xff0c;“2024年中国国际信息通信展览会”…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...