在STM32F103上跑的好好的SPI Driver,弄到STM32F0 discovery上试试,发现不工作。 配置: ---------------------------------------------------------------------------- SPI_StructInit( &SPI_InitStructure ); 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_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI1, &SPI_InitStructure); 收发函数: --------------------------------------------------------------- uint8_t SPI_RW(uint8_t uchar) { /* Loop while DR register in not emplty */ while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); /* Send byte through the SPI1 peripheral */ SPI_SendData8(SPI1, uchar); /* Wait to receive a byte */ while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); /* Return the byte read from the SPI bus */ return SPI_ReceiveData8(SPI1); } 问题定位: --------------------------------------------- 1. 用逻辑分析仪抓输出,发现SCK和MOSI输出正常, SCK输出8个时钟脉冲 2. debug跟踪,发现程序死在 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); 这一句上,实在是没道理啊。 3. 前面再加上一条 SPI_SendData8(SPI1, uchar); 连续发送两个8bit数据, 发现程序能跑下去了,就是说SPI_I2S_FLAG_RXNE终于有效了!! 但是这样的hack实在是不能用啊。 我猜是个硬件bug,请问哪位能帮忙验证一下?? 工程文件和代码在这里 |
F0 WMCU.zip
下载50.52 KB, 下载次数: 90, 下载积分: ST金币 -1
【STM32F0开发日志/评测/笔记】+互补PWM波的产生
STM32F030 PB14和PB15无法输出PWM求助
【STM32F030探索套件】序列之五 外部中断
【STM32F0开发日志---二】+ucosii.2.92移植在STM32F030
上传个STM32F0+5110+内部温度传感器的菜鸟实例
【STM32F030探索套件使用问题】STM32F030 SPI方式驱动ST7565LCD失败
求一份STM32F051 I2C驱动LCD 12864的例程
STM32F0 M0 向结构体赋值进入HardFault异常
STM32F0 ADC-DMA方式采集2路数据时出现问题
STM32F030C8T6,TIM16定时慢很多问题?
RE:STM32F0 的SPI可能有Bug【悬赏问答】
RE:STM32F0 的SPI可能有Bug【悬赏问答】
RE:STM32F0 的SPI可能有Bug【悬赏问答】
RE:STM32F0 的SPI可能有Bug【悬赏问答】
RE:STM32F0 的SPI可能有Bug【悬赏问答】
RE:STM32F0 的SPI可能有Bug【悬赏问答】
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
回复:STM32F0 的SPI可能有Bug【悬赏问答】
回复:STM32F0 的SPI可能有Bug【悬赏问答】
回复:STM32F0 的SPI可能有Bug【悬赏问答】
检查SPI接收触发中断的大小设置成多少了?
就是死在 while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); 里了。
刚刚发现不是死在这里,而是以极慢的速度在运行,很慢~~~~~~如果楼主解决了,请帮忙只是一下啊,谢谢了
应该就行了。
否则是没开中断。不能进入中断。开中断就OK。