完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
驱动gd25q40b程序是参考正点原子的w25x16,发现两个芯片差不多,但是在读id的时候发现一个问题,把原子哥的读写函数返回字节改成u16,如下
u16 SPIx_ReadWriteByte(u8 TxData) { u8 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位 { retry++; if(retry>200)return 0; } SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个数据 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; if(retry>200) return 0; } return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据 } 然后把读取id函数里面的Temp作如下改动就可以读取正确的id号,但是如果不改,读出来的数,低字节的数争取,高字节的数不对。 u16 SPI_Flash_ReadID(void) { u16 Temp = 0; SPI_FLASH_CS=0; SPIx_ReadWriteByte(0x90); //发送读取ID命令 SPIx_ReadWriteByte(0x00); SPIx_ReadWriteByte(0x00); SPIx_ReadWriteByte(0x00); // Temp|=SPIx_ReadWriteByte(0xFF) |
|
相关推荐
9个回答
|
|
在线等,比较急,请大家帮帮忙,我是新手,另外驱动代码如下
void Init_Spi_Flash(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /*!< sEE_CS_GPIO, sEE_MOSI_GPIO, sEE_MISO_GPIO and sEE_SCK_GPIO Periph clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); /*!< sEE Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); /*!< Configure SCK pins: SCK */ GPIO_InitStructure.GPIO_Pin = SPI_CLK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SPI_PORT, &GPIO_InitStructure); /*!< Configure SPI pins: MISO */ GPIO_InitStructure.GPIO_Pin = SPI_MISO_PIN; GPIO_Init(SPI_PORT, &GPIO_InitStructure); /*!< Configure SPI pins: MOSI */ GPIO_InitStructure.GPIO_Pin = SPI_MOSI_PIN; GPIO_Init(SPI_PORT, &GPIO_InitStructure); /*!< Configure SPI_CS_PIN pin: sEE_SPI Card CS pin */ GPIO_InitStructure.GPIO_Pin = SPI_CS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(SPI_PORT, &GPIO_InitStructure); /* Connect PXx to SPI_SCK */ GPIO_PinAFConfig(SPI_PORT, GPIO_PinSource13,GPIO_AF_1); /* Connect PXx to sEE_SPI_MISO */ GPIO_PinAFConfig(SPI_PORT, GPIO_PinSource14,GPIO_AF_1); /* Connect PXx to sEE_SPI_MOSI */ GPIO_PinAFConfig(SPI_PORT, GPIO_PinSource15,GPIO_AF_1); /*!< sEE SPI Config */ 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_2; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStructure); SPI_Cmd(SPI2, ENABLE); /*!< sEE_SPI enable */ GPIO_SetBits(SPI_PORT,SPI_CS_PIN); } |
|
|
|
|
|
|
|
已经解决了,是我spi配置的时候没有注意,stm32f0有个fifo,配置一下这个就可以了,谢谢楼上的
|
|
|
|
你发送的是8位数据,接收的是16位?也会只收到8位的
|
|
|
|
这种外部flash直接使用野火历程就好啦。我也用这个做汉字库
|
|
|
|
呵呵, F1好像没有FIFO,F0增加了FIFO,以前学习F0例子时也在这出问题。
|
|
|
|
一些外设的程序不能照搬f1的
|
|
|
|
http://www.eeboard.com/tutorials/stm32f051系列教程第12课-spi读写串行flash/ 这个是f0的SPI 讲的很详细
|
|
|
|
f0函数库手册 651页有说明FRXTH 的作用 也就是这个函数SPI_RxFIFOThresholdConfig
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1330 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1263 浏览 3 评论
2430 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1416 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1847 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 20:12 , Processed in 0.771301 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号