好问题!从您之前贴的代码来看,您用的是 USART2 的 SPI 模式,也就是通过 串口2(UART2) 来模拟 SPI 主机功能。
不过,您图片中那个 QSPI DMA + SPI DMA 驱动液晶屏 的演示程序,和您自己写的那个 SPI 配置代码不是同一个东西,需要分开说清楚:
1. 您自己写的代码(ADC_SPI_Init)——用的是 USART2 的 SPI 模式
从您的代码来看:
P_SW3 &= ~0x30;
P_SW3 |= 0x20; // 选择 USART2 的引脚映射
S2CON = 0x10; // S2CON 是 USART2 的控制寄存器
USART2CR1 = 0x10; // USART2 的 SPI 模式控制
您用的是 USART2(串口2) 的 SPI 同步模式,对应的寄存器是:
S2CON — USART2 控制寄存器
USART2CR1 — USART2 SPI 模式控制寄存器
USART2CR4 — USART2 SPI 时钟分频寄存器
S2BUF — USART2 数据缓冲寄存器
所以答案是:您用的是串口2(USART2)。
2. 图片中那个 QSPI DMA 演示程序——用的是 QSPI + 硬件 SPI
您图片中那个 "QSPI DMA + SPI DMA 驱动液晶屏程序" 是 STC 官方实验箱的演示程序,它用的是:
| 外设 |
用途 |
说明 |
| QSPI |
读取外部 Flash 中的图片数据 |
使用芯片的硬件 QSPI 外设(不是用串口模拟的) |
| 硬件 SPI |
驱动 LCD 显示 |
使用芯片的硬件 SPI 外设(也不是用串口模拟的) |
| DMA(P2P) |
QSPI → SPI 直接传输 |
外设到外设的 DMA,不经过 CPU |
这个演示程序没有用串口模拟 SPI,而是用的真正的硬件 SPI 和 QSPI 外设。
3. 您的代码和图片中的程序是两回事
| 项目 |
您的代码 |
图片中的演示程序 |
| 通信方式 |
USART2 的 SPI 模式(串口模拟 SPI) |
硬件 QSPI + 硬件 SPI |
| 目标器件 |
TLV5638(DAC) |
W25Qxx Flash + SPI LCD |
| 速度 |
受限于 USART 的 SPI 模式 |
真正的硬件 SPI/QSPI,速度更快 |
| 适用场景 |
低速 SPI 从机通信 |
高速视频级动画显示 |
总结:
- 您代码里用的是 串口2(USART2) 的 SPI 模式
- 图片演示程序用的是 硬件 QSPI + 硬件 SPI,跟串口没关系
如果您是想把图片中那个演示程序跑起来,那您需要确认您的芯片是否支持 硬件 QSPI 和 硬件 SPI(以及 DMA),而不是用 USART 的 SPI 模式。您具体用的是哪款芯片?我可以帮您查一下它是否支持这些外设。
🔍 搜索 "用的是串口几?"
📌 相关论坛讨论
- 【冲哥版】stc32学习心得
- 关于 STC 下载软件 用CDC串口下载后,每次都需要重新选择COM口的问题
- STC-ISP软件更新到 V6.92A
⏱️ 查找用时 1.0s | 总回答用时 7.1s