STM32F030C8T6 SPI 通讯问题排查分析

发布时间 2023-08-05 13:42:24作者: Purple_Moon

配置及问题列举

1. STM32F030C8T6:48M系统时钟配置;
2. SPI1:驱动LCD,半工主机通讯,极性为高、边沿为2,时钟分频系数16分频;
3. SPI2:驱动TDC-GP21,全工主机通讯,极性为低、边沿为2,时钟分频系数4分频;

1. LCD驱动为上升沿,改为{极性为低、边沿为1},初始化却无效;
2. TDC-GP21驱动为下降沿,读取ID函数,从机回复ID为0(0xB7操作码,后跟七位ID序列);
3. LCD驱动半工通讯,发送字节数据失败,屏幕初始化不成功;

SPI2 驱动 TDC-GP21问题

硬件检查

- 首先检查SCK、MOSI、MISO、CSN硬件连接正常;

SPI逻辑分析仪抓取波形

- 波形时序不对,波形散乱错离;

原因及问题解决

Q: TDC-GP21器件 不支持高SPI时序;
A: SPI增加分频系数,SPI时钟降至3M,TDC-GP21器件时序恢复正常;

SPI1 驱动 LCD问题

硬件检查

- 首先检查SCK、MOSI、MISO、CSN硬件连接正常;

SPI逻辑分析仪抓取波形

- 波形时序不对,字节SCK时钟少位,漏位;
- 字节流传输中每个字节间跨度在14us左右,十分影响速率;

问题解决

Q: SPI单工通讯异常,时序错误,HAL_SPI_Transmit(&hspi1, &TxData,1,HAL_MAX_DELAY);字节间跨度过大;
A: SPI更改为全双工通讯,时序恢复正常;
A: SPI更改为HAL_SPI_TransmitReceive(&hspi1, &TxData, &Rxdata,1,0);函数传输,速率提升;

未解决问题

- TDC-GP21未使能前MISO为高阻态,CSN拉低后MISO被TDC-GP21强制拉低,无法与从机建立通讯;
- (续上)返回ID也是因为从机拒绝访问影响(有解答请联系)。