赞
踩
这一张我们主要讲解一下STM32CUBEMX新版本 片外FLASH+FATFS文件系统。
这里我们要想配置SPI和文件系统 并验证需要的准备工作如下:
这里配置的是SPI2,还需要软件控制片选增加一个PB12作为输出的片选脚,这里SPI2就配置好了。
在MiddleWare下FATFS勾选User-define,在底下参数栏里面设置简体中文以及块大小,我们选取的是W25Q128,块的大小是4096。如果是SD卡就不需要更改大小为512。这里文件系统就配置好了。
生成成功后打开工程。
void MX_SPI2_Init(void) { hspi2.Instance = SPI2; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi2.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi2) != HAL_OK) { Error_Handler(); } SPI2->CR1 |= SPI_CR1_SPE; }
SPI2初始化代码添加SPI使能代码。
FLASH.C
#define W25Q80 0XEF13 #define W25Q16 0XEF14 #define W25Q32 0XEF15 #define W25Q64 0XEF16 #define W25Q128 0XEF17 #define M25P64_FLASH_ID 0x202017//C22017 #define M25P40_FLASH_ID 0x202013 /* USER CODE BEGIN Includes */ #define sFLASH_CMD_WRITE 0x02 /*!< Write to Memory instruction */ #define sFLASH_CMD_WRSR 0x01 /*!< Write Status Register instruction */ #define sFLASH_CMD_WREN 0x06 /*!< Write enable instruction */ #define sFLASH_CMD_READ 0x03 /*!< Read from Memory instruction */ #define sFLASH_CMD_RDSR 0x05 /*!< Read Status Register instruction */ #define sFLASH_CMD_RDID 0x9F /*!< Read identification */ #define sFLASH_CMD_SE 0x20 /*!< Sector Erase instruction (4k)*/ #define sFLASH_CMD_BE 0xD8 /*!< Block Erase instruction (64k)*/ #define sFLASH_CMD_CE 0xC7 /*!< Chip Erase instruction (Chip Erase)*/ #define sFLASH_WIP_FLAG 0x01 /*!< Write In Progress (WIP) flag */ #define sFLASH_CMD_RDID 0x9F /*!< Read identification */ #define sFLASH_CMD_DeviceID 0xAB #define sFLASH_CMD_ManufactDeviceID 0x90 #define sFLASH_CMD_JedecDeviceID 0x9F #define sFLASH_DUMMY_BYTE 0xFF uint8_t sFlashBuff[4096]; //片选CS拉低 void sFLASH_CS_LOW(void) { HAL_GPIO_WritePin(SPI2_CS_GPIO_Port,SPI2_CS_Pin,GPIO_PIN_RESET); } //片选CS拉高 void sFLASH_CS_HIGH(void) { HAL_GPIO_WritePin(SPI2_CS_GPIO_Port,SPI2_CS_Pin,GPIO_PIN_SET); } //FLASH写使能 void sFLASH_WriteEnable(void) { /*!< Select the FLASH: Chip Select low */ sFLASH_CS_LOW(); /*!< Send "Write Enable" instruction */ sFLASH_SendByte(sFLASH_CMD_WREN); /*!< Deselect the FLASH: Chip Select high */ sFLASH_CS_HIGH(); } //FLASH 发送一个字节 uint8_t sFLASH_SendByte(uint8_t byte) { unsigned char dr; /*!< Loop while DR register in not emplty */ //while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); while((SPI2->SR & SPI_SR_TXE) == 0); /*!< Send byte through the SPI1 peripheral */ //SPI_I2S_SendData(SPI1, byte); SPI2->
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。