串口助手显示接收到数据,但是界面没数据显示

[复制链接]
查看11 | 回复10 | 2021-1-27 06:20:34 | 显示全部楼层 |阅读模式
ATOS实验箱中测量节点温度,并显示出来,程序运行正确,也成功下载,但是在串口助手却只能显示接收到数据,界面上啥都没有,改成16进制显示,界面上显示的全部是0,不知道是是怎么回事?求大神解答~



分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
波特率对吗?
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
估计是对的。缺省值是9600,他设成115200应该是有根据的。
用示波器抓一下信号线上的波形。
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
说不定是接线的问题!
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
波特率设置的是115200,没错~找了很久都不知道是怎么回事?


回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
字符格式发送,然后看看是不是半角或者圆角字符
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
/*initUART_Timer.h*/
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineLED1P1_0//定义LED1为P10口控制
#defineLED2P1_1//定义LED2为P11口控制
#defineLED3P1_4//定义LED3为P14口控制
//Data
typedefunsignedcharBYTE;
//Unsignednumbers
typedefunsignedcharUINT8;
typedefunsignedcharINT8U;
typedefunsignedshortUINT16;
typedefunsignedshortINT16U;
typedefunsignedlongUINT32;
typedefunsignedlongINT32U;
//Signednumbers
typedefsignedcharINT8;
typedefsignedshortINT16;
typedefsignedlongINT32;
#defineDISABLE_ALL_INTERRUPTS()(IEN0=IEN1=IEN2=0x00)//三个
/**************************
系统时钟不分频
计数时钟32分频
**************************/
voidInitClock(void)
{
CLKCONCMD&=~0x40;//设置系统时钟源为32MHZ晶振
while(CLKCONSTA&0x40);//等待晶振稳定
CLKCONCMD&=~0x47;//设置系统主时钟频率为32MHZ
}
/****************************
//初始化程序
*****************************/
voidInitLed(void)
{
P1DIR|=0x13;//P1_0、P1_1定义为输出
LED1=0;//LED1灯熄灭
LED2=0;
LED3=0;
}
/****************************
T3初始化
****************************/
voidInitT3(void)
{
T3CCTL0=0X44;//T3CCTL0(0xCC),CH0中断使能,CH0比较模式
T3CC0=0xFA;//T3CC0设置为250
T3CTL|=0x9A;//启动T3计数器,计数时钟为16分频。使用MODULO模式
IEN1|=0X08;
IEN0|=0X80;//开总中断,开T3中断
}
/*****************************************
串口初始化函数:初始化串口UART0
*****************************************/
voidInitUART0(void)
{
PERCFG=0x00;//位置1P0口
P0SEL=0x3c;//P0用作串口
P2DIR&=~0XC0;//P0优先作为UART0
U0CSR|=0x80;//串口设置为UART方式
U0GCR|=11;
U0BAUD|=216;//波特率设为115200
UTX0IF=1;//UART0TX中断标志初始置位1
U0CSR|=0X40;//允许接收
IEN0|=0x84;//开总中断,接收中断
}
voidUartTX_Send_String(char*Data,intlen)
{
intj;
for(j=0;j0;i--)
for(j=587;j>0;j--);
}
/*main.c*/
#include
#include"InitUART_Timer.h"//注意在option里设置路径
#include"stdio.h"
voidinitTempSensor(void)
{
DISABLE_ALL_INTERRUPTS();//关闭所有中断
InitClock();//设置系统主时钟为32M
TR0=0X01;//set'1'toconnectthetemperaturesensortotheSOC_ADC.
ATEST=0X01;//Enablesthetemperaturesensor
}
floatgetTemperature(void)
{
uintvalue;
ADCCON3=(0x3E);//选择1.25V为参考电压;12位分辨率;对片内温度传感器采样
ADCCON1|=0x30;//选择ADC的启动模式为手动
ADCCON1|=0x40;//启动AD转化
while(!(ADCCON1&0x80));//等待AD转换完成
value=ADCL>>4;//ADCL寄存器低4位无效
value|=(((UINT16)ADCH)<<4);
return(value-1367.5)/4.5-5;//根据AD值,计算出实际的温度,温度系数应该是4.5/℃
//进行温度校正,这里减去5℃(不同芯片根据具体情况校正)
}
voidmain(void)
{
//chari;
charTempValue[6];
floatTemp;
InitUART0();//初始化串口
initTempSensor();//初始化ADC
while(1)
{
/*AvgTemp=0;
for(i=0;i<64;i++)
{
AvgTemp+=getTemperature();
AvgTemp=AvgTemp/2;//每次累加后除2
}
*/
Temp=getTemperature();
/****温度转换成ascii码发送****/
TempValue[0]=(unsignedchar)(Temp)/10+48;//十位
TempValue[1]=(unsignedchar)(Temp)%10+48;//个位
TempValue[2]='.';//小数点
TempValue[3]=(unsignedchar)(Temp*10)%10+48;//十分位
TempValue[4]=(unsignedchar)(Temp*100)%10+48;//百分位
TempValue[5]='\0';//字符串结束符
UartTX_Send_String(TempValue,6);
Delayms(2000);//使用32M晶振,故这里2000约等于1S
}
}
代码如上,是否代码上有什么问题?
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
自动清空别沟看看呢
再找个串口监视软件看看
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层
TempValue[0]=(unsignedchar)(Temp)/10+48;//十位
这个有问题。干吗不用sprintf?或者更安全的snprintf?
snprintf(TempValue,6,"%.2f",Temp);
UartTX_Send_String(TempValue,6);
回复

使用道具 举报

千问 | 2021-1-27 06:20:34 | 显示全部楼层


使用snprintf(TempValue,6,"%.2f",Temp);函数的话,调试时会出现这个错误:

不知道怎么弄,在头文件中有申明:
#include"stdio.h"
#include"stdlib.h"
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行