stm32硬件实现与w25qxx通信

ops/2025/2/3 19:49:54/
 

使用的型号为stm32f103c8t6与w25q64。

STM32CubeMX配置与引脚衔接

根据stm32f103c8t6引脚手册,采用B12-B15四个引脚与W25Q64连接,实现SPI通信。

W25Q64SCK(CLK)PB13
MOSI(DI)PB15
MISO(DO)PB14
CS(这里不采用硬件CS,所以接任意GPIO口都可以)PB12

STM32CubeMX配置

这里对于时钟相关的配置就不做赘述了,由于是练习所以将系统时钟配置成了72MHz,主要是配置引脚。

在引脚配置将PB12配置为推挽输出,默认电平为高。

PB13,PB14,PB15均使用硬件的SPI。

可以在系统核心的GPIO中的SPI中看到这三个配置。

然后到SPI2中将参数配置,采用高位优先,波特率为18MB/s,若不是则需要调整Prescaler分频到18MB/s,传输以字节为单位。

这里先不开启中断,所以NVIC setting里面的中断没有选上,做好基础配置后就可以生成代码,点击GENERATE CODE。


在Src中就会出现spi.c文件

查看PB13和PB15应该是默认配置为复用推挽,PB14为浮空输入。

spi2的stm32cubemx生成的默认配置如下。

配置完成后代码实现与W25Q64通信

接下来就是实现与W25Q64的通信,先测试能不能获取到W25Q64的厂商ID和设备ID。

对SPI的收发函数进行了封装,通过HAL_SPI_TransmitReceive()函数,将byte发送给w25q64,并将收到的数据放入rByte。该函数第一个参数为句柄的指针,由于才用spi2,句柄为hspi2,第二个参数为要发送的字节,第三个为接受的字节,第四个为大小(以字节为单位),第五个为超时时长,以ms为单位。

uint8_t SPI_SwapByte(uint8_t byte)
{uint8_t rByte = 0;HAL_SPI_TransmitReceive(&hspi2, &byte, &rByte, 1, 1000);return rByte;
}

void W25Q64_ReadID(uint8_t *mid, uint16_t *did)
{
​// 读取ID// 开启片选信号HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);// 发送读取ID命令SPI_SwapByte(0x9f);// 读取制造商id*mid = SPI_SwapByte(0xff);// 读取设备id*did = 0;*did |= SPI_SwapByte(0xff) << 8;   // 高8位*did |= SPI_SwapByte(0xff) & 0xff; // 低8位// 关闭片选信号HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
​// 发送调试信息到串口char debugMsg[50];int msgLength = snprintf(debugMsg, sizeof(debugMsg), "Manufacturer ID: 0x%02X, Device ID: 0x%04X\r\n", *mid, *did);HAL_UART_Transmit(&huart1, (uint8_t *)debugMsg, msgLength, HAL_MAX_DELAY);
}

http://www.ppmy.cn/ops/155381.html

相关文章

C++ Primer 标准库类型string

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

熵采样在分类任务中的应用

熵采样在分类任务中的应用 在机器学习的分类任务里,数据的标注成本常常制约着模型性能的提升。主动学习中的熵采样策略,为解决这一难题提供了新的思路。本文将带你深入了解熵采样在分类任务中的原理、应用及优势。 一、熵采样的原理(优化版) 熵,源于信息论,是对不确定…

发布 VectorTraits v3.1(支持 .NET 9.0,支持 原生AOT)

文章目录 发布 VectorTraits v3.1&#xff08;支持 .NET 9.0&#xff0c;支持 原生AOT&#xff09;支持 .NET 9.0中断性变更 支持 原生AOT原生AOT的范例使用IlcInstructionSet参数 TraitsOutput类增加IsDynamicCodeCompiled/IsDynamicCodeSupported信息的输出为了支持原生AOT, …

39. I2C实验

一、IIC协议详解 1、ALPHA开发板上有个AP3216C&#xff0c;这是一个IIC接口的器件&#xff0c;这是一个环境光传感器。AP3216C连接到了I2C1上: I2C1_SCL: 使用的是UART4_TXD这个IO&#xff0c;复用位ALT2 I2C1_SDA: 使用的是UART4_RXD这个IO。复用为ALT2 2、I2C分为SCL和SDA&…

doris:主键模型的更新并发控制

概览​ Doris 采用多版本并发控制机制&#xff08;MVCC - Multi-Version Concurrency Control&#xff09;来管理并发更新。每次数据写入操作均会分配一个写入事务&#xff0c;该事务确保数据写入的原子性&#xff08;即写入操作要么完全成功&#xff0c;要么完全失败&#xf…

数组—学习

1.基础知识 1. 高精度计算 高精度算法是处理大数&#xff08;超过64位&#xff09;的计算方法。C标准库没有直接支持大数运算&#xff0c;因此需要使用数组来模拟大数的存储和运算。 2. 全局静态数组 全局变量&#xff08;包括静态数组&#xff09;在C中会在程序启动时自动初…

GWO优化LSBooST回归预测matlab

灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;简称 GWO&#xff09;&#xff0c;是一种群智能优化算法&#xff0c;由澳大利亚格里菲斯大学的 Mirjalii 等人于 2014 年提出。该算法的设计灵感源自灰狼群体的捕食行为&#xff0c;核心思想是模仿灰狼社会的结构与行为…

「全网最细 + 实战源码案例」设计模式——享元模式

核心思想 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;主要用于减少程序中大量对象的内存消耗。该模式通过共享相同的数据来有效减少内存的使用&#xff0c;适用于对象非常多且可以共享一部分状态的场景。核心&#xff1a;将对象的内部…