SPI/I2S调试心得与经验总结
一、调试中首先检查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函数,完整函数如下:
/**
* @brief Configures the FIFO reception threshold forthe selected SPI.
* @param SPIx: where x can be 1 or 2 to select the SPIperipheral.
* @note SPI2 is not available for STM32F031 devices.
* @param SPI_RxFIFOThreshold: specifies the FIFOreception threshold.
* This parameter can be one of thefollowing values:
* @arg SPI_RxFIFOThreshold_HF: RXNEevent is generated if the FIFO
* levelis greater or equal to 1/2.
* @arg SPI_RxFIFOThreshold_QF: RXNEevent is generated if the FIFO
* levelis greater or equal to 1/4.
* @retval None
*/
voidSPI_RxFIFOThresholdConfig(SPI_TypeDef* SPIx, uint16_t SPI_RxFIFOThreshold)
{
/* Check the parameters */
assert_param(IS_SPI_ALL_PERIPH(SPIx));
assert_param(IS_SPI_RX_FIFO_THRESHOLD(SPI_RxFIFOThreshold));
/* Clear FRXTH bit */
SPIx->CR2 &=(uint16_t)~((uint16_t)SPI_CR2_FRXTH);
/* Set new FRXTH bit value*/
SPIx->CR2 |= SPI_RxFIFOThreshold;
}
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调试心得与经验总结相关推荐
- 记spi nor flash的调试心得
flash 调试心得 前言 调试目的 调试步骤 检查 驱动 flash操作 改写 复位 访问模式 tips 内核下相关 文件系统 nor和nand的区别 前言 在工作中或者在开发板上或多或少都会遇到n ...
- 阻容压降电路调试心得
阻容压降电路调试心得 阻容压降电通常用于LED灯电源,智能电表等对成本要求较高的产品中.先说一下LED电源,L线进来后,串联0.39微法油铁电容,后面是全桥整流,然后是滤波,电容容量越大,电路输出的电 ...
- NXP新出的Cortex-M7核单片机imx.rt1050调试心得
感谢琳的出现,陪我度过开心的每一天.开心的日子总是过得很快,离上次写博客已经快两个月了.历经一年半的阴云密布,终于迎来了久违的万丈阳光,希望未来的岁月带来的是更多美好甜蜜,开心认真过好每一天. 乘着周 ...
- AT91RM9200+pcf8563在linux2.6.20下的调试心得
这两天调试了AT91RM9200+pcf8563在linux2.6.20下的驱动,记录一下我的调试过程以及调试心得,呵呵 在linux2.6.20/drivers/rtc目录下面已经有了pc ...
- JavaScript学习笔记(十)——学习心得与经验小结
JavaScript学习笔记(十)--学习心得与经验小结 目前我先列好提纲,利用每晚和周末的闲暇时间,将逐步写完 ^_^ 转载于:https://www.cnblogs.com/mixer/archi ...
- 计算机组装各个配件的选用,组装电脑各个配件装机心得与经验
小编给大家之前带来了不少装机心得,但是没有那么详细到每个电脑配件的各个配件的心得与经验,让消费者购买组装电脑更放心,不会被那些奸商欺骗购买了一些翻新,二手货,更不会在装机的中途被那么无良商家换货的可能 ...
- 浅谈四轴PID调试心得
以下内容转自阿莫论坛,写得很详细,是调试大四轴的.小四轴调试也可参照着调. PID调试心得 本人不是自动化出身,也没有受过专业训练,都是自己摸索,在这里浅述一下自己的PID参数整定心得.所言之物皆由实 ...
- 调试心得plc做主站(客户端)
##调试心得plc做主站(客户端) 调试软件,西门子博图15,PLC采用1200,协议抓包采用Wireshark抓包工具 发协议工具采用网络助手,绿色是PLC给我发的请求数据,蓝色我发的报文格式, 1 ...
- 关于Visual Studio 2008调试的一些经验以及错误(0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突)
最近关于调试的经验教训 Visual Studio 2008调试的一些经验 常规的调试的思路 基础的调试按钮的含义以及一些快捷键 错误:0xXXXXXXXX处最可能的异常: 0xC0000005: 写 ...
最新文章
- 你哪来这么多事(六):职工信息查找
- Cent6.5 64位yum安装mysql5.5
- elasticsearch组件的安装启动,测试等(windows)
- 双绞线网线的连接方式
- Java虚拟机内存模型初步学习
- 理解LinkedHashMap
- 前端基础-html-段落标签
- Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)
- 为什么使用3msip2协议_知识卡片 | 链路状态路由协议OSPF凭什么会取代RIP?
- 服务器管理器添加php,为web服务器添加php的支持
- InnoSetup 如何获取安装程序的路径?
- 《Python源码剖析》.pdf
- 耳机及音响--煲机软件
- ArcGIS入门 (一)
- 计算机出现假桌面怎么解决办法,Win10系统下“AppHangXProcB1”导致桌面频繁假死如何解决?...
- Sentinel控制台实时监控空白
- 饭饭科普46 — 为什么出现区块链
- Flink standalone配置(血汗注意事项,哭唧唧)
- NOIP模拟题 通讯 强连通分量缩点 最小树形图--朱刘算法
- STM32互补PWM输出使能控制
热门文章
- Matlab画图小结(一)
- Python进阶_wxpy学习:聊天对象
- Anaconda prompt:Cache entry deserialization failed, entry ignored
- 程序基础:数据结构(郝斌讲解)(2)
- 5.14 图像频域处理
- [云炬创业基础笔记]第十一章创业计划书测试11
- [云炬python3玩转机器学习笔记] 3-11Matplotlib数据可视化基础
- py导入包异常跳出_Python运行Unittest作为包导入错误
- background-position—CSS设置背景图片的位置
- P4 详解各硬件部分