CC2530 USART0收发通信,串口调试助手出现乱码,求帮助

迦蓝幻紫 2016-07-30 01:29:25
/**************************************
串口收发程序
描述:在串口调试助手上可以看到不停地
收到 CC2530 发过来的从串口助手发送过去的数据
波特率:115200bps
**************************************/

#include <ioCC2530.h>
#include <string.h>
#include <stdio.h>

#define uint unsigned int
#define uchar unsigned char

uchar RXTXflag = 0; //接收发送状态标志,0表示接收,1表示发送
uchar temp = 0; //表示每个要发送的数据
uint datanumber = 0; //表示数据的个数
uchar Rxdata[50]; //存放收到数据空间

//定义 LED 的端口,低电平有效
#define LED1 P1_0 //D2 黄灯
#define LED2 P1_1 //D1 蓝灯

//函数声明
void Delay_ms(uint);
void InitUART(void);
void UartSend_String(char *Data,int len);
void Usart_Send_Byte(uchar a);



/****************************************************************
延时函数
****************************************************************/
void Delay_ms(uint n)
{
uint i,j;
for(i = 0; i < n; i++)
{
for(j = 0;j < 1774; j++);
}
}

/***************************************************************
*LED指示灯初始化函数
***************************************************************/
void IO_Init()
{
P1DIR = 0x03; //P1_0IO 方向输出
LED1 = 1; //关 LED1,LED1表示接收状态
LED2 = 1; //关 LED2,LED2表示发送状态
}


/****************************************************************
串口初始化函数
****************************************************************/
void InitUART(void)
{
PERCFG = 0x00; //位置1 P0 口 /* Peripheral I/O Control */
P0SEL = 0x0c; //P0_2,P0_3 用作串口(外部设备功能) /* Port 0 Function Select
P2DIR &= ~0xc0; //P0口 优先作为 UART0

U0CSR |= 0x80; //设置为 UART 方式

U0GCR |= 11;
U0BAUD |= 216; //波特率设为 115200

UTX0IF = 0; //UART0 TX 中断标志初始置位 0
URX0IF = 0; //UART0 RX 中断标志初始置位 0

U0CSR |= 0X40; //允许串口0接收
IEN0 |= 0x84; // 开总中断和USART0接收中断使能

}


/****************************************************************
串口发送字符串函数
****************************************************************/
void UartSend_String(char *Data,int len)
{
int j;
for(j = 0; j < len; j++)
{
U0DBUF = *Data++;
while( 0 == UTX0IF );
UTX0IF = 0;
}
}

void Usart_Send_Byte(uchar a)
{
U0DBUF = a;
while(UTX0IF == 0);
UTX0IF = 0;
}
/***************************************************************
*中断处理函数
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; // 清中断标志
temp = U0DBUF; //temp指向接收的数据
}



/****************************************************************
主函数
****************************************************************/
void main(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为 32MHZ 晶振
while(CLKCONSTA & 0x40); //等待晶振稳定为 32M
CLKCONCMD &= ~0x47; //设置系统主时钟频率为 32MHZ

IO_Init();
InitUART();
Delay_ms(500);
UartSend_String("send test.",sizeof("send test."));

while(1)
{
if( 0 == RXTXflag) //接收状态
{
LED1=0; //接收状态指示
Delay_ms(500);

if(temp != 0)
{
if((temp != '#')&&(datanumber < 50)) //'#'被定义为结束字符,最多能接收50个字符
{
Rxdata[datanumber++] = temp;
}
else
{
RXTXflag = 1; //进入发送状态
LED1 = 1; //关指示灯
}

temp = 0;

}
}


if( 1 == RXTXflag) //发送状态
{
LED2 = 0;
Delay_ms(500);

U0CSR &= ~0x40; //禁止接收
UartSend_String(Rxdata,datanumber); //发送已记录的字符串。

U0CSR |= 0x40; //允许接收

RXTXflag = 0; // 恢复到接收状态
datanumber = 0; //指针归0

LED2 = 1; //关发送指示

}


}
}




...全文
1063 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
迦蓝幻紫 2016-10-11
  • 打赏
  • 举报
回复
我说一下情况吧,关于串口调试方面。我这个,我最终发现是我的USB转串口线 我没有用原装驱动的问题。 平时你串口调试打印出错, 可能错误原因:1,你的代码;2,你的串口调试助手配置;3,你的串口调试硬件工具的驱动安装不匹配或者串口调试硬件工具质量有问题(我用的USB转串口线,重新换了一根质量好的,代码没有改动,完全没有问题。没有对驱动出错怀疑进行实验,当时着急的收尾项目,准备到北京面试)。 多谢各位
fly 100% 2016-08-11
  • 打赏
  • 举报
回复
串口调试工具配置的不对吧
ih___hi 2016-08-10
  • 打赏
  • 举报
回复
软件助手设置的问题,HEX显示没构选
Stack_mz 2016-08-09
  • 打赏
  • 举报
回复
是不是发送的是十六进制,但是串口助手上接收设置的为ASCII码
of123 2016-08-09
  • 打赏
  • 举报
回复
把助手软件中间靠右的 Hex 显示勾上。
6lilu9 2016-08-09
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/391994873,我有个类似的贴子的问题,烦高手帮我看看呀
迦蓝幻紫 2016-08-02
  • 打赏
  • 举报
回复
l111463039 2016-07-30
  • 打赏
  • 举报
回复
没啥问题,是不是你把串口助手设置的有问题?
xqhrs232 2016-07-30
  • 打赏
  • 举报
回复
是不是收到的是16进制?然后你把它当乱码?

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧