12184|2

327

帖子

1

TA的资源

纯净的硅(初级)

楼主
 

关于STM32的SPI只发送模式SPI_Direction_1Line_Tx [复制链接]

最近做一款TFT屏SPI驱动,由于是单向写数据没有用到MISO脚,因此SPI配置为SPI_Direction_1Line_Tx模式。但调试的时候发现屏始终未能正常显示,分析SPI波形后发现CS信号总是在数据未传输完成前被置高了(CS低电平有效)。后面参照了别人的例程向DR写数据后不再等待判断TXE位置1,而是等待BSY位为零。结果也还是未能解决CS被提前置高的问题,网上问了一圈之后依然没有得到想要的答案。最后仔细研读了一遍STM32F103的技术手册才发现了问题的症结所在:原来在向DR写数据后SPI并不会立即启动发送此时BSY仍然为0,TXE为0,延迟2个APB时钟周期后发送启动TXE变为1,BSY变为1,等到数据发送完成BSY再变为0。因此关于我的问题解决办法是写DR后先等待TXE为1以确认发送动作已启动,后面再等待BSY为0即发送结束可以置高CS信号。如此问题解决。另外附上数据手册上的原文:

“注: 1.  对于不连续的传输,在写入 SPI_DR 寄存器的操作与设置 BSY 位之间有 2 个 APB 时钟周期的延
迟,因此在只发送模式下,写入最后一个数据后,最好先等待 TXE=1 ,然后再等待 BSY=0 。
2 . 只发送模式下,在传输 2 个数据之后,由于不会读出接收到的数据, SPI_SR 寄存器中的 OVR 位
会变为 ’1’ 。 ( 译注:软件不必理会这个 OVR 标志位 )”


详见数据手册23.3.5节,第466页。
此帖出自stm32/stm8论坛

最新回复

不错,另外问下楼主这种情况中断怎么弄?  详情 回复 发表于 2018-11-9 11:49
点赞(1) 关注(2)
个人签名模电临时工
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
不错,另外问下楼主这种情况中断怎么弄?
此帖出自stm32/stm8论坛

点评

中断好像还真没办法,因为中断只有TXE中断,如在TXE中断函数中等待BSY为0似乎不太符合我等的价值观。不过可以考虑启用硬件NSS模式,让硬件来管理片选信号,这个方式我没有尝试过在这里只是提供一个可能的解决方案。  详情 回复 发表于 2018-11-9 14:41
 
 

回复

327

帖子

1

TA的资源

纯净的硅(初级)

板凳
 
huo_hu 发表于 2018-11-9 11:49
不错,另外问下楼主这种情况中断怎么弄?

中断好像还真没办法,因为中断只有TXE中断,如在TXE中断函数中等待BSY为0似乎不太符合我等的价值观。不过可以考虑启用硬件NSS模式,让硬件来管理片选信号,这个方式我没有尝试过在这里只是提供一个可能的解决方案。
此帖出自stm32/stm8论坛
 
个人签名模电临时工
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表