宏定义:
#define W25Q16_MISO_PIN (GPIO_Pin_4)
#define W25Q16_MOSI_PIN (GPIO_Pin_5)
#define W25Q16_SCK_PIN (GPIO_Pin_3)
#define W25Q16_CS_PIN (GPIO_Pin_2)
#define W25Q16_PORT (GPIOE)
#define W25Q16_CLK (RCC_AHBPeriph_GPIOE)
#define W25Q16_SPI_MOSIHIGH (GPIO_SetBits(W25Q16_PORT,W25Q16_MOSI_PIN))
#define W25Q16_SPI_MOSILOW (GPIO_ResetBits(W25Q16_PORT,W25Q16_MOSI_PIN))
#define W25Q16_SPI_SCKHIGH (GPIO_SetBits(W25Q16_PORT,W25Q16_SCK_PIN))
#define W25Q16_SPI_SCKLOW (GPIO_ResetBits(W25Q16_PORT,W25Q16_SCK_PIN))
#define W25Q16_SPI_CSHIGH (GPIO_SetBits(W25Q16_PORT,W25Q16_CS_PIN))
#define W25Q16_SPI_CSLOW (GPIO_ResetBits(W25Q16_PORT,W25Q16_CS_PIN))
#define W25Q16_MISO_IN (GPIO_ReadInputDataBit(W25Q16_PORT,W25Q16_MISO_PIN))
void W25Q16_SPI_init(void) //I/O初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(W25Q16_CLK,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Pin=W25Q16_MISO_PIN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(W25Q16_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin= W25Q16_CS_PIN|W25Q16_SCK_PIN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(W25Q16_PORT,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin=W25Q16_MOSI_PIN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(W25Q16_PORT,&GPIO_InitStructure);
W25Q16_SPI_CSHIGH;
W25Q16_SPI_MOSILOW;
W25Q16_SPI_SCKLOW;
}
unsigned char W25Q16_SPI_SendData(unsigned char Data)
{
{
unsigned char Out = 0;
unsigned char i = 0;
W25Q16_SPI_SCKLOW;
for(i = 0; i < 8; i++)
{
if(Data & 0x80)W25Q16_SPI_MOSIHIGH;
else W25Q16_SPI_MOSILOW;
Data = Data << 1;
__NOP();
__NOP();
__NOP();
W25Q16_SPI_SCKHIGH;
if(W25Q16_MISO_IN)Out |= 0x80 >> i;
__NOP();
__NOP();
__NOP();
W25Q16_SPI_SCKLOW;
}
W25Q16_SPI_SCKLOW;
return Out;
}
}
本人
芯片为
STM32L152系列芯片,用普通I/O模拟SPI驱动W25Q16,但总也不成功,大神能不能帮忙看一下,谢谢!
感谢版主及工程
感谢版主经验分享
读取W25Q16芯片ID时,MISO一直是高电平,请问版主什么什么原因?W25Q16芯片没有问题,用其他板子测试是好的
很正常,MISO平时就是高阻的。
估计是你的IO配置不正确,或者硬件有问题。
一周热门 更多>