stm32 硬件spi sck “干扰”导致的接收误码

运行环境

单片机:STM32F0 系列单片机

问题描述

  • 主从设备使用spi 通信。当时协议设计的时候,只有sck,mosi,miso 三个通信口。
  • 现在用硬件spi实现slave 功能。
  • 硬件spi的cpol,cpha,lsb(msb)等参数都配置正常。在sck 没“干扰信号“时,通信都正常。但是当sck出现“干扰信号”后,slave spi 收到的数据都不符合预期。
  • 这里所说的 sck“干扰信号”不是外部干扰,而是协议设计中,用来表示某种状态的信号。所以没办法通过硬件滤波的方法去掉。

问题分析

硬件spi 移位寄存器会在连续8个sck 上升沿信号(假设我这里配置上升沿接收数据)之后,结束一个字节的接收。如果前面“干扰信号”有两个上升沿信号,则对后面的正常数据传输,还需要6个sck 上升沿,就结束了一个byte的传输。

查看stm32f0 数据手册和标准库函数,没找到识别这种异常的方法。我觉得比较理想的判断方法是硬件层面提供对每次sck 上升沿的间隔的最大溢出时间,如果超过这个时间了,就认为sck 信号异常。

问题解决

利用SPI_I2S_FLAG_BSY这个状态位判断这种情况。从slave 端收到第一个sck 上升沿信号,到接收完第8个,SPI_I2S_FLAG_BSY 位一直有效。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32是一种嵌入式微控制器,拥有丰富的硬件外设支持,包括SPI(串行外设接口)。SPI是一种串行通信协议,常用于与外设(如传感器、存储器、显示屏等)进行通信。 在使用STM32驱动屏幕时,首先需要正确配置SPI外设。通过设置SPI的时钟分频系数、数据位顺序、传输模式(全双工或半双工)、主从角色等参数,可以满足特定屏幕的通信要求。SPI外设还支持多种工作模式,包括主机控制模式和DMA模式,可以根据实际需求选择适当的模式。 其次,需要使用适当的SPI库函数或驱动程序来实现屏幕的读写操作。通过调用库函数,可以向屏幕发送命令或数据,或者从屏幕读取状态或数据。SPI库函数通常包括SPI初始化、数据发送、数据接收等功能,可以方便地完成与屏幕的通信。 在编程时,需要了解屏幕的通信协议和指令集,以正确发送命令和数据。通常,屏幕的通信协议可以通过SPI进行传输,将命令或数据通过SPI发送到屏幕,并通过SPI接收屏幕的响应。 在使用硬件SPI驱动屏幕时,需要注意以下几点: 1. 确保SPI接口的引脚连接正确,包括时钟线(SCK)、主输入主输出(MISO)和主输出主输入(MOSI)。 2. 配置SPI外设的参数,包括时钟分频系数、数据位顺序等。 3. 初始化SPI外设,并根据需要设置主从角色、传输模式等。 4. 根据屏幕的通信协议和指令集,使用SPI库函数或驱动程序发送命令和数据。 5. 注意处理屏幕的响应和状态,以确保通信的正确性。 综上所述,使用STM32硬件SPI驱动屏幕需要正确配置SPI外设,使用适当的库函数实现通信操作,并了解屏幕的通信协议和指令集。通过合理编程,可以实现与屏幕的稳定、高效的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gdut_llkkyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值