вот текст инициализации....проверял несколько раз, да и при пошаговом поспроизведении по регистрам смотрел - вроде все верно
CODE
//функция инициализации SPI
/* Includes ------------------------------------------------------------------*/
#include "spi_flash.h"
/* Private typedef -----------------------------------------------------------*/
#define SPI_FLASH_PageSize 0x100 //размер страницы
/* Private define ------------------------------------------------------------*/
#define FLASH_ID 0x202017
#define WRITE 0x02 // Команда записи в память
#define WRSR 0x01 // Команда записи регистра статуса
#define WREN 0x06 // Команда разрешения на запись
#define READ 0x03 // Команда чтения из памяти
#define RDSR 0x05 // Команда чтения регистра статуса
#define RDID 0x9F // Команда чтения идентификатора
#define SE 0xD8 // Команда очистки сектора
#define BE 0xC7 // Команда полной очистки
#define WIP_Flag 0x01 // Write In Progress (WIP) flag
#define Dummy_Byte 0xA5
#define SPI_port SPI3
__IO uint32_t FlashID_m25p64 = 0;
uint8_t SPI_FLASH_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //выключаем JTAG, SW отстается включенным
GPIO_InitStructure.GPIO_Pin = 3 | 5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = 4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = 12 | 15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
SPI_FLASH_CS_HIGH();// отмена выбора памяти
// RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPInn, DISABLE);
// конфигурация SPI3
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI_port, &SPI_InitStructure);
SPI_Cmd(SPI_port, ENABLE); // загрузка SPI3
FlashID_m25p64 = SPI_FLASH_ReadID(); //считываем идентификатор
if(FlashID_m25p64==FLASH_ID)
{
return 1;//успешная проверка
}
else
{
return 0;//идентификатор не совпал
}
}
остальные функции не стал писать, они базовые
а проц STM32F103VG с 1мб
Причина редактирования: [codebox]