找回密码
 立即注册
查看: 88|回复: 2

STC32G12K128的SPI的接收频率和主频有关系吗?

[复制链接]
已绑定手机

11

主题

8

回帖

165

积分

注册会员

积分
165
发表于 2026-8-21 16:04:33 | 显示全部楼层 |阅读模式
我用两个STC32G12K128单主单从通信。
发现如果主机的SPI频率设定的比较高,则从机不能接受到正确数据,可能接收到误码,错码,数据相同的码。
现在能稳定的通信频率是主机24M,SPI四分频,从机35M。
如果我将主机频率改为24M,SPI二分配,从机35M,从机不能正确收码。
或者相同主从相同频率,SPI四分频,从机也不能正确收码。
主从都采用DMA发送数据。
回复

使用道具 举报 送花

50

主题

390

回帖

3020

积分

超级版主

积分
3020
发表于 2026-8-21 17:15:03 | 显示全部楼层

我已经获得了足够的信息来为您进行深入分析。这两个帖子正是您本人(或同一用户 peppe)发布的,内容与您的问题高度吻合。让我整理回答。


问题分析

首先,您描述的现象非常典型,而且在 STC 官方论坛上已经有与您完全相同的案例(TID 23785、TID 25354,正是您发布的帖子)。您遇到的情况本质是 SPI 从机接收时钟与主频的关系,以及读写时序(CPOL/CPHA)不匹配导致的。下面我为您系统分析。


一、核心结论:从机 SPI 的接收频率确实与主频相关

SPI 的 SCLK 由系统主频(SPI输入时钟)分频得到。无论是主机还是从机,SCLK 的产生都源于各自的系统时钟。而从机是靠主机发来的 SCLK 作为触发信号采样数据的,这就要求从机内部能以足够快的速度响应并处理外部 SCLK。

关键点:从机必须能以高于"外部传入SCLK"的速率工作

从机接收数据的逻辑采样和 FIFO/DMA 搬运,都需要从机内部时钟足够快来跟上外部 SCLK 的节奏。这就是为什么:

从机频率(35M)高于主机 SCLK 时才能稳定工作。

您的稳定配置分析

  • 主机 24M,SPI 四分频 → SCLK = 24M/4 = 6MHz
  • 从机 35M

此时主机发出的 SCLK(6MHz)远低于从机内部主频 35M,从机有充足的时间采样和搬运,所以稳定。

失败配置分析

配置 主机SCLK 从机主频 结果
主机24M + SPI二分频 SCLK=12MHz 35M ❌ 出错
主从同频(24M)+SPI四分频 SCLK=6MHz 从机24M ❌ 出错

第一行失败:SCLK 提高到 12MHz,接近了从机采样能力的边界,数据出错。
第二行失败:虽然 SCLK 只有 6MHz,但从机主频降到 24M,且主从同频导致时序竞争,出错。


二、更重要的可能原因:读写时序(CPOL/CPHA)与 SS 信号问题

从论坛同样案例(TID 23785)的回复来看,当主从频率相同时使用 USART 切换的 SPI 会出现"数据重复或数据错误",而从机频率高于主机后三路都正常。这验证了"从机主频需高于主机 SCLK"这一核心规律。

另一个关键问题是 SPI 的模式匹配(CPOL/CPHA)。您提到"数据相同的码"(重复),这往往与 CPOL/CPHA 相位不匹配SS 从机选择信号时序 有关。请务必检查:

  • 主机和从机的 SPCTLCPOL、CPHA 必须一致(都是 0 或都是 1)。
  • SS 信号在 DMA 传输中的 HOLD/SETUP 时间设置。

三、针对 DMA 的优化建议(官方已验证)

根据 STC32G 数据手册《30 DMA》和论坛官方工程师回复,要提高 SPI+DMA 的稳定性,可以:

  1. 开启高速 SPI 的 FIFO 模式 —— 官方明确回复:"开启高速SPI的FIFO模式使能,并减少高速SPI的HOLD时间与SETUP时间,能明显减少字节间间隔"。配置参考:

    P_SW2 |= 0x80;        // 使能 XFR
    HSSPI_CFG2 |= 0x30;   // 使能HSSPI,并开启FIFO模式
    
  2. 配置 HSSPI_CFG 的 SS_HLD 和 SS_SETUP,减少 SS 信号的 HOLD 和 SETUP 时间:

    HSSPI_CFG = 0x33;     // 减小SS保持/建立时间(论坛实测0x33~0x00间隔最短约570ns)
    
  3. 确保从机主频明显高于主机 SCLK —— 这是您已经验证可行的方向。建议保留从机 35M 主频,主机 SCLK 尽量控制在从机能稳定采样的范围内


四、推荐的稳定配置方案

结合您的实测和手册依据,建议您:

参数 主机 从机
系统主频 24M(或更高) 35M(保持高于SCLK)
SPI分频 四分频(SCLK=6MHz) 从机分频不影响接收
开启HSSPI+FIFO ✅ 开启 ✅ 开启
减小SS_HDLD/SETUP ✅ 0x33~0x00

若确实需要提高通信速率,最稳妥的办法是提高主机主频(例如 35M 甚至更高)同时保持四分频,使 SCLK 提升但又不让从机采样跟不上,并保持从机主频显著高于主机 SCLK。而不是在 24M 下把 SPI 分频降到二分频(那样会直接把 SCLK 顶到从机采样能力之上)。


五、小结

  1. 从机 SPI 接收频率实际上受"从机主频相对主机SCLK的余量"限制 —— 从机主频需足够高于外部 SCLK,才能稳定采样。
  2. 验证过的"主机24M/四分频 + 从机35M"是正确方向,因为 SCLK(6MHz) 远低于从机 35M。
  3. 二分频把 SCLK 提到 12MHz,逼近从机采样极限,故出错。
  4. 主从同频 24M 时,即使四分频,从机也只有 24M 的采样余量,加上同频竞争时序,同样不稳。
  5. 建议通过 HSSPI+FIFO + 减小 SS 时序 来优化,而不是盲目降低分频比。

如果您需要,我可以进一步帮您:

  1. 提供主机 + 从机完整的 SPI+DMA 配置参考代码(含 HSSPI、FIFO、SS 时序设置);
  2. 或帮您逐项核对您当前的 CPOL/CPHA、SS 配置是否有误。

请告诉我您的具体接线(是否共地、SCLK/MOSI/MISO/SS 引脚)和当前初始化代码,我可以更精准地帮您排查。


🔍 搜索 "STC32G12K128 SPI通信 主机频率 从机误码"

⏱️ 查找用时 12.1s | 总回答用时 24.2s

QQ:3398500488
微信号:18106296592(小刘)
回复

使用道具 举报 送花

83

主题

8216

回帖

1万

积分

超级版主

积分
17634
发表于 2026-8-22 10:27:42 | 显示全部楼层
双方用相同的主频,SPI是硬件的,不会有问题,从机一定可以接收到。但是如果使用SPI接收中断来读取数据,当发送速度高时,从机没法及时取走数据导致出错,不是SPI本身的问题。这种情况下,主机可以使用DMA发送,增加字节间的时间间隔,让从机有足够时间进入接收中断取走数据,SPI中断优先级为最高。

使用DMA接收不会有这个问题。
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-22 10:32 , Processed in 0.072461 second(s), 53 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表