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);
}
相关推荐
雷门大师姐2 小时前
14.DS18B20温度传感器
单片机·嵌入式硬件
触角010100014 小时前
OLED屏幕开发全解析:从硬件设计到物联网显示实战 | 零基础入门STM32第五十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
蓑衣客VS索尼克4 小时前
无感方波开环强拖总结
经验分享·单片机·学习
傍晚冰川6 小时前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习
c-u-r-ry306 小时前
009---基于Verilog HDL的单比特信号边沿检测
嵌入式硬件·fpga开发
土豆198910217 小时前
简记_ MCU管脚的防静电处理
嵌入式硬件
Whappy0018 小时前
第三节:基于Winform框架的串口助手小项目---串口操作《C#编程》
linux·单片机·c#
爱吃奶酪的松鼠丶9 小时前
51单片机之蓝牙模块的使用
单片机·嵌入式硬件·51单片机
盐析大白兔10 小时前
STM32G431RBT6--(3)片上外设及其关系
stm32·单片机·嵌入式硬件
Joshua.X10 小时前
电脑总显示串口正在被占用处理方法
嵌入式硬件·串口·信息与通信·故障排查·232·485