完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用示波器试过MISO也有信号但是就是收不到,一直是0,发数据到是没问题,毕竟oled点亮了,但是flash却不能读,flash这一步的函数没问题,模拟试过可以读写,但是用控制器版本不知道是不是少调了什么,下面是代码
void SPI1_Init(void) { //SPI1时钟使能 RCC->APB2ENR |=0X01<<12; //SCK(PA5) MOSI(PA7)配置为普通功能推挽输出 //端口模式设置 //模式----通用输出模式(01) GPIOA->MODER =~(0x03<<10 |0x03<<14); GPIOA->MODER |=0X02<<14 | 0X02<<10; //输出类型----推挽 GPIOA->OTYPER = ~(0X01<<7 | 0X01<<5); //输出速度----100M GPIOA->OSPEEDR =~(0x03<<14 |0x03<<10); //上下拉-----无上拉或下拉 GPIOA->PUPDR =~(0x03<<10); //MISO(pA6) 配置为浮空输入 GPIOA->MODER =~(0X03<<12); //pA6为输入模式 GPIOA->MODER |=0X02<<12; GPIOA->AFR[0] =~(0x0fff<<20);//复用映射 SPI1->CR1 =~(0X01<<15); SPI1->CR1 =~(0X01<<10); //全双工模式 SPI1->CR1 =~(0X01<<11); //8位数据模式 SPI1->CR1 |=0X03<<8; //软件管理NSS,主模式 SPI1->CR1 =~(0X01<<7); //高位在前 //波特率 SPI1->CR1 =~(0X07<<3); // /2 SPI1->CR1 |=0X01<<2; //主模式 SPI1->CR1 =~(0X03<<0); //mode 0 SPI1->CR2 =~(0X01<<4); //摩托罗拉格式 SPI1->CR2 =~(0x07<<8); SPI1->CR2 |=0x07<<8;//8位数据位宽 SPI1->CR2 =~(0x01<<12); SPI1->CR2 |=0x01<<12;//FRXTH SPI1->CR2 =~(0x01<<2); SPI1->CR2 |=0x01<<2;//SSOE=1 SPI1->CR1 |=0X01<<6; //开SPI控制器 } //spi读写函数--模式0 //_data:待发送的数据,如果是接收模式,发送的数据则应该是0xff //返回值:接收到的数据。如果是发送模式,返回值可以丢弃 u8 SPI1_ReadWriteByte(u8 _data) { while(!(SPI1->SR (0X01<<1))); SPI1->DR=_data; while(!(SPI1->SR (0X01<<0))); _data=SPI1->DR; return _data; } uint16_t SPI_Flash_ReadID(void) { uint32_t Temp = 0; uint32_t i=0; Open_SPI_Flash(); SPI1_ReadWriteByte(W25X_ManufactDeviceID);//发送读取ID命令 SPI1_ReadWriteByte(0x00; SPI1_ReadWriteByte(0x00); SPI1_ReadWriteByte(0x00); Temp|=SPI1_ReadWriteByte(0xFF)<<8; Temp|=SPI1_ReadWriteByte(0xFF); Close_SPI_Flash(); return Temp; } 读出来的一直是0,各位大佬帮我看一下是出了什么问题这里有示波器彻底读写ID的波形,包括读地址和发0 |
|
相关推荐
1个回答
|
|
SPI只能发送但收不到数据,只能收到0的原因可能有以下几点:
1. SPI接收引脚(MISO)连接问题:请检查MISO引脚是否正确连接到SPI设备,以及是否有任何断线或短路。 2. SPI设备配置问题:确保SPI设备的配置正确,包括时钟速率、数据位宽度、CPOL和CPHA等参数。 3. SPI中断配置问题:如果使用中断方式进行SPI通信,请检查中断配置是否正确,包括优先级、中断使能等。 4. SPI接收缓冲区问题:请检查SPI接收缓冲区是否正确初始化,以及是否有溢出或未清空的情况。 5. SPI时钟问题:SPI通信依赖于时钟信号,如果时钟信号不稳定或不正确,可能导致接收数据错误。请检查时钟配置和时钟源。 6. 硬件故障:如果以上问题都排除了,可能是SPI设备的硬件故障,建议检查SPI设备或更换设备进行测试。 关于您提供的代码,我注意到您已经启用了SPI1的时钟,并配置了SCK和MOSI引脚。但是,您还需要配置MISO引脚以及SPI通信的相关参数。以下是一些建议: 1. 配置MISO引脚:将MISO引脚(例如PA6)配置为普通功能输入。 2. 配置SPI通信参数:设置SPI的数据位宽度、CPOL、CPHA等参数。 3. 初始化SPI:调用SPI_Init()函数进行SPI初始化。 4. 启用SPI:在完成配置后,使用SPI_Cmd(SPI1, ENABLE)启用SPI。 5. 如果使用中断方式,还需要配置和初始化SPI中断。 请检查您的代码,确保以上步骤都已正确执行。如果问题仍然存在,请尝试使用其他SPI设备进行测试,以排除硬件故障的可能性。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1621 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1546 浏览 1 评论
980 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
686 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1599 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 03:05 , Processed in 0.605473 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号