移植后还是不行
前面4楼已经更新增加了移植到STC32平台的例子 王昱顺 发表于 2024-3-7 09:14
P是偶校验位,如果不行可以尝试在acc操作后插入三个nop试试
好的,我试下 乘风飞扬 发表于 2024-3-6 19:40
附件是串口4+校验位与电脑收发测试,STC8系列平台、STC32平台的例子,供参考。 ...
谢谢,我再试下 55337575 发表于 2024-3-7 11:27
参考我的这个帖子吧。https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6088
还是不行呀
void Uart4_Init(void) //9600bps@33.1776MHz
{
S4CON = 0x90; //9位数据,可变波特率
S4CON |= 0x08; //校验位初始值为 1
S4CON |= 0x40; //串口4选择定时器4为波特率发生器
T4T3M |= 0x20; //定时器时钟1T模式
T4L = 0xA0; //设置定时初始值
T4H = 0xFC; //设置定时初始值
T4T3M |= 0x80; //定时器4开始计时
IE2 |= 0x10; //使能串口4中断
}
void UART4_TxByte(unsigned char dat)
{
ACC = dat;
if(P)
{
S4CON |= 0x08; //偶校验
}
else
{
S4CON &= ~0x08; //偶校验
}
S4BUF = dat; //发一个字节
B_TX4_Busy = 1; //标志发送忙
while(B_TX4_Busy); //等待发送完成
} fanpu 发表于 2024-3-7 14:22
还是不行呀
void Uart4_Init(void) //9600bps@33.1776MHz
{
中断需要B_TX4_Busy=0.
void U4_Isr() interrupt 18
{
if(S4TI)
{
S4TI=0;B_TX4_Busy=0;
}
if(S4RI)
{
S4RI=0;
}
}
再确保EA=1;就应该没问题 找到问题了,是设备供电不足导致的3.3V压降到了2.6V导致设备无法工作,
串口我用示波器做了图形对比,正确代码如下,感谢各位大佬的帮助
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)
{
ACC = dat;
S4TB8=P ; //偶校验位
S4BUF = dat; //发一个字节
B_TX4_Busy = 1; //标志发送忙
while(B_TX4_Busy); //等待发送完成
}
页:
1
[2]