先说结论与一个必须澄清的点
你这个问题里的"串口自动奇偶校验"功能,在手册中并不属于 DMA 的配置位,而是串口的 USARTnCR2 寄存器里由 PCEN/PS 控制的硬件自动校验功能。 DMA 侧并不存在"校验使能位"。
另外要特别提醒:DMA 寄存器里的 URnTPTY[1:0] / URnRPTY[1:0] 中的 PTY 是 Priority(优先级),不是 Parity(校验)。手册原文定义是"URnT_DMA数据总线访问优先级控制位",00=最低级、01=较低级、10=较高级、11=最高级。这一点千万别按"Parity"去配置,属于常见误读。
一、串口自动奇偶校验靠哪个位实现
手册「串口通信」/「USART」章节中,串口的硬件自动校验由 USARTnCR2 的低 3 位控制(以串口1为例):
符号地址B7B6B5B4B3B2B1B0
USARTCR2(STC8H)FDC1H-----PCENPSPE
USARTCR2(STC32G/Ai8051U)7EFDC1HIRENIRLPSCENNACKHDSELPCENPSPE
USARTCR2(STC32G144K246)7EFDC1HS1IRENS1IRLPS1SCENS1NACKS1HDSELS1PCENS1PSS1PE
- PCEN(B2):硬件自动产生校验位控制使能
- 0:禁止硬件自动产生校验位(串口的校验位为 TB8 设置的值)
- 1:使能硬件自动产生校验位
- PS(B1):硬件校验位模式选择
- 0:硬件根据 SBUF 的值自动产生偶校验位
- 1:硬件根据 SBUF 的值自动产生奇校验位
- PE(B0):校验位错误标志(必须软件清零)
关键原文(这正是"与 DMA 配合"的说明):
PE:校验位错误标志(必须软件清零)
0:无检验错误
1:有校验错误(串口接收 DMA 过程中如果发生接收数据校验位错误,DMA 不会停止,但校验位错误标志会一直保持直到 DMA 完成)
这段原文说明:开了 DMA 接收,硬件校验照样工作,校验出错不会打断 DMA 搬运,只是 PE 标志会一直保持到 DMA 完成,由软件去清。所以"DMA + 自动奇偶校验"是配套可用的。
二、哪些型号同时具备「DMA」+「串口硬件奇偶校验」
必须两个条件同时满足才有意义。逐系列对照手册开头的功能支持表:
1. STC8H 系列(串口章节支持表 + DMA 章节支持表)
串口章节支持表中,"硬件奇偶校验"列为 ● 的型号:
| 型号 |
串口数量 |
硬件奇偶校验 |
DMA |
| STC8H1K08 / 1K28 / 3K64S4 / 3K64S2 |
2~4 |
空 |
空 |
| STC8H8K64U |
4 |
空 |
空(A 版)/ ●(B/C/D 版) |
| STC8H4K64TL / 4K64TLCD |
4 |
空 |
● |
| STC8H1K08T |
2 |
空 |
● |
| STC8H2K12U-A |
2(含接收超时中断 ●) |
空 |
空 |
| STC8H2K12U-B |
2 |
● |
空 |
| STC8H2K32U |
2 |
● |
空 |
结论(STC8H 系列):串口硬件奇偶校验只有 STC8H2K12U-B 和 STC8H2K32U 支持,但这两款在 DMA 章节的 DMA 栏都是空的——即 STC8H 系列中没有任何一款同时具备 DMA 和串口硬件奇偶校验。
2. Ai8 系列
DMA 支持情况与 STC8H 完全一致(Ai8H8K64U B/C/D 版、Ai8H4K64TL、Ai8H4K64TLCD、Ai8H1K08T 为 ●),串口硬件校验同 STC8H(仅 STC8H2K12U-B / 2K32U 对应型号有)。同样没有交叉的型号。
3. Ai8051U 系列
- 串口章节标题即为「2组USART-LIN/SPI,同步/异步串口通信,硬件奇偶校验」,U1~U2 均具备
PCEN/PS/PE;
- DMA 章节支持表:Ai8051U 系列 DMA 为 ●,含 UR1T/R、UR2T/R、UR3T/R、UR4T/R。
→ Ai8051U 系列:DMA 与串口硬件奇偶校验同时具备,串口 1、串口 2 可用。
4. STC32G 系列
- 「2组USART-LIN/SPI,同步/异步串口通信」章节,USART1、USART2 均有
PCEN/PS/PE;
- DMA 章节支持表:STC32G12K128、STC32G8K64、STC32F12K60、STC32CL8K64 全部为 ●。
→ STC32G 系列:DMA 与串口硬件奇偶校验同时具备(串口1、串口2)。
5. STC32G144K246 系列
- 「8组USART-LIN/SPI,同步/异步串口通信,硬件奇偶校验」章节,USART1~USART8 每个都有
SnPCEN/SnPS/SnPE;
- DMA 章节支持表:STC32G144K246 系列 DMA 为 ●,含 UR1T/R ~ UR8T/R。
→ STC32G144K246 系列:DMA 与串口硬件奇偶校验同时具备,且串口 1~8 全部可用。
三、汇总表(同时满足两个条件的型号)
系列具体型号可用串口依据
Ai8051UAi8051U 系列(全系 ●)U1、U2串口章节标题含"硬件奇偶校验";DMA 章节 ●
STC32GSTC32G12K128、STC32G8K64、STC32F12K60、STC32CL8K64U1、U2USART1/2 有 PCEN/PS/PE;DMA 章节均 ●
STC32G144K246STC32G144K246 系列U1U8USART18 均有 SnPCEN/SnPS/SnPE;DMA 章节 ●
明确不具备组合的:STC8H 全系、Ai8 全系(有校验的 2K12U-B/2K32U 无 DMA;有 DMA 的型号校验栏为空)、STC8G 全系(无 DMA)。
四、配置要点(以 STC32G/Ai8051U 串口1为例)
P_SW2 |= 0x80; // 允许访问 XFR 扩展寄存器
USARTCR2 |= 0x04; // PCEN=1,使能硬件自动产生校验位
USARTCR2 &= ~0x02; // PS=0,偶校验(置1则为奇校验)
// 串口需工作在9位模式,硬件校验位占用第9位
注意两点(均有手册依据):
PCEN=1 时校验位由硬件根据 SBUF 自动产生,TB8 的设置值不再生效;PCEN=0 时校验位就是软件写进 TB8 的值。
- 校验错误时 DMA 不会停止,需软件在 DMA 完成后检查并清
PE。
📚 参考章节:串口通信,可省电模式唤醒,可实现 LIN(STC8H/Ai8);2组USART-LIN/SPI,同步/异步串口通信(STC32G);2组USART-LIN/SPI,同步/异步串口通信,硬件奇偶校验(Ai8051U);8组USART-LIN/SPI,同步/异步串口通信,硬件奇偶校验(STC32G144K246);DMA(各系列)
补充说明:如果你原本是想用 STC8H 这类小容量型号做"校验 + DMA"的组合,按手册现状做不到,需要换到上表三个系列;若是 8 位系统且要小封装,Ai8051U 系列是能满足该组合的 8 位方案。请告诉我你的目标型号和串口号,我可以给出完整可编译的初始化代码。
🔍 搜索 "STC的MCU 哪几个型号的 DMA支持串口自动奇偶检验"
📌 相关论坛讨论
- STC32的串口1/2 是硬件奇偶校验,有DMA支持硬件奇偶校验
- 求助帖:STC32G 串口2DMA的发送问题 | 已正常
- STC8H系列的手册好久没更新了,说明已经成熟!那么何时给我们一个完美的51串口呢?
⏱️ 查找用时 15.6s | 总回答用时 26.7s