stm32硬件实现与w25qxx通信

复制代码

使用的型号为stm32f103c8t6与w25q64。

STM32CubeMX配置与引脚衔接

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

W25Q64 SCK(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);
}
相关推荐
CiLerLinux1 小时前
第四十九章 ESP32S3 WiFi 路由实验
网络·人工智能·单片机·嵌入式硬件
时光の尘1 小时前
【PCB电路设计】常见元器件简介(电阻、电容、电感、二极管、三极管以及场效应管)
单片机·嵌入式硬件·pcb·二极管·电感·三极管·场效应管
Lu Zelin1 小时前
单片机为什么不能跑Linux
linux·单片机·嵌入式硬件
宁静致远20212 小时前
stm32 freertos下基于hal库的模拟I2C驱动实现
stm32·嵌入式硬件·freertos
Wave8457 小时前
STM32--智能小车
stm32·单片机·嵌入式硬件
wdfk_prog9 小时前
[Linux]学习笔记系列 -- lib/timerqueue.c Timer Queue Management 高精度定时器的有序数据结构
linux·c语言·数据结构·笔记·单片机·学习·安全
充哥单片机设计12 小时前
【STM32项目开源】基于STM32的智能家居环境(空气质量)检测系统
stm32·单片机·嵌入式硬件
夜月yeyue13 小时前
ART 加速器、流水线与指令预测的关系详解
linux·服务器·c语言·单片机·嵌入式硬件·性能优化·嵌入式高阶技巧
糖糖单片机设计15 小时前
硬件开发_基于物联网的生态环境检测系统
stm32·单片机·嵌入式硬件·物联网·51单片机
A9better15 小时前
嵌入式开发学习日志35——stm32之超声波测距
stm32·单片机·嵌入式硬件·学习