找回密码
 立即注册
查看: 939|回复: 10

STC32F技术手册笔误 20240202版本|有关超时寄存器

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-3-3 16:05:03 | 显示全部楼层 |阅读模式
本帖最后由 王昱顺 于 2024-3-5 10:45 编辑

备注:32G手册也是有这个问题的
第589页
截图202403031603252568.jpg


I2C部分也有同样的错误
第615页
截图202403031604374590.jpg

截图202403031604586246.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-3-3 16:07:03 | 显示全部楼层
本帖最后由 王昱顺 于 2024-3-3 16:37 编辑

顺便问一下这个
截图202403031606088091.jpg

测试多种方法都无法进入超时中断,直接判断标志位也没发现超时中断标志位置1.

请问有没有关于SPI超时中断的测试程序学习一下?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2025-05-02 09:38:13

109

主题

1900

回帖

5214

积分

论坛元老

积分
5214
发表于 2024-3-3 17:52:57 | 显示全部楼层
楼主很细心,发现笔误了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-3-3 18:57:07 | 显示全部楼层
王*** 发表于 2024-3-3 16:07
顺便问一下这个

附件是STC32F做SPI从机使能超时中断的例子,供参考:

STC32F-SPI从机超时中断.zip (16.82 KB, 下载次数: 94)

点评

你好,经过测试发现了一些小问题,芯片是STC32F12K54 固件版本号7.4.6U [attachimg]36984[/attachimg] 这部分是SPI的初始化代码,现在出现的问题是。如果上电后不做任何动作,正常开始发数据以后就不会进入超时中  详情 回复 发表于 2024-3-5 08:33
好的非常感谢  详情 回复 发表于 2024-3-3 19:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-3-3 19:12:37 | 显示全部楼层
乘风*** 发表于 2024-3-3 18:57
附件是STC32F做SPI从机使能超时中断的例子,供参考:

好的非常感谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-3-5 08:33:21 | 显示全部楼层
乘风*** 发表于 2024-3-3 18:57
附件是STC32F做SPI从机使能超时中断的例子,供参考:

你好,经过测试发现了一些小问题,芯片是STC32F12K54 固件版本号7.4.6U

截图202403050825364717.jpg

这部分是SPI的初始化代码,现在出现的问题是。如果上电后不做任何动作,正常开始发数据以后就不会进入超时中断
如果拔掉SCLK信号线,则可以进入超时中断,重新插回去如果时机得当,则会开始正常的触发超时中断。


设置的是CPLO=0;CPHA=1;SCLK不动作为低电平。看示波器里面的数据应该是没有问题的。
为什么超时计时不生效呢?
  1. <font size="5">void SPI_Init(void)
  2. {
  3.     P_SW2 |= 0x80;                             // 扩展寄存器(XFR)访问使能
  4.     SPSTAT = 0xc0;                             // 清除标志位
  5.     SPCTL = 0xe7;                              // 忽略SS引脚功能,使能SPI功能,LSB优先,主机模式,下降沿采样数据,速率/4=52/4=13Mhz
  6.     ESPI = 1;                                  // 关闭SPI中断功能
  7.     SPDAT = 0xaa;                              // 设置回复的第一个字节
  8.     DMA_SPI_STA = 0x00;                        // 清零DMA标志位
  9.     DMA_SPI_CFG2 = 0x03;                       // 不自动控制SS,SS引脚为P3.5
  10.     DMA_SPI_CFG = 0xab;                        // 使能SPI_DMA中断,禁止发送,允许接收。中断优先级3,总线访问优先3
  11.     DMA_SPI_CR = 0x81;                         // 允许SPI_DMA功能,开始操作前清空FIFO
  12.     DMA_SPI_RXAH = (u8)((u16)&show_test >> 8); // SPI发送数据存储地址
  13.     DMA_SPI_RXAL = (u8)((u16)&show_test);
  14.     DMA_SPI_AMT = 0xff;
  15.     DMA_SPI_AMTH = 0xff; // 拉满接收大小
  16.     HSSPI_CFG2 |= 0x28;  // 启动高速SPI模式,打开FIFO
  17.     SPITOCR = 0x00;      // 关闭超时中断
  18.     SPITOTH = 0x13;
  19.     SPITOTL = 0x88;
  20.     IAP_TPS = 52;
  21.     HSCLKDIV = 0x00;        //高速时钟1分频,默认2分频
  22. }</font>
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-3-5 09:34:36 | 显示全部楼层
王*** 发表于 2024-3-5 08:33
你好,经过测试发现了一些小问题,芯片是STC32F12K54 固件版本号7.4.6U

现有超时中断产生条件有2个:
1. 收满一个字节(8位数据)
2. 超时时间内没有收到新的数据
判断一下这两个条件能不能都满足,建议先直接使用前面提供的例程测试,正常后再进行修改或移植。

点评

谢谢,已经成功实现超时功能了。 问题存在是刚刚启动SPI设备的时候会有随机的几个脉冲。会造成SPI数据错位。 解决办法是初始化的时候通过预置SPI引脚电平为0后,打开普通上拉模式,强制给各个端口拉低到0。此时杂乱  详情 回复 发表于 2024-3-5 10:43
那有可能是数据漏了一位(整体偏移)导致的等待8位数据收满卡死。 我再仔细检查一下数据的波形,谢谢。 程序就是使用的例程进行移植  详情 回复 发表于 2024-3-5 10:25
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:503
  • 最近打卡:2025-05-02 08:06:55
已绑定手机

1

主题

834

回帖

1447

积分

金牌会员

积分
1447
发表于 2024-3-5 09:53:08 | 显示全部楼层
看的太仔细了,赞
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-3-5 10:25:16 | 显示全部楼层
乘风*** 发表于 2024-3-5 09:34
现有超时中断产生条件有2个:
1. 收满一个字节(8位数据)
2. 超时时间内没有收到新的数据

那有可能是数据漏了一位(整体偏移)导致的等待8位数据收满卡死。
我再仔细检查一下数据的波形,谢谢。

程序就是使用的例程进行移植
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-02 21:17:31
已绑定手机
已实名认证

110

主题

2223

回帖

5464

积分

版主

积分
5464
发表于 2024-3-5 10:43:10 | 显示全部楼层
本帖最后由 王昱顺 于 2024-3-5 10:44 编辑
乘风*** 发表于 2024-3-5 09:34
现有超时中断产生条件有2个:
1. 收满一个字节(8位数据)
2. 超时时间内没有收到新的数据

谢谢,已经成功实现超时功能了。

问题存在是刚刚启动SPI设备的时候会有随机的几个脉冲。会造成SPI数据错位。


解决办法是初始化的时候通过预置SPI引脚电平为0后,打开普通上拉模式,强制给各个端口拉低到0。此时杂乱数据没法被读入。等通过SCCB配置完设备,启动了SPI_DMA开始读取后,再恢复SPI引脚为高阻模式,开始读取数据。此时的数据就没有错位了,而且超时功能也可以正常使用


建议把这些判断条件也写入到手册里面的超时部分,这样方便出现问题的时候进行排查
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:58 , Processed in 0.165362 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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