上电后400ms后读写25q32
调试状态下读写都正常,正式运行时读数据失败,写数据一直卡死,读写程序是stm32上移过来的,在stm32上运行正常
void flash_gpio_config(void)
{
//时钟
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_SPI2);
//关闭 JTAG
gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);
/* SPI2 GPIO config: NSS/PB9, SCK/PB3, MISO/PB4, MOSI/PB5 */
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_5);
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
SPI_FLASH_CS_LOW();
}
void spi_config(void)
{
spi_parameter_struct spi_init_struct;
/* SPI0 parameter config */
spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;//全双工模式
spi_init_struct.device_mode = SPI_MASTER; //工作模式为主模式
spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT; //SPI发送接收8位帧结构
spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;//空闲时钟为高电平,第二个跳变沿采取数据
spi_init_struct.nss = SPI_NSS_SOFT; //软件复位
spi_init_struct.prescale = SPI_PSC_128; //波特率预分频值
spi_init_struct.endian = SPI_ENDIAN_MSB;//从MSB位开始传输
spi_init(SPI2, &spi_init_struct);
spi_enable(SPI2);//使能spi
}
void flash_Config(void)
{
flash_gpio_config();
spi_config();
SPI_FLASH_SendByte(0xFF);
SPI_FLASH_CS_HIGH();
}
|