STC32G串口1例程运行不正常
今天在调试串口打印传感器值时,发现串口打印数据乱码。独立排查后还是出错,最后干脆用STC32G手册中的串口 1 使用定时器 2 做波特率发生器的代码,但是很奇怪还是出错,无法正确打印,请问大家有没有遇到过,是什么问题?用STC8G,8H的例子建立工程没有问题。初步怀疑是不是keil相关设置有问题?#include "stc32g.h" //头文件见下载软件
#include "intrins.h"
#define FOSC 11059200UL //定义为无符号长整型,避免计算溢出
#define BRT (65536 - (FOSC / 115200+2) / 4)
//加 2 操作是为了让 Keil 编译器
//自动实现四舍五入运算
bit busy;
char wptr;
char rptr;
char buffer;
void UartIsr() interrupt 4
{
if (TI)
{
TI = 0;
busy = 0;
}
if (RI)
{
RI = 0;
buffer = SBUF;
wptr &= 0x0f;
}
}
void UartInit()
{
SCON = 0x50;
T2L = BRT;
T2H = BRT >> 8;
S1BRT = 1;
T2x12 = 1;
T2R = 1;
wptr = 0x00;
rptr = 0x00;
busy = 0;
}
void UartSend(char dat)
{
while (busy);
busy = 1;
SBUF = dat;
}
void UartSendStr(char *p)
{
while (*p)
{
UartSend(*p++);
}
}
void main()
{
EAXFR = 1; //使能访问 XFR
CKCON = 0x00; //设置外部数据总线速度为最快
WTST = 0x00; //设置程序代码等待参数,
//赋值为 0 可将 CPU 执行程序的速度设置为最快
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
UartInit();
ES = 1;
EA = 1;
UartSendStr("Uart Test !\r\n");
while (1)
{
if (rptr != wptr)
{
UartSend(buffer);
rptr &= 0x0f;
}
}
} 如下
官网->软件工具->实验箱
STC32G实验箱例程包里面有完整的项目,烧录其中串口收发测试的例子到芯片里试试。 神农鼎 发表于 2023-8-17 07:01
谢谢,我试试看 乘风飞扬 发表于 2023-8-17 09:09
官网->软件工具->实验箱
STC32G实验箱例程包里面有完整的项目,烧录其中串口收发测试的例子到芯片里试试。 ...
谢谢,我试一下{:4_196:}
页:
[1]