/* Private variables ---------------------------------------------------------*/
QSPI_HandleTypeDef hqspi;
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_QUADSPI_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
#define DATA_SIZE 10000
#define DATA_ADDR 400
uint8_t flag_tx_done;
uint8_t flag_rx_done;
uint8_t flag_cmd_done;
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_QUADSPI_Init();
/* USER CODE BEGIN 2 */
//HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);
delay_init(216);
delay_ms(500);
uint8_t stareg2;
stareg2=W25QXX_ReadSR(&hqspi, 2); //
if((stareg2&0X02)==0) //
{
stareg2|=1<<1; //
W25QXX_Write_SR(&hqspi, 2,stareg2); //设置QE丿1
}
uint8_t stareg3;
stareg3=W25QXX_ReadSR(&hqspi, 3); //读取状濁寄存器3,判断地坿模式
if((stareg3&0X01)==0) //如果不是4字节地址模式,则进兿4字节地址模式
{
W25qxx_Cmd(&hqspi, W25X_WriteEnable, QSPI_INSTRUCTION_1_LINE);
W25qxx_Cmd(&hqspi, W25X_Enable4ByteAddr, QSPI_INSTRUCTION_1_LINE);
}
static uint16_t W25qxx_Id;
W25qxx_Id = W25qxx_Read_Id(&hqspi);
W25qxx_Erase_Sector(&hqspi, 0);
static uint8_t pData_wr[DATA_SIZE] = {22,33,44};
uint32_t i;
for(i = 0; i < DATA_SIZE; i++)
{
pData_wr[i] = i;
}
W25QXX_Write(&hqspi, pData_wr, DATA_ADDR, DATA_SIZE);
static uint8_t pData_rd[DATA_SIZE];
W25qxx_Read_Data(&hqspi, DATA_ADDR, (uint8_t*)pData_rd, DATA_SIZE);
for(i = 0; i < DATA_SIZE; i++)
{
if((pData_wr[i] & 0xff) != (pData_rd[i] & 0xff)) break;
}
if(i < DATA_SIZE)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
/**
* @brief QUADSPI Initialization Function
* @param None
* @retval None
*/
static void MX_QUADSPI_Init(void)
{
/* USER CODE BEGIN QUADSPI_Init 0 */
/* USER CODE END QUADSPI_Init 0 */
/* USER CODE BEGIN QUADSPI_Init 1 */
/* USER CODE END QUADSPI_Init 1 */
/* QUADSPI parameter configuration*/
hqspi.Instance = QUADSPI;
hqspi.Init.ClockPrescaler = 2;
hqspi.Init.FifoThreshold = 4;
hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
hqspi.Init.FlashSize = 24;
hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_5_CYCLE;
hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
hqspi.Init.FlashID = QSPI_FLASH_ID_1;
hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
if (HAL_QSPI_Init(&hqspi) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN QUADSPI_Init 2 */
/* USER CODE END QUADSPI_Init 2 */
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_In