新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2016-4-27
- 在线时间
- 2 小时
|
2金钱
本帖最后由 liangyf718 于 2016-4-27 14:29 编辑
我要做一个将条形码扫描枪数据通过串口2读取,然后用串口1发送到电脑串口助手的程序,由于条形码最后是以0x0d结束所有对代码做了以下修改:
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART2);//(USART1->DR); //读取接收到的数据
if((USART2_RX_STA&0x8000)==0 )//接收未完成
{
if((USART2_RX_STA&0x4000))//接收到了0x0d
{
//if(Res!=0x0d)USART2_RX_STA=0;//接收错误,重新开始
//else USART2_RX_STA|=0x8000; //接收完成了
USART2_RX_STA|=0x8000;
}
else //还没收到0X0D
{
if(Res==0x0d)USART2_RX_STA|=0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
然后再main函数里面这些写:
if(USART2_RX_STA&0x8000)
{
len=USART2_RX_STA&0x3fff;//得到此次接收到的数据长度
//printf("\r\n您发送的消息为:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART2_RX_BUF[t]);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
//printf("\r\n");//插入换行
USART2_RX_STA=0;
}
第一段串口服务程序红色部分注释掉了,测试了可以,但是在main函数里面 扫码枪扫两次才能传到串口助手一次,如果将main函数里面的蓝色部分注释掉,串口助手接收不到完整的条码数字,测试结果
(条码内容9787512411005) 2411005 2411005 2411005 2411005 2411005 2411005 2411005 求助问题: 1、在接收中断服务程序中的改法是否有问题; 2、为什么 注释了printf函数 就无法正确发送
|
|