初级会员

- 积分
- 115
- 金钱
- 115
- 注册时间
- 2013-5-4
- 在线时间
- 3 小时
|
5金钱
我是在原子哥的代码上做的一个实验,是用串口1向串口2发送数据,然后再通过串口2发送出去,串口2的代码是用战舰板上蓝牙模块实验的串口2代码,我只是修改了一下main函数的内容,但实验现象是,我从串口1发送0123456789,然后串口2收到我发来的0123456789之后,会出现很多乱码,还有一种现象是只收到一大段的0D 0A 0D 0A...............这些,不知道是哪里出现了问题,请求大家帮忙看看是哪里出现了问题,谢谢!
下面是main函数程序
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart2.h"
#include "usart.h"
#include "string.h"
int main(void)
{
u16 times=0;
u16 i,rxlen;
delay_init(); //延时函数初始化
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
uart_init(9600);
USART2_Init(9600);
NVIC_Configuration();
while(1)
{
delay_ms(1);
//用这一种方式向串口2发送数据(0123456789),串口2收到发来的数据后跟着会出现很多乱码
if(USART_RX_STA&0x8000) //接收到一次数据了
{
rxlen=USART_RX_STA&0x7fff;//得到此次接收到的数据长度
for(i=0;i<rxlen;i++)
{
USART_SendData(USART2, USART_RX_BUF);//向串口2发送数据
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待发送结束
}
printf("%s\t\n",USART_RX_BUF);
USART_RX_STA=0;
}else
{
times++;
if(times%100==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
/*
//用这一种方式向串口2发送数据(0123456789),串口2收到的是一大段0D 0A 0D 0A.......
if(USART_RX_STA&0X8000) //接收到一次数据了
{
rxlen=USART_RX_STA&0X7FFF; //得到数据长度
for(i=0;i<rxlen;i++)USART2_TX_BUF=USART_RX_BUF;
USART_RX_STA=0; //启动下一次接收
USART2_TX_BUF=0; //自动添加结束符
u2_printf("\r\n%s\r\n",USART2_TX_BUF);//发送接收到的数据到串口2
}
else
{
times++;
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
*/
}
}
|
最佳答案
查看完整内容[请看2#楼]
回复【2楼】psrazil:
---------------------------------
问题解决了,把rxlen=USART_RX_STA&0x7fff; 这一句改成 rxlen=USART_RX_STA&0x3fff; 就可以了。串口1的中断服务程序里面用的是3FFF,两个长度应该要保持一致
|