标题:
求助:STC32G单片机使用printf函数串口发送数据失败
[打印本页]
作者:
TP801
时间:
2024-9-21 18:19
标题:
求助:STC32G单片机使用printf函数串口发送数据失败
请教各位大神:
近期学习STC32G12K128单片机,使用printf函数发送数据失败了。原程序在STC其它系列的8位机上运行均没有问题。按理说,在STG32上运行时,只要把头文件更换即可,但是为什么串口不能通讯呢?恳请指点,谢谢大家! 使用串口1通讯,定时器1为波特率发生器,上位机发送字符v,单片机回发各种字符,代码如下:
/*试验printf串口发送字符*/
#include<STC32G.H>
# include<stdio.h>
#include "intrins.h"
//# include<reg52.h>
//# include "STC12C5A60S2.h"
void ConfigUART(unsigned int baud);
unsigned char RxdByte = 0x00;
void printstar()
{
printf("********************************\n");
}
void print_message()
{
printf("hello world"); //
printf("How do you do!\n");
printf("欢迎学习STC51单片机\n");
}
void main()
{
ConfigUART(9600); //配置T1波特率为9600
EA=1;
WTST = 0; //CPU读取储存器的等待时间控制
EAXFR = 1; //使能访问XFR
CKCON = 0x00; //外部数据总线为最快
while(1)
if (RxdByte == 'v') //v代表有数据请求
{
RxdByte=0; //清零
ES=0; //可以不要
TI=1; //TI必须置1
printf("学习STG32单片机\n");
printstar();
print_message();
printstar();
TI=0; //此程序中可以不要
ES=1; //可以不要
}
else
{
}
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
SCON = 0x50; //配置串口为模式1
TMOD &= 0x0F; //清零T1的控制位
TMOD |= 0x20; //配置T1为模式2,波特率发生器
TH1 = 256 - (11059200/12/32)/baud; //计算T1重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止T1中断
ES = 1; //使能串口中断
TR1 = 1; //启动T1
}
/* UART中断服务函数 */
void InterruptUART() interrupt 4
{
if (RI) //接收到字节
{
RI = 0; //清零接收中断标志位
RxdByte = SBUF; //接收到的数据保存到接收字节变量中
}
}
作者:
coody_sz
时间:
2024-9-21 23:00
你那拿老51的程序放在STC32G上要修改一下的,建议从STC官方下载例程测试学习。
作者:
lkc8210
时间:
2024-9-22 10:57
你都没有重定向putchar, 怎么会成功?
2024-09-22_105728.png
(4.67 KB, 下载次数: 4)
下载附件
2024-9-22 10:57 上传
作者:
TP801
时间:
2024-9-28 11:59
感谢大家指点,现已解决。主要是存在两个问题:
1)C251编译设置有问题,应该把Momory Model的设置为:XSmall:near vars,far const,prt-4。
2)STC32G里,串口1默认T2作为波特率发生器,如果使用T1作为波特率发生器,应关闭T2的波特率设置位,即S1BRT = 0。
重定向putchar,还没有试,再次感谢!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1