你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
blow-351559 提问时间:2012-7-8 16:54 /
在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

收藏 1 评论12 发布时间:2012-7-8 16:54

举报

12个回答
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不同系列的单片机上移植时要修改一定的配置,最重要的是单片机要选对
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【悬赏问答】

 我遇到同样的问题,求解决方法。
Today 回答时间: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接收触发中断的大小设置成多少了? 
adccadcc 回答时间:2015-1-7 09:26:18
学习一下
回答时间:2015-2-2 23:31:24
不知道楼主解决了没有啊?我已经被这个问题搞了几天了,查了大量的资料,,都没看到说明啊~~~
就是死在  while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);   里了。
刚刚发现不是死在这里,而是以极慢的速度在运行,很慢~~~~~~如果楼主解决了,请帮忙只是一下啊,谢谢了
HenryChen 回答时间:2016-11-10 12:11:51
加SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
应该就行了。
否则是没开中断。不能进入中断。开中断就OK。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版