stm32f103rc驱动W25Q128(SPI通讯)测试

W25Q128驱动测试

本章主要说明并演示stm32f103rct6的spi方式驱动w25q128。手册上的内容我就不细说了,大家自己看

工具: w25q128 stm32f103rct6 蓝牙串口

spi 引脚
NSS PA2
MOSI PA7
MISO PA6
CLK PA5

串口
单片机
在这里插入图片描述

第一步:打开SPI

下面展示一些 打开spi1

RCC->APB2ENR | RCC_APB2ENR_SPI1EN;
GPIOA->CRL = (GPIOA->CRL & 000FF0FF) | 0XB4B00300;
SPI1->CR1 = SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_MSTR | SPI_CR1_SPE;

第二步:驱动w25q128

下面展示一些 驱动代码

uint8_t spi_send_byte(uint8_t data)
{
  SPI1->DR = data;
  //while ((SPI1->SR & SPI_SR_TXE) == 0);
  while ((SPI1->SR & SPI_SR_RXNE) == 0);//接收完毕
  return SPI1->DR;
}

void spi_send(uint8_t data[], uint16_t len)
{
  uint16_t i;
  
  CS_0;//片选拉低
  for (i = 0; i < len; i++)
    data[i] = spi_send_byte(data[i]);//发送要发送的数据,并将返回的数据保存
  while (SPI1->SR & SPI_SR_BSY);
  CS_1;
}

第三步:测试

下面展示一些 内联代码片

//发送消息
void W25Q128ReadID(void)
 uint8_t data[] = {0x90, 0x00, 0x00, 0x00, 0x00, 0x00};
  
  spi_send(data, sizeof(data));
  dump_data(data, sizeof(data));
  //打印接收到消息
  void dump_data(uint8_t *data, uint16_t len)
{
  uint8_t i;
  
  printf("Data:");
  for (i = 0; i < len; i++)
    printf(" 0x%02x", data[i]);
  printf("\n");
}

最后主函数调用 W25Q128_ReadID();

结果

在这里插入图片描述
另外文件操作部分我结合手册后续发出,有关spi知识,自行学习。

源工程代码:后续上传

发布了16 篇原创文章 · 获赞 42 · 访问量 6527

猜你喜欢

转载自blog.csdn.net/sf9090/article/details/105316948