一、调试中首先检查SPI使能总线是否正确;

检查时序(现有时钟,后片选拉低),接收时必须有发送才能有时钟

二、对照flash芯片手册查看SPI时序

三、检查状态位

1.查询标志位:

1)while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//检查发送是否完成

2)while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//检查接受标志位

SPI运行时有一定几率程序会卡死在检查接受标志位处RXNE,论坛上的解决方案是将检查接受标志位改为检查忙状态,即:

while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY)==SET);

此方案可行。

其根本原因是因为STM32F105的SPI增加了FIFO端口,使传输数据有了缓冲区。可以在SPI初始化是增加语句SPI_RxFIFOThresholdConfig(SPI1,SPI_RxFIFOThreshold_QF);,将应答数据位设置为8位。

有些库函数没有SPI_RxFIFOThresholdConfig函数,完整函数如下:

  1. /**

  2. * @brief Configures the FIFO reception threshold forthe selected SPI.

  3. * @param SPIx: where x can be 1 or 2 to select the SPIperipheral.

  4. * @note SPI2 is not available for STM32F031 devices.

  5. * @param SPI_RxFIFOThreshold: specifies the FIFOreception threshold.

  6. * This parameter can be one of thefollowing values:

  7. * @arg SPI_RxFIFOThreshold_HF: RXNEevent is generated if the FIFO

  8. * levelis greater or equal to 1/2.

  9. * @arg SPI_RxFIFOThreshold_QF: RXNEevent is generated if the FIFO

  10. * levelis greater or equal to 1/4.

  11. * @retval None

  12. */

  13. voidSPI_RxFIFOThresholdConfig(SPI_TypeDef* SPIx, uint16_t SPI_RxFIFOThreshold)

  14. {

  15. /* Check the parameters */

  16. assert_param(IS_SPI_ALL_PERIPH(SPIx));

  17. assert_param(IS_SPI_RX_FIFO_THRESHOLD(SPI_RxFIFOThreshold));

  18. /* Clear FRXTH bit */

  19. SPIx->CR2 &=(uint16_t)~((uint16_t)SPI_CR2_FRXTH);

  20. /* Set new FRXTH bit value*/

  21. SPIx->CR2 |= SPI_RxFIFOThreshold;

  22. }

PS:如果RXNE仍然反复置位,可参考STM32F030与STM32F411的SPI调试经验–兼RXNE不能置位的原因一文关闭SPI寄存器的监控窗口或者修正硬件。

2. STM32105芯片的SPI允许的最大fsck为18MHz,设置分频系数时注意不要超过这个数。

3.I2S的输出频率

音频的采样频率可以是96kHz、48kHz、44.1kHz、32kHz、22.05kHz、16kHz、11.025kHz或者8kHz(或任何此范围内的数值)。为了获得需要的频率,需按照以下公式设置线性分频器:

1)当需要生成主时钟时(寄存器SPI_I2SPR的MCKOE位为1):

①声道的帧长为16位,Fs = I2SxCLK/ [(16*2) * ((2*I2SDIV) + ODD)*8]

②声道的帧长为32位,Fs =I2SxCLK / [(32*2) * ((2*I2SDIV) + ODD)*4]

2)当关闭主时钟时(MCKOE位为0):

①声道的帧长为16位,Fs =I2SxCLK / [(16*2) * ((2*I2SDIV) + ODD)]

②声道的帧长为32位,Fs =I2SxCLK / [(32*2) * ((2*I2SDIV) + ODD)]

I2SDIV、ODD由寄存器SPI-I2SPR的第[7:0]位和第8位设置。

3.使用SPI,I2S传送数据时,注意时序,否则数据可能会变成一段一段的。

4.在调试过程中,更改数据(右移一位,相当于音量减半)再次播放则变成了杂音,其原因为原数据设置成了无符号数,实际上是有正负之分的,单纯的右移打乱了数据。

SPI/I2S调试心得与经验总结相关推荐

  1. 记spi nor flash的调试心得

    flash 调试心得 前言 调试目的 调试步骤 检查 驱动 flash操作 改写 复位 访问模式 tips 内核下相关 文件系统 nor和nand的区别 前言 在工作中或者在开发板上或多或少都会遇到n ...

  2. 阻容压降电路调试心得

    阻容压降电路调试心得 阻容压降电通常用于LED灯电源,智能电表等对成本要求较高的产品中.先说一下LED电源,L线进来后,串联0.39微法油铁电容,后面是全桥整流,然后是滤波,电容容量越大,电路输出的电 ...

  3. NXP新出的Cortex-M7核单片机imx.rt1050调试心得

    感谢琳的出现,陪我度过开心的每一天.开心的日子总是过得很快,离上次写博客已经快两个月了.历经一年半的阴云密布,终于迎来了久违的万丈阳光,希望未来的岁月带来的是更多美好甜蜜,开心认真过好每一天. 乘着周 ...

  4. AT91RM9200+pcf8563在linux2.6.20下的调试心得

    这两天调试了AT91RM9200+pcf8563在linux2.6.20下的驱动,记录一下我的调试过程以及调试心得,呵呵      在linux2.6.20/drivers/rtc目录下面已经有了pc ...

  5. JavaScript学习笔记(十)——学习心得与经验小结

    JavaScript学习笔记(十)--学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/mixer/archi ...

  6. 计算机组装各个配件的选用,组装电脑各个配件装机心得与经验

    小编给大家之前带来了不少装机心得,但是没有那么详细到每个电脑配件的各个配件的心得与经验,让消费者购买组装电脑更放心,不会被那些奸商欺骗购买了一些翻新,二手货,更不会在装机的中途被那么无良商家换货的可能 ...

  7. 浅谈四轴PID调试心得

    以下内容转自阿莫论坛,写得很详细,是调试大四轴的.小四轴调试也可参照着调. PID调试心得 本人不是自动化出身,也没有受过专业训练,都是自己摸索,在这里浅述一下自己的PID参数整定心得.所言之物皆由实 ...

  8. 调试心得plc做主站(客户端)

    ##调试心得plc做主站(客户端) 调试软件,西门子博图15,PLC采用1200,协议抓包采用Wireshark抓包工具 发协议工具采用网络助手,绿色是PLC给我发的请求数据,蓝色我发的报文格式, 1 ...

  9. 关于Visual Studio 2008调试的一些经验以及错误(0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突)

    最近关于调试的经验教训 Visual Studio 2008调试的一些经验 常规的调试的思路 基础的调试按钮的含义以及一些快捷键 错误:0xXXXXXXXX处最可能的异常: 0xC0000005: 写 ...

最新文章

  1. 你哪来这么多事(六):职工信息查找
  2. Cent6.5 64位yum安装mysql5.5
  3. elasticsearch组件的安装启动,测试等(windows)
  4. 双绞线网线的连接方式
  5. Java虚拟机内存模型初步学习
  6. 理解LinkedHashMap
  7. 前端基础-html-段落标签
  8. Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)
  9. 为什么使用3msip2协议_知识卡片 | 链路状态路由协议OSPF凭什么会取代RIP?
  10. 服务器管理器添加php,为web服务器添加php的支持
  11. InnoSetup 如何获取安装程序的路径?
  12. 《Python源码剖析》.pdf
  13. 耳机及音响--煲机软件
  14. ArcGIS入门 (一)
  15. 计算机出现假桌面怎么解决办法,Win10系统下“AppHangXProcB1”导致桌面频繁假死如何解决?...
  16. Sentinel控制台实时监控空白
  17. 饭饭科普46 — 为什么出现区块链
  18. Flink standalone配置(血汗注意事项,哭唧唧)
  19. NOIP模拟题 通讯 强连通分量缩点 最小树形图--朱刘算法
  20. STM32互补PWM输出使能控制

热门文章

  1. Matlab画图小结(一)
  2. Python进阶_wxpy学习:聊天对象
  3. Anaconda prompt:Cache entry deserialization failed, entry ignored
  4. 程序基础:数据结构(郝斌讲解)(2)
  5. 5.14 图像频域处理
  6. [云炬创业基础笔记]第十一章创业计划书测试11
  7. [云炬python3玩转机器学习笔记] 3-11Matplotlib数据可视化基础
  8. py导入包异常跳出_Python运行Unittest作为包导入错误
  9. background-position—CSS设置背景图片的位置
  10. P4 详解各硬件部分