[MM32硬件] 【灵动微电子MM32F0121测评】+6_硬件SPI测试

[复制链接]
 楼主| stb988 发表于 2025-6-18 22:24 | 显示全部楼层 |阅读模式
        spi和i2c一样重要,基本每款MCU都带有硬件SPI,灵动的这款当然也不例外,我们这个开发板上板载了一个W25Q系统的存储芯片,用的就是SPI通信方式,
屏幕截图 2025-06-18 221514.png
接下来我们对硬件SPI进行初始化
  1. void SPI_Configure(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStruct;
  4.     SPI_InitTypeDef  SPI_InitStruct;

  5.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

  6.     SPI_StructInit(&SPI_InitStruct);
  7.     SPI_InitStruct.SPI_Mode      = SPI_Mode_Master;
  8.     SPI_InitStruct.SPI_DataSize  = SPI_DataSize_8b;
  9.     SPI_InitStruct.SPI_DataWidth = 8;
  10.     SPI_InitStruct.SPI_CPOL      = SPI_CPOL_Low;
  11.     SPI_InitStruct.SPI_CPHA      = SPI_CPHA_1Edge;
  12.     SPI_InitStruct.SPI_NSS       = SPI_NSS_Soft;
  13.     SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  14.     SPI_InitStruct.SPI_FirstBit  = SPI_FirstBit_MSB;
  15.     SPI_Init(SPI1, &SPI_InitStruct);

  16.     SPI_BiDirectionalLineConfig(SPI1, SPI_Enable_RX);
  17.     SPI_BiDirectionalLineConfig(SPI1, SPI_Enable_TX);

  18.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

  19.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource4,  GPIO_AF_0);
  20.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource5,  GPIO_AF_0);
  21.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource6,  GPIO_AF_0);
  22.     GPIO_PinAFConfig(GPIOA, GPIO_PinSource7,  GPIO_AF_0);

  23.     GPIO_StructInit(&GPIO_InitStruct);
  24.     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;
  25.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
  26.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_PP;
  27.     GPIO_Init(GPIOA, &GPIO_InitStruct);

  28.     GPIO_StructInit(&GPIO_InitStruct);
  29.     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6;
  30.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
  31.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IPU;
  32.     GPIO_Init(GPIOA, &GPIO_InitStruct);

  33.     SPI_Cmd(SPI1, ENABLE);
  34. }
初始化后就是对w25擦除写入数据
  1.     uint8_t i = 0;
  2.     uint8_t WriteBuffer[100] = "Hello 21ic, Hello MM32F0121", ReadBuffer[100];

  3.     printf("\r\nTest %s", __FUNCTION__);

  4.     SPI_Configure();

  5.     SPI_FLASH_ReadDeviceID();

  6.     SPI_FLASH_ReadJEDEC_ID();

  7.     printf("\r\nSPI FLASH Sector Erase...");

  8.     SPI_FLASH_SectorErase(0);

  9.     printf("\r\nSPI FLASH Read...");

  10.     SPI_FLASH_FastRead(0, ReadBuffer, 100);

  11.     for (i = 0; i < 100; i++)
  12.     {
  13.         if (0 == (i % 10))
  14.         {
  15.             printf("\r\n");
  16.         }

  17.         printf("0x%02x ", ReadBuffer[i]);
  18.     }

  19.     printf("\r\nSPI FLASH Page Program...");


  20.     SPI_FLASH_PageProgram(0, WriteBuffer, sizeof(WriteBuffer));

  21.     printf("\r\nSPI FLASH Read...");

  22.     SPI_FLASH_FastRead(0, ReadBuffer, 100);
  23.      printf("%s ", ReadBuffer);
下面看看串口输出
屏幕截图 2025-06-18 222318.png
AdaMaYun 发表于 2025-7-31 17:55 | 显示全部楼层
硬件SPI很不错的案例
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

393

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

53

主题

393

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部