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,前言 单片机型号:STM32F407 编程环境 :STM32CubeMX Keil v5 硬件连接 :SPI1,CS/SS--->PB14 注:本工程在1,STM32CubeMX工程基础(配置Debug、时钟树)基础上完…...
【MATLAB源码-第178期】基于matlab的8PSK调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。
操作环境: MATLAB 2022a 1、算法描述 在通信系统中,频率偏移是一种常见的问题,它会导致接收到的信号频率与发送信号的频率不完全匹配,进而影响通信质量。在调制技术中,QPSK(Quadrature Phase Shift Keyi…...
AIGC学习笔记—minimind详解+训练+推理
前言 这个开源项目是带我的一个导师,推荐我看的,记录一下整个过程,总结一下收获。这个项目的slogan是“大道至简”,确实很简。作者说是这个项目为了帮助初学者快速入门大语言模型(LLM),通过从零…...
计算机毕业设计 在线项目管理与任务分配系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
小程序用户截屏事件
原生小程序: wx.setScreenBrightness({value: 0.5 }); 参数值: value屏幕亮度值,范围 0~1,0 最暗,1 最亮 uniapp: uni.setScreenBrightness({value: 0.5 }); 参数值: value屏幕亮度值&a…...
HashMap为什么线程不安全?如何实现线程安全
HashMap线程不安全的原因主要可以从以下几个方面解释: 1. 数据覆盖 假设两个线程同时执行put操作,并且它们操作的键产生相同的哈希码,导致它们应该被插入到同一个桶中。以下是可能发生的情况: 线程A读取桶位置为空,准…...
Python爬虫之requests模块(一)
Python爬虫之requests模块(一) 学完urllib之后对爬虫应该有一定的了解了,随后就来学习鼎鼎有名的requests模块吧。 一、requests简介。 1、什么是request模块? requests其实就是py原生的一个基于网络请求的模块,模拟…...
当微服务中调度返回大数据量时如何处理
FeignClient 和 Dubbo 可能不是最佳选择。以下是一些适合处理大数据量的技术和方法: 消息队列 简介:消息队列是一种异步通信方式,用于在不同系统之间传递消息。常见的消息队列包括 RabbitMQ、Kafka、ActiveMQ 等。 优点:消息队列…...
【项目经验分享】深度学习点云算法毕业设计项目案例定制
以下是深度学习与点云算法相关的毕业设计项目案例,涵盖了点云数据的分类、分割、重建、配准、目标检测等多个领域,适用于智能驾驶、机器人导航、3D建模等多个应用场景: 案例截图: 基于PointNet的3D点云分类与分割PointNet在大规…...
【Redis 源码】2项目结构说明
1 文件目录结构 deps 这个目录主要包含 Redis 所依赖的第三方代码库。 Jemalloc,内存分配器,默认情况下选择该内存分配器来代替 Linux 系统的 libc-malloc,libc-malloc 性能不高,且碎片化严重。hiredis,这是官方 C 语…...
RP2040 C SDK GPIO和IRQ 唤醒功能使用
RP2040 C SDK GPIO和中断功能使用 SIO介绍 手册27页: 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中进行事务管理非常简单,只需要在方法上加上注解Transactional,Spring就可以自动帮我们进行事务的开启、提交、回滚操作。甚至很多人心里已经将Spring事务Transactional划上了等号,只要有数据库相关操作就直接给方法加上Transactiona…...
python3中的string 和bytes有什么区别
在Python中,string(字符串)和bytes(字节序列)是两种不同的数据类型,分别用于表示文本和二进制数据。它们的主要区别在于存储的数据类型、编码方式以及使用场景。 1. 存储数据类型 string (字符串,str):用来表示文本数据。string是一个Unicode字符串,其中的每个字符是…...
C~排序算法
在C/C中,有多种排序算法可供选择,每种算法都有其特定的应用场景和特点。下面介绍几种常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,并给出相应的示例代码和解释。 冒泡排序(Bubble …...
基于github创建个人主页
基于github创建个人主页 站在巨人的肩膀上,首先选一个创建主页的仓库进行fork,具体可以参照这篇文章https://blog.csdn.net/qd1813100174/article/details/128604858主要总结下需要修改的地方: 1)仓库名字要和github的名字一致&a…...
apt update时出现证书相关问题,可以关闭apt验证
vi /etc/apt/apt.conf.d/99disable-signature-verification 添加以下内容: Acquire::AllowInsecureRepositories "true"; Acquire::AllowDowngradeToInsecureRepositories "true"; Acquire::AllowUnauthenticated "true"; 参考链…...
进阶数据库系列(十三):PostgreSQL 分区分表
概述 在组件开发迭代的过程中,随着使用时间的增加,数据库中的数据量也不断增加,因此数据库查询越来越慢。 通常加速数据库的方法很多,如添加特定的索引,将日志目录换到单独的磁盘分区,调整数据库引擎的参…...
翻译:Recent Event Camera Innovations: A Survey
摘要 基于事件的视觉受到人类视觉系统的启发,提供了变革性的功能,例如低延迟、高动态范围和降低功耗。本文对事件相机进行了全面的调查,并追溯了事件相机的发展历程。它介绍了事件相机的基本原理,将其与传统的帧相机进行了比较&am…...
车载诊断技术:汽车健康的守护者
一、车载诊断技术的发展历程 从最初简单的硬件设备到如今智能化、网络化的系统,车载诊断技术不断演进,为汽车安全和性能提供保障。 早期的汽车诊断检测技术处于比较原始的状态,主要依靠操作经验和主观评价。随着汽车工业的发展,车载诊断技术也经历了不同的阶段。20 世纪初…...
“天翼云息壤杯”高校AI大赛开启:国云的一场“造林”计划
文 | 智能相对论 作者 | 叶远风 2024年年初《政府工作报告》中明确提到了“人工智能”行动,人工智能的发展被提到前所未有的高度。 如何落实AI在数字经济发展中引擎作用,是业界当下面临的课题。 9月25日,“2024年中国国际信息通信展览会”…...
C语言结构体、枚举、联合体:从内存布局看区别,新手避坑指南
C语言结构体、枚举、联合体:从内存布局看区别,新手避坑指南 在C语言开发中,结构体、枚举和联合体是构建复杂数据模型的三大基石。但很多开发者在实际项目中常遇到这样的困惑:为什么结构体占用的内存比预期大?枚举变量在…...
百度网盘直链解析工具:告别限速,实现高速下载的Python解决方案
百度网盘直链解析工具:告别限速,实现高速下载的Python解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在数字资源共享日益频繁的今天ÿ…...
STM8硬件IIC驱动BNO055传感器避坑指南(附完整代码)
STM8硬件IIC驱动BNO055传感器实战解析与优化 BNO055作为一款集成了9轴传感器融合算法的智能芯片,能够直接输出姿态角数据,极大简化了嵌入式系统中姿态解算的复杂度。然而在实际应用中,许多开发者发现使用STM32等常见MCU的模拟IIC接口难以稳定…...
告别标题栏!在RK3568 Buildroot固件上,让你的Qt应用开机全屏显示的保姆级教程
RK3568嵌入式全屏实战:从Weston配置到Qt应用独占显示的完整指南 在嵌入式Linux系统开发中,GUI应用的全屏显示往往成为工程师面临的第一个"拦路虎"。当你在RK3568平台上精心开发的Qt应用启动后,却发现屏幕顶部顽固地挂着Weston窗口管…...
Midjourney像素艺术提示词工程:98%新手忽略的4个隐藏权重指令,实测提升风格还原度320%
更多请点击: https://intelliparadigm.com 第一章:Midjourney像素艺术提示词工程的底层逻辑重构 像素艺术在 Midjourney 中并非天然适配的生成模态,其高精度、低分辨率、强风格约束的特性与扩散模型默认的连续性渲染范式存在根本张力。要实现…...
用Ruby实现RISC-V模拟器:从指令集架构到交互式教学工具
1. 项目概述:一个为Ruby语言量身打造的RISC-V模拟器如果你是一名Ruby开发者,或者对RISC-V这个新兴的指令集架构充满好奇,那么你很可能已经听说过RuriOSS/rurima这个名字。简单来说,这是一个用Ruby语言实现的RISC-V指令集模拟器。但…...
SoC片上系统:从架构原理到选型实战的深度解析
1. 项目概述:从“黑盒子”到“智慧核心”的认知跃迁在电子产品的世界里,我们常常惊叹于一部智能手机的纤薄与强大,它既能流畅播放高清视频,又能处理复杂的游戏画面,还能实时连接网络、定位导航。这一切的背后ÿ…...
在 1688、阿里国际站上,怎么分清哪些是真工厂、哪些是贸易商?一份采购辨别清单
跨境卖家和采购最常踩的坑,就是把贸易商当成了源头工厂。结果是:报价里多了一手差价、打样要等贸易商再转给后面的厂、出了质量问题没人能进车间整改。 平台上的"工厂认证"“源头工厂”"工厂直供"标签,看起来像是替你做了…...
NeoPixel电源设计全攻略:从电流估算到多电源分配
1. 项目概述:为什么NeoPixel电源设计是成败关键如果你玩过NeoPixel或者类似的WS2812B可编程LED,大概率经历过这样的场景:精心设计的动画点亮了十几个灯珠,效果惊艳;但当你兴冲冲地把灯珠数量加到一百个,准备…...
深度学习表示学习:特征学习与迁移学习
深度学习表示学习:特征学习与迁移学习 1. 技术分析 1.1 表示学习概述 表示学习是自动学习数据特征的过程: 表示学习层次原始数据 → 低级特征 → 中级特征 → 高级特征 → 任务预测关键:层次特征提取端到端学习迁移能力1.2 表示学习方法 方法特点监督程度…...
