blow-351559 发表于 2012-7-8 16:54:36

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,请问哪位能帮忙验证一下??

工程文件和代码在这里

yjwpm 发表于 2012-7-13 12:10:50

RE:STM32F0 的SPI可能有Bug【悬赏问答】

我手里没有F0的板子,但是在F1和F4中我没有发现这个BUG...

cx032302 发表于 2012-7-13 13:02:12

RE:STM32F0 的SPI可能有Bug【悬赏问答】

官方的固件库,在st不同系列的单片机上移植时要修改一定的配置,最重要的是单片机要选对;P

starcool 发表于 2012-7-13 15:31:05

RE:STM32F0 的SPI可能有Bug【悬赏问答】

芯片之间移植是需要修改寄存器的。甚至有时候硬件连接动了都要改程序,所以不推荐拿来就烧,得看一看啊。

xiaodc88 发表于 2012-7-13 15:45:15

RE:STM32F0 的SPI可能有Bug【悬赏问答】

我跑了手上的F0的SPI,没有发现问题啊。LZ检查自己的代码吧

发表于 2012-7-13 15:50:22

RE:STM32F0 的SPI可能有Bug【悬赏问答】

更改驱动库,F10X的是通用的,但是和其他的不通用.

paul_vt 发表于 2014-1-23 16:26:03

RE:STM32F0 的SPI可能有Bug【悬赏问答】

IO 配置看是否正确, 然后加上
SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);

小鹏 发表于 2014-6-12 10:19:11

回复:STM32F0 的SPI可能有Bug【悬赏问答】

 我遇到同样的问题,求解决方法。

yang96019 发表于 2014-9-3 08:19:08

回复:STM32F0 的SPI可能有Bug【悬赏问答】

我也遇到同样的问题,愁刹人了。

小胖家的小二 发表于 2014-9-3 15:36:47

回复:STM32F0 的SPI可能有Bug【悬赏问答】

回复第 9 楼 于2014-09-03 08:19:08发表:
检查SPI接收触发中断的大小设置成多少了? 
页: [1] 2
查看完整版本: STM32F0 的SPI可能有Bug【悬赏问答】