STC32G128K 串口4 如何设置校验位 | 已解决
STC32G128K单片机使用串口4 如果设置成8位数据无校验位,就不出问题,如果采用9位数据含校验位,发送数据就出现问题,麻烦大佬们看下问题出现在哪里?个人代码
void Uart4_Isr(void) interrupt 18
{
if (S4CON & 0x02) //检测串口4发送中断
{
S4CON &= ~0x02; //清除串口4发送中断请求位
}
if (S4CON & 0x01) //检测串口4接收中断
{
S4CON &= ~0x01; //清除串口4接收中断请求位
}
}
void Uart4_Init(void) //9600bps@33.1776MHz
{
S4CON = 0x90; //9位数据,可变波特率
S4CON |= 0x40; //串口4选择定时器4为波特率发生器
T4T3M |= 0x20; //定时器时钟1T模式
T4L = 0xA0; //设置定时初始值
T4H = 0xFC; //设置定时初始值
T4T3M |= 0x80; //定时器4开始计时
IE2 |= 0x10; //使能串口4中断
}
void UART4_TxByte(unsigned char dat)
{
B_TX4_Busy = 1; //标志发送忙
ACC = dat;
S4TB8=~P; //偶校验
S4BUF = dat; //发一个字节
while(B_TX4_Busy); //等待发送完成
}
本帖最后由 乘风飞扬 于 2024-3-7 11:30 编辑
附件是串口4+校验位与电脑收发测试,STC8系列平台、STC32平台的例子,供参考。 S4TB8=~P; //偶校验-----------P是ACC的偶校验位,取反后即使数据发送出去,对方也会丢弃的。 21cnsound 发表于 2024-3-6 17:10
S4TB8=~P; //偶校验-----------P是ACC的偶校验位,取反后即使数据发送出去,对方也会丢弃的。 ...
请问该如何写{:5_272:} fanpu 发表于 2024-3-6 18:50
请问该如何写
S4TB8=P; //偶校验
这个肯定得改,如果还不行再找其他原因 乘风飞扬 发表于 2024-3-6 19:40
附件是串口4+校验位与电脑收发测试,STC8系列平台的例子,你移植到STC32平台上试试。 ...
移植后还是不行 21cnsound 发表于 2024-3-6 20:07
S4TB8=P; //偶校验
这个肯定得改,如果还不行再找其他原因
还是不行 fanpu 发表于 2024-3-7 08:44
还是不行
P是偶校验位,如果不行可以尝试在acc操作后插入三个nop试试 参考我的帖子,虽然是15系列的,效验方法适合stc32 参考我的这个帖子吧。https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6088
页:
[1]
2