STM32F0 的SPI可能有Bug【悬赏问答】
在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,请问哪位能帮忙验证一下??
工程文件和代码在这里
RE:STM32F0 的SPI可能有Bug【悬赏问答】
我手里没有F0的板子,但是在F1和F4中我没有发现这个BUG...RE:STM32F0 的SPI可能有Bug【悬赏问答】
官方的固件库,在st不同系列的单片机上移植时要修改一定的配置,最重要的是单片机要选对;PRE:STM32F0 的SPI可能有Bug【悬赏问答】
芯片之间移植是需要修改寄存器的。甚至有时候硬件连接动了都要改程序,所以不推荐拿来就烧,得看一看啊。RE:STM32F0 的SPI可能有Bug【悬赏问答】
我跑了手上的F0的SPI,没有发现问题啊。LZ检查自己的代码吧RE:STM32F0 的SPI可能有Bug【悬赏问答】
更改驱动库,F10X的是通用的,但是和其他的不通用.RE:STM32F0 的SPI可能有Bug【悬赏问答】
IO 配置看是否正确, 然后加上SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
回复:STM32F0 的SPI可能有Bug【悬赏问答】
我遇到同样的问题,求解决方法。回复:STM32F0 的SPI可能有Bug【悬赏问答】
我也遇到同样的问题,愁刹人了。回复:STM32F0 的SPI可能有Bug【悬赏问答】
回复第 9 楼 于2014-09-03 08:19:08发表:检查SPI接收触发中断的大小设置成多少了?
页:
[1]
2