Image
Image

yutingwei

+ 关注

粉丝 0     |     主题 24     |     回帖 235

基于STM32与NOR FLASH的SPI通信
2024-3-31 21:46
  • ST MCU
  • 29
  • 500
  编译运行:  
  main()函数 uint8_t TxBuf[] = "HelloWorld"; #define BUFSZ (sizeof(TxBuf) / sizeof(uint8_t)) uint8 ...  
  擦除FLASH   读/写FLASH的函数实现完毕,看擦除FLASH的实现。注意,擦除FLASH只能按扇区擦除,该函数的参 ...  
  等待写操作完成   写FLASH时一个操作过程,FLASH提供操作命令W25X_ReadStatusReg供给用户判断是否写完成 ...  
  使能FLASH写   上面往FLASH写数据,在调用SPI_FLASH_RecvSendByte()写之前需要调用SPI_FLASH_WriteEnabl ...  
   以页为单位的写,会调用以字节为单位的写,即前面的SPI_FLASH_RecvSendByte()函数。 ...  
    该函数调用到以页为单位写的函数SPI_FLASH_Write_Page(),一页的空间大小为256字节。 //按页写 void SP ...  
  这个函数是将用户要写的数据进行以扇区为单位写入,一个扇区为4096字节大小,以扇区为单位写,函数为: voi ...  
  //写扇区 -> 写页 -> 按字节写 uint32_t SectorNum; uint16_t SectorOffset; uint16_t SectorRemainder; ui ...  
  往FLASH写数据   往FLASH写数据,有3种写范围,写一整个扇区、写一整页、写一个字节,当我们要从某个扇区 ...  
   选中FLASH芯片后向其发送W25X_ReadData表示主机要读取FLASH的数据,接着发送要读取的目标地址,还是遵循M ...  
  读取FLASH的数据 void SPI_FLASH_Read(uint8_t *Buf, uint32_t ReadAddr, uint16_t ReadCnt) { uint16_ ...  
   获取FLASH的运行状态则是向FLASH发送获取状态的指令W25X_ReadStatusReg。跟上一个函数类似,不赘述。利用 ...  
  读取FLASH的当前运行状态 uint8_t SPI_FLASH_Read_SR(void) { uint8_t ret = 0; FLASH_SPI_CS_LO ...  
   发送完W25X_JedecDeviceID指令后,调用SPI_FLASH_RecvSendByte()函数用于接收FLASH发来的3字节分3次发送 ...  
  这些命令被宏定义在bsp_spi_flash.h文件中: #define W25X_WriteEnable 0x06 #define W25X_WriteDi ...  
   W25X_JedecDeviceID也是一个宏定义,这是由FLASH定义的用来控制FLASH的指令,从W25Q64手册知,支持的指令 ...  
  FLASH_SPI_CS_LOW()和FLASH_SPI_CS_HIGH()是分别实现选中和不选中FLASH片选的宏,其实质就是控制nSS引脚为 ...  
  该函数含超时机制,可用于发送/接收一字节数据。至于用于发送还是接收,看用户关注哪一个。   下来是驱 ...  
  通过SPI的硬件接口发送/接收数据 uint8_t SPI_FLASH_RecvSendByte(uint8_t byte) { uint8_t TimeCnt = ...  
2
3
近期访客