搜索
bottom↓
回复: 22

STM32F030的SPI使用经验和疑惑

[复制链接]

出0入0汤圆

发表于 2015-2-3 21:47:23 | 显示全部楼层 |阅读模式
本帖最后由 dwj0 于 2015-2-3 21:51 编辑

最近使用STM32F030F4制作了一个产品,其中使用SPI驱动无线芯片CC1120,初始化完SPI后,却发现对CC1120的初始化操作总是不能成功
SPI的写数据函数是照搬STM32F103C8的,如下:

  1. static u8 SpiWriteRead(u8 Data)
  2. {
  3.         while (!(SPI->SR&SPI_SR_TXE));
  4.         SPI->DR=Data;
  5.         while (!(SPI->SR&SPI_SR_RXNE));
  6.         return SPI->DR;
  7. }
复制代码

但把这个函数用软件模拟SPI时序又可以成功对CC1120初始化,调试半天无果,百思不得其解,只能求助于网络。
用度娘在换了N多关键词后, 终于在一个论坛中找到一个帖子,说的是STM32F0XX对SPI操作进行了优化,当使用 SPI->DR=Data; 发送数据时,其发送的是16位数据,发送8位数据时, 要使用        *(uint8_t*)&SPI->DR=Data;
修改之,发现8位数据发送完后,程序在        while (!(SPI->SR&SPI_SR_RXNE)); 卡死。
单步调试发现发送数据后,RXNE位并不能置位,于是用 while ((SPI->SR&SPI_SR_BSY)); 代替。
成功。
最后函数如下:

  1. static u8 SpiWriteRead(u8 Data)
  2. {
  3.         while (!(SPI->SR&SPI_SR_TXE));
  4.         *(uint8_t*)&SPI->DR=Data;
  5.         while ((SPI->SR&SPI_SR_BSY));       
  6.         return *(uint8_t*)&SPI->DR;
  7. }
复制代码


下班回家,写了个小函数,用SPI不停的发送0x55,接上示波器查看波形
主函数里不停调用 SpiWrite(0x55); 不开任何中断。
16位数据发送函数如下:

  1. static void SpiWrite(u8 Data)
  2. {
  3.         while (!(SPI->SR&SPI_SR_TXE));
  4.         SPI->DR=Data;
  5. }
复制代码

波形如下,确实发送了16个SCK时钟


8位数据发送函数如下:

  1. static void SpiWrite(u8 Data)
  2. {
  3.         while (!(SPI->SR&SPI_SR_TXE));
  4.         *(uint8_t*)&SPI->DR=Data;
  5. }
复制代码

波形如下,只发送了8个SCK时钟,但奇怪发送24个SCK时钟后,会小歇一下



但问题又出来了,当我把SPI初始化代码中的SPI预分频改为SPI_BaudRatePrescaler_2时,波形变成下面这样:

而其它的预分频没有这个问题。这样发送一个字节数据,歇一个字节数据的时间,又百思不得其解了。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-2-3 22:43:20 | 显示全部楼层
楼主的开发环境是IAR还是MDK?,在IAR下有类似的情况

出0入4汤圆

发表于 2015-2-3 23:06:07 | 显示全部楼层
也用到了F0的SPI,还没注意到这块,备用

出0入0汤圆

 楼主| 发表于 2015-2-4 08:18:21 | 显示全部楼层
johnlj 发表于 2015-2-3 22:43
楼主的开发环境是IAR还是MDK?,在IAR下有类似的情况

用了 IAR

出0入0汤圆

发表于 2015-2-5 14:45:52 | 显示全部楼层
好像F030的SPI口与STM32F103的不一样

出0入0汤圆

发表于 2015-2-5 14:47:28 | 显示全部楼层
据说STM32F030有问题,不如f103稳定,不知道怎么样?

出0入0汤圆

发表于 2015-5-14 16:34:25 | 显示全部楼层
本帖最后由 rossih 于 2015-5-14 19:13 编辑

busy标志提醒了我!我一直在查询RXNE标志

出0入4汤圆

发表于 2016-1-8 12:17:11 | 显示全部楼层
谢谢楼主提醒,用示波器看了半天不知何故,LZ的方法一下子就解开。
我用cube配置MCU到36M,spi是不能用2分频的,最大好像是4分频。

你的停顿可能跟软件有关,波形从方波变正弦波是上升和下降的时间相对于整个周期太长了。

出50入0汤圆

发表于 2016-1-8 13:00:31 | 显示全部楼层
标记下,暂时不用F030

出0入0汤圆

发表于 2016-1-10 14:39:18 | 显示全部楼层
在用,关注这个问题~

出0入42汤圆

发表于 2016-1-10 15:50:13 | 显示全部楼层
gmyu 发表于 2016-1-8 12:17
谢谢楼主提醒,用示波器看了半天不知何故,LZ的方法一下子就解开。
我用cube配置MCU到36M,spi是不能用2分 ...

正解  F0系列很稳定啊  做的一批板子 都量产了

出0入0汤圆

发表于 2016-2-16 22:36:28 | 显示全部楼层
gmyu 发表于 2016-1-8 12:17
谢谢楼主提醒,用示波器看了半天不知何故,LZ的方法一下子就解开。
我用cube配置MCU到36M,spi是不能用2分 ...

你好!剛好也在用 F0 系列的 SPI 通訊介面,
也遇到此問題,
只是想請教 "LZ的方法一下子就解开",
可否告知 "LZ的方法" 是哪一方法?
或哪裡有資料可參閱?
非常感謝!

出0入0汤圆

发表于 2016-2-17 00:47:16 | 显示全部楼层
用F030驱动RC522,也就是那个SPI->DR的强制转换那里稍稍卡顿了一下,没碰到其他问题。不过手头没有示波器,还真不知道实际的波形是什么样的

出0入0汤圆

发表于 2016-2-17 09:08:58 | 显示全部楼层
f0和f1的CR1 一模一样,其中bit11是data frame format, 清0是8位模式,设1是16位模式。

看看库文件吧。说不定是库文件出问题。

出0入0汤圆

发表于 2016-2-17 09:11:12 | 显示全部楼层
二分频出现间断的原因很简单,是程序太慢,赶不上,用DMA就可以解决。。

出0入4汤圆

发表于 2016-2-17 10:58:48 | 显示全部楼层
sam.jheng 发表于 2016-2-16 22:36
你好!剛好也在用 F0 系列的 SPI 通訊介面,
也遇到此問題,
只是想請教 "LZ的方法一下子就解开",

*(uint8_t*)&SPI->DR=Data;
强制转为8位发生,我记得F103好像还要在后面跟一句读RX忙标志的语句。

出0入0汤圆

发表于 2017-7-1 17:17:26 | 显示全部楼层
靠,中招了,调了半天才发现是发送了16位,谢谢这位兄弟!

出0入0汤圆

发表于 2017-7-2 03:07:34 | 显示全部楼层
STM32 SPI 强制位宽访问的不止这一款,具体不太记得了。

出0入0汤圆

发表于 2017-10-13 12:01:37 | 显示全部楼层
还有这回事,谢谢楼主!

出0入0汤圆

发表于 2017-10-14 02:41:29 | 显示全部楼层
关注,也有在用f0

出0入0汤圆

发表于 2017-10-14 11:35:31 | 显示全部楼层
用官方例程一搬过去就可以。很稳定

出0入475汤圆

发表于 2017-10-14 11:46:33 来自手机 | 显示全部楼层
使用F303的spi,DMA方式输出,第一bit的宽度总会宽一点点,然后输出完了最后MOSI脚会出现高电平,即使最后输出的一位是0,输出完了后也会出现高电平

出0入475汤圆

发表于 2017-10-14 11:47:30 来自手机 | 显示全部楼层
有没有谁遇到这个问题呢,给指点指点
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 02:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表