使用SPI1重映射无法读取W25Q64
使用的是F403A,W25Q64,用的403标准库的flash例程改的,闪存接403A SPI1口,管教重映射到PB.3 4 5引脚,编译后无法读取闪存。请教如下SPI初始化代码是否有问题?uint8_t SpiFlash_Init(void)
{
GPIO_InitType GPIO_InitStructure;
SPI_InitTypeSPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_AFIO, ENABLE); /*AFIO复用时钟开启*/
RCC_APB2PeriphClockCmd(SPIx_RCC_CLK | SPIx_GPIO_RCC_CLK, ENABLE);
RCC_AHBPeriphClockCmd(SPIx_DMA_RCC_CLK, ENABLE);
GPIO_PinsRemapConfig(GPIO_Remap01_SPI1, ENABLE); /*SPI1 引脚重映射*/
/* Configure SPI_FLASH pins*/
GPIO_InitStructure.GPIO_Pins =SPIx_PIN_MOSI;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(SPIx_PORT_MOSI, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins = SPIx_PIN_MISO;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(SPIx_PORT_MISO, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins = SPIx_PIN_NSS;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_Init(SPIx_PORT_NSS, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins =SPIx_PIN_SCK;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(SPIx_PORT_SCK, &GPIO_InitStructure);
FLASH_CS_HIGH(); 你好,请把spi_flash.h的宏定义也贴一下 谢谢回复!
这是spi_flash.h宏定义部分的代码
/* SPI define ----------------------------------------------------------------*/
/*
* SPI_MODE
* 0 --> DMA
* 1 --> pooling
*/
#define SPI_MODE 1
#define BUF_SIZE SPIF_PAGE_SIZE
#define FLASH_SPI SPI1
#define SPIx_RCC_CLK RCC_APB2PERIPH_SPI1
#define SPIx_GPIO_RCC_CLK RCC_APB2PERIPH_GPIOB
#define SPIx_PIN_NSS GPIO_Pins_9
#define SPIx_PORT_NSS GPIOB
#define SPIx_PIN_SCK GPIO_Pins_3
#define SPIx_PORT_SCK GPIOB
#define SPIx_PIN_MISO GPIO_Pins_4
#define SPIx_PORT_MISO GPIOB
#define SPIx_PIN_MOSI GPIO_Pins_5
#define SPIx_PORT_MOSI GPIOB
#define SPIx_DMA DMA1
#define SPIx_DMA_RCC_CLK RCC_AHBPERIPH_DMA1
#define SPIx_Rx_DMA_Channel DMA1_Channel2
#define SPIx_Rx_DMA_FLAG DMA1_FLAG_TC2
#define SPIx_Tx_DMA_Channel DMA1_Channel3
#define SPIx_Tx_DMA_FLAG DMA1_FLAG_TC3
#define FLASH_CS_HIGH() GPIO_SetBits(SPIx_PORT_NSS, SPIx_PIN_NSS)
#define FLASH_CS_LOW() GPIO_ResetBits(SPIx_PORT_NSS, SPIx_PIN_NSS)
顺便上传项目附件,这是标注库403A SPI例子里面外部flash的例子改的。
PB3/4跟SWJTAG相关引脚重了,MCU上电默认是给SWJTAG用的。需要关闭JTAG或者SW,腾出PB3/4给SPI用。
加上这句:GPIO_PinsRemapConfig(AFIO_MAP7_SWJTAG_0010, ENABLE);
林堪堪 发表于 2021-1-27 14:38
PB3/4跟SWJTAG相关引脚重了,MCU上电默认是给SWJTAG用的。需要关闭JTAG或者SW,腾出PB3/4给SPI用。
加上这 ...
非常感谢您的热心解答,确实如您所述,PB3 4引脚别占用,加上您给的重映射函数后,就正常工作了,看来单独重映射SPI1步骤是不完整的。 谢谢
页:
[1]