在线时间0 小时
UID351559
ST金币0
蝴蝶豆0
注册时间2012-1-5
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
在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,请问哪位能帮忙验证一下??
工程文件和代码在这里 |
-
-
50.52 KB, 下载次数: 90, 下载积分: ST金币 -1
|