fanpu 发表于 2024-3-6 16:07:01

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-6 19:40:18

本帖最后由 乘风飞扬 于 2024-3-7 11:30 编辑

附件是串口4+校验位与电脑收发测试,STC8系列平台、STC32平台的例子,供参考。

21cnsound 发表于 2024-3-6 17:10:11

S4TB8=~P;      //偶校验-----------P是ACC的偶校验位,取反后即使数据发送出去,对方也会丢弃的。

fanpu 发表于 2024-3-6 18:50:09

21cnsound 发表于 2024-3-6 17:10
S4TB8=~P;      //偶校验-----------P是ACC的偶校验位,取反后即使数据发送出去,对方也会丢弃的。 ...

请问该如何写{:5_272:}

21cnsound 发表于 2024-3-6 20:07:50

fanpu 发表于 2024-3-6 18:50
请问该如何写

S4TB8=P;      //偶校验
这个肯定得改,如果还不行再找其他原因

fanpu 发表于 2024-3-7 08:44:24

乘风飞扬 发表于 2024-3-6 19:40
附件是串口4+校验位与电脑收发测试,STC8系列平台的例子,你移植到STC32平台上试试。 ...

移植后还是不行

fanpu 发表于 2024-3-7 08:44:59

21cnsound 发表于 2024-3-6 20:07
S4TB8=P;      //偶校验
这个肯定得改,如果还不行再找其他原因

还是不行

王昱顺 发表于 2024-3-7 09:14:26

fanpu 发表于 2024-3-7 08:44
还是不行

P是偶校验位,如果不行可以尝试在acc操作后插入三个nop试试

55337575 发表于 2024-3-7 11:24:08

参考我的帖子,虽然是15系列的,效验方法适合stc32

55337575 发表于 2024-3-7 11:27:17

参考我的这个帖子吧。https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6088
页: [1] 2
查看完整版本: STC32G128K 串口4 如何设置校验位 | 已解决