微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于STM32读到M25P80数据全为255是什么情况?请求解答

采用STM32F103系列芯片读写M25P80
能读到ID为202014,写完后读出数据全为255

使用STM32F103的SPI1
PB3————SPI1_SCK
PB4————SPI1_MISO
PB5————SPI1_MOSI
PD3————SPI1_NSS

以下为M25P80电路图


以下为与单片机引脚连接图

这是单片机引脚连接图


在这里插入图片描述


这里需要开启映射时钟和J-link的SW使能 否则PB3和PB4一个一直拉高

以下为配置代码

 void SPI_FLASH_Init(void)
{
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);	
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGdisable,ENABLE);

//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGdisable,ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE);
	//RCC_PCLK2Config(RCC_HCLK_Div4);


 // JTAG_Set(00);
  /* Enable SPI1 and GPIO clocks */
  /*!< SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO, 
       SPI_FLASH_SPI_MISO_GPIO, SPI_FLASH_SPI_DETECT_GPIO 
       and SPI_FLASH_SPI_SCK_GPIO Periph clock enable */
  /*!< SPI_FLASH_SPI Periph clock enable */
	macSPI_APBxClock_FUN ( RCC_APB2Periph_SPI1, ENABLE );
 
  /*!< Configure SPI_FLASH_SPI_CS_PIN pin: SPI_FLASH Card CS pin */
	macSPI_CS_APBxClock_FUN ( RCC_APB2Periph_GPIOD, ENABLE );
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
	
  /*!< Configure SPI_FLASH_SPI pins: SCK */
	macSPI_SCK_APBxClock_FUN ( RCC_APB2Periph_GPIOB, ENABLE );
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MISO */
	macSPI_MISO_APBxClock_FUN ( RCC_APB2Periph_GPIOB, ENABLE );
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /*!< Configure SPI_FLASH_SPI pins: MOSI */
	macSPI_MOSI_APBxClock_FUN ( RCC_APB2Periph_GPIOB, ENABLE );
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* deselect the FLASH: Chip Select high */
  //macSPI_FLASH_CS_disABLE();
	GPIO_SetBits( GPIOD, GPIO_Pin_3 );

  /* SPI1 configuration */
  // W25X16: data input on the dio pin is sampled on the rising edge of the CLK. 
  // Data on the DO and dio pins are clocked out on the falling edge of CLK.
  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_256;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCpolynomial = 7;
  SPI_Init(macSPIx , &SPI_InitStructure);

  /* Enable SPI1  */
  SPI_Cmd(macSPIx , ENABLE);
	//SPI1_ReadWriteByte(0xff);
	//SPI_FLASH_SendByte(0xff);
}

以下是主函数读写

M25P80_Write_Bytes(FLASH_WriteAddress,Tx_Buffer,BufferSize);
	id=SPI_FLASH_ReadID();
	printf("\r\n ID%x \r\n", id);
	for( k=0; k<30; k++ )
      printf("\r\n %d \r\n", Tx_Buffer[k]);
	//	getFlashtypeID();
//		POINT_COLOR=RED;
delay_ms(1000);	

	M25P80_Read_Bytes(FLASH_WriteAddress,Rx_Buffer, BufferSize);
    for( k=0; k<30; k++ )
      printf("\r\n %d \r\n", Rx_Buffer[k]);

读到数据如下效果

在这里插入图片描述


以上是所有描述 请调过的指教以下

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐