历史上的今天
今天是:2025年04月11日(星期五)
2019年04月11日 | STM32的SPI使用注意
2019-04-11 来源:eefocus
今天写OLED屏SSD1309的驱动,用的是SPI2。屏只接收数据,不给单片机单片机发送数据,所以在硬件上连接的只有CS、SCK、MOSI,没有用到单片机的MISO引脚,片选引脚设置为软件管理模式,SPI的方向设置为双向全双工。
对IO的时钟、SPI2等初始化完成后将程序下载到片子上发现屏没有任何反应,如果在调用发送函数之前判断发送的标志,第一次发送可以成功,第二个数据就会死在这里,debug发现数据第一次发送之后,TXE标志不会置1,即发送缓冲区一直没有清空,这是什么情况???感觉很奇怪,仔细看状态寄存器发现,RXE标志置1了,即接收到数据了。
数据手册上对错误标志位部分的说明:上溢标志位,如果还没有读出前一个接收到的数据时,又接收新的数据即产生上溢,上溢标志置1,这时接收缓存的内容不会刷新为从发送设备送来的数据。对寄存器SPI_DR的读操作返回最后一个接收到的数据,其他所有在上溢后由设备发送的16位数据都会丢失。
虽然我没有用到接收引脚接收数据,因为设置的是全双工,所以在发送数据产生时钟信号的时候同时会读取接收引脚上的电平保存到缓冲区,如果不对接收进行读取操作将会产生溢出,将使以后发送出的数据全部无效。所以即使只用接收或者发送也需要对接收标志进行判断和后续操作。
二、SPI 驱动JF24D
JF24D原来是用51单片机使用IO模拟SPI的方式驱动,现在改为使用STM32的SPI1来驱动。注意根据模式手册修改SPI 的时钟频率,时钟、片选信号在空闲时的极性。
片选信号没有使用SPI外设的片选,用的是手动置低和拉高。用SPI驱动后发现一个问题:2.4G的发送信号有时候会丢。我尝试在每次片选拉低或者拉高之前增加5ms的延时,现在试了试感觉信号不丢了,时序很重要。
再次测试,5ms的延时有点长,对发送数据比较可靠,但是如果差不多同时来几个信号,会造成信号的丢失,因为射频速度比较快,发射完成也就在零点几毫秒之内,所以延时不宜太长,会造成接收数据的丢失,将片选信号拉低后的延时时间改为了20us,目前测试情况发送和接收都还可以。
今天调的SPI驱动JF24D发现一个问题,发送字节数小于6的数据包会丢失,但是51单片机模拟SPI发送4字节的包就不丢失。
下一篇:stm32 io模拟spi通信
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:39 编辑 在电子系统设计中,为了少走弯路和节省时间,应充分考虑并满足抗干扰性的要求,避免在设计完成后再去进行抗干扰的补救措施。形成干扰的基本要素有三个: (1)干扰源,指产生干扰的元件、设备或信 ...… 查看全部问答> |
|
美味汉堡电话 个很可爱的汉堡包电话机,从中间打开就有按键,可做分机,但不能挂在墙上,可放在床头,客厅或其他地方,即是一件漂亮的装饰品,又很实用。爱吃汉堡包的朋友可以一饱眼福啦! 王老吉电话 逼真的易拉罐装王老吉,不经意间总会有人拿 ...… 查看全部问答> |
|
现在我遇到一个难题,问题在于客户需要在我的项目中加韩语,方案的接口给出了定义,但需要先将一个turetype font(.ttf)文件使用他们给出的bin2c转成.c文件。 现在问题是如果我直接拿下载回来的turetype font(.ttf)字库的话,那太大了,flash不够, ...… 查看全部问答> |
|
不知道如何将320×240,8位的bmp图片load进SRAM,我想做一些图像处理的东西,我知道有可以将bmp转换成ccs数据格式,然后用load data的方法,可是研究了很久没有找到转换的方法… 查看全部问答> |
|
基于Hercules TMS570的1500W三相逆变并网系统 设计思路:本设计中主要包含主控电路部分、保护电路、辅助电源部分和相关人机界面设计。主控电路部分,利用Hercules TMS570本身自带的八路SPWM中的一路和一个ADC转换 功能实时监测、控制DC-DC升压系统的输出状态,利用本身芯片本身自带的模拟比较 ...… 查看全部问答> |




