完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我采用SPI对外挂的flash(w25q256)读取ID,寄存器状态,但返回的都是0Xff,查找问题许久,但还是没有解决,我尝试把自动硬件从选关闭了、速率降低了,但还是不行因此想向各位前辈赐教,在此非常感谢各位前辈的斧正,关键代码如下:
void SYS_Init(void) { SYS_UnlockReg(); CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk); CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1)); CLK->PCLKDIV = (CLK_PCLKDIV_APB0DIV_DIV2 | CLK_PCLKDIV_APB1DIV_DIV2); /******硬件SPI控制器******/ CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL2_SPI0SEL_PCLK1, MODULE_NoMsk); CLK_EnableModuleClock(SPI0_MODULE); SystemCoreClockUpdate(); //set PB multi-function pins for PWM0 channel 0~5 SYS->GPA_MFPL = (SYS->GPA_MFPL ~(SYS_GPA_MFPL_PA2MFP_Msk |SYS_GPA_MFPL_PA1MFP_Msk |SYS_GPA_MFPL_PA0MFP_Msk)) | (SYS_GPA_MFPL_PA2MFP_SPI0_CLK |SYS_GPA_MFPL_PA1MFP_SPI0_MISO |SYS_GPA_MFPL_PA0MFP_SPI0_MOSI); SYS_LockReg(); } void SPI_Init(void) { SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 8, 4000000); SPI_DisableAutoSS(SPI0); } uint8_t SpiReadWriteData(uint8_t SendData) { SPI_WRITE_TX(SPI0, SendData); /***Check SPI0 busy status***/ while (SPI_IS_BUSY(SPI0)); /***Read received data***/ return SPI_READ_RX(SPI0); } void Read_Device_ID(void) { uint16_t ID; SPI_CS_0(); SpiReadWriteData(Device_ID); SpiReadWriteDatae(0x00); SpiReadWriteData(0x00); SpiReadWriteData(0x00); ID = SpiReadWriteData(0XFF); ID =( ID<<8)|SpiReadWriteData(0XFF); SPI_CS_1(); printf("Device_ID:%x\r\n",ID); } 在此,再次感谢各位前辈的赐教。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
622浏览 3评论
500浏览 2评论
359浏览 1评论
379浏览 1评论
347浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 13:19 , Processed in 0.575467 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号