发新帖本帖赏金 20.00元(功能说明)我要提问
返回列表
打印
[AT32F403/403A]

使用普通GPIO实现模拟SPI功能

[复制链接]
楼主: dffzh
手机看帖
扫描二维码
随时随地手机跟帖
21
在传输数据之前,确保片选信号(CS)处于使能状态。
在传输完成后,释放片选信号。

使用特权

评论回复
22
ccook11| | 2025-4-6 08:00 | 只看该作者
减少信号线长度,避免与高频信号并行。

使用特权

评论回复
23
dffzh|  楼主 | 2025-4-6 16:00 | 只看该作者
ccook11 发表于 2025-4-6 08:00
减少信号线长度,避免与高频信号并行。

学习了

使用特权

评论回复
24
dffzh|  楼主 | 2025-4-6 16:01 | 只看该作者
mikewalpole 发表于 2025-4-5 22:13
在传输数据之前,确保片选信号(CS)处于使能状态。
在传输完成后,释放片选信号。 ...

是的,片选信号低电平active

使用特权

评论回复
25
bartonalfred| | 2025-4-8 09:30 | 只看该作者
使用GPIO模拟SPI功能可能会受到CPU速度和软件延时精度的限制,导致传输速率较低。

使用特权

评论回复
26
dffzh|  楼主 | 2025-4-8 11:04 | 只看该作者
bartonalfred 发表于 2025-4-8 09:30
使用GPIO模拟SPI功能可能会受到CPU速度和软件延时精度的限制,导致传输速率较低。 ...

确实如此, GPIO的电平翻转速度也会影响,一般1MHZ速率以内的应用基本没问题

使用特权

评论回复
27
pixhw| | 2025-4-8 12:35 | 只看该作者
如果某个GPIO被错误配置为输入或输出,可能会导致通信失败。

使用特权

评论回复
28
dffzh|  楼主 | 2025-4-8 13:10 | 只看该作者
pixhw 发表于 2025-4-8 12:35
如果某个GPIO被错误配置为输入或输出,可能会导致通信失败。

引脚驱动程序肯定得配置正确才行哦

使用特权

评论回复
29
usysm| | 2025-4-8 15:38 | 只看该作者
如果目标设备对时序有严格要求,建议使用硬件定时器来生成时钟信号,而不是依赖简单的延时函数。

使用特权

评论回复
30
dffzh|  楼主 | 2025-4-8 16:03 | 只看该作者
usysm 发表于 2025-4-8 15:38
如果目标设备对时序有严格要求,建议使用硬件定时器来生成时钟信号,而不是依赖简单的延时函数。 ...

有道理,可以根据SPI从设备对时序的精度要求通过硬件定时器触发CLK信号

使用特权

评论回复
31
benjaminka| | 2025-4-9 19:13 | 只看该作者
如果系统中有其他高优先级任务(如中断服务程序),可能会影响GPIO模拟SPI的时序稳定性。

使用特权

评论回复
32
saservice| | 2025-4-9 22:15 | 只看该作者
如果不需要高速通信,适当降低时钟频率可以提高软件模拟的可靠性。

使用特权

评论回复
33
sdCAD| | 2025-4-10 01:16 | 只看该作者
在SPI传输期间,尽量减少中断处理,以免影响时序。

使用特权

评论回复
34
dffzh|  楼主 | 2025-4-10 08:46 | 只看该作者
benjaminka 发表于 2025-4-9 19:13
如果系统中有其他高优先级任务(如中断服务程序),可能会影响GPIO模拟SPI的时序稳定性。 ...

应用于工业自动化EtherCAT总线产品,目前运行还比较稳定

使用特权

评论回复
35
dffzh|  楼主 | 2025-4-10 08:47 | 只看该作者
saservice 发表于 2025-4-9 22:15
如果不需要高速通信,适当降低时钟频率可以提高软件模拟的可靠性。

是的,500KB时钟速率,CLK波形还是比较好的

使用特权

评论回复
36
mattlincoln| | 2025-4-10 14:11 | 只看该作者
软件模拟SPI的速度远低于硬件SPI,因为每次操作都需要通过GPIO逐位传输数据。

使用特权

评论回复
37
dffzh|  楼主 | 2025-4-10 15:08 | 只看该作者
mattlincoln 发表于 2025-4-10 14:11
软件模拟SPI的速度远低于硬件SPI,因为每次操作都需要通过GPIO逐位传输数据。 ...

是的,通信速度上没办法比,只能在低速场景应用

使用特权

评论回复
38
kkzz| | 2025-4-10 15:54 | 只看该作者
默认实现了CPOL=0、CPHA=0的模式。如果目标设备要求其他模式,需要调整时钟信号的初始状态和采样点。

使用特权

评论回复
39
dffzh|  楼主 | 2025-4-10 16:12 | 只看该作者
kkzz 发表于 2025-4-10 15:54
默认实现了CPOL=0、CPHA=0的模式。如果目标设备要求其他模式,需要调整时钟信号的初始状态和采样点。 ...

是的,按从设备的规格要求来

使用特权

评论回复
40
i1mcu| | 2025-4-10 17:53 | 只看该作者
根据具体的SPI设备,选择正确的CPOL和CPHA值。
CPOL=0表示空闲时钟为低电平,CPOL=1表示空闲时钟为高电平。
CPHA=0表示在时钟的第一个边沿采样数据,CPHA=1表示在时钟的第二个边沿采样数据。

使用特权

评论回复
发新帖 本帖赏金 20.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则