//初始化SPI FLASH的IO口
void SPI_Flash_Init(void)
{
RCC->APB2ENR|=1<<3; //PORTB时钟使能
//这里
GPIOB->CRH &= 0XFFF0FFFF;
GPIOB->CRH |= 0X00030000; //PB12 SPI2_NSS推挽
GPIOB->ODR |= 0X1000;
GPIOB->CRL &= 0XF0FFFFFF;
GPIOB->CRL |= 0X03000000; //PB6 F_CS
GPIOB->ODR |= 1<<6;
SPI2_Init(); //初始化SPI
}
void SPI2_Init(void)
{
RCC->APB2ENR|=1<<3; //PORTB时钟使能
RCC->APB1ENR|=1<<14; //SPI2时钟使能
GPIOB->CRH &= 0X000FFFFF;
GPIOB->CRH |= 0XBBB00000; //PB13,14,15 复用输出
GPIOB->ODR |= 0XE000;
SPI2->CR1|=0<<10; //全双工模式
SPI2->CR1|=1<<9; //软件nss管理
SPI2->CR1|=1<<8;
SPI2->CR1|=1<<2; //SPI主机
SPI2->CR1|=0<<11; //8bit数据格式
SPI2->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1
SPI2->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1
//对SPI2属于APB1的外设.时钟频率最大为36M.
SPI2->CR1|=3<<3; //Fsck=Fpclk1/256
SPI2->CR1|=0<<7; //MSBfirst
SPI2->CR1|=1<<6; //SPI设备使能
SPI2_ReadWriteByte(0xff);//启动传输
}
以上两段是我对SPI2初始化的程序。我是要读内部FLASH,对于初始话我是认为没问题了。
而读写内部的FLASH的程序我是调用了战舰板实验中的实验35(读内部FLASH)
const u8 TEXTA_Buffer[] = {"Good Bye"};
#define SIZE sizeof(TEXTA_Buffer)
#define FLASH_SAVE_ADDR 0X08016000
上面是我修改了的存储地址。因为我用的板子是128K的。末地址是08020000,
我还修改了stmflash.h里边的
#define STM32_FLASH_SIZE 128 //所选STM32的FLASH容量大小(单位为K)
但是在读程序的时候却是和写进去的字符串不一样。都是显示xL;
麻烦大家看一下这是什么原因造成的。
|