中级会员
 
- 积分
- 210
- 金钱
- 210
- 注册时间
- 2016-8-11
- 在线时间
- 65 小时
|
5金钱
#include "UsartHDev3.h"
#include "stm32f10x.h"
#include "UsartD.h"
//====================================================================
struct _UsartHDev3 UsartHDev3;
//RST·½Ïò2ù×÷
static void __RST_U3(unsigned char Flag)
{
if(Flag)U3_RST_RXEN();
else U3_RST_TXEN();
}
struct _RcvLen const _HDev3_RcvLen = {
12, //报头长度
1, //命令长度
1 //CRC校验长度
};
//--------------------设备起始回调--------------------------
static signed char _HDev3_cbRcvdStart(struct _UsartD * const pUsartD)
{
if(UsartHDev3.Flag & HDEV3_RCV_READY)return -6;//帧间隔太短,进制接收
switch(pUsartD->RcvLen)
{
case 0:
// if((pUsartD->pRcvBuf[0] != 0xF0) && (pUsartD->pRcvBuf[0] != 0xD5))return -1; //Ö¡í·′íÎó
// if(pUsartD->pRcvBuf[0] == 0xD5)pUsartD->Flag |= MESSAGE_NEW;
if(pUsartD->pRcvBuf[0] != 0x08) return -1; //èç1û2»êÇ08£¬·μ»Ø-1
// if(pUsartD->pRcvBuf[0] == 0x08)pUsartD->Flag |= MESSAGE_NEW ; //èç1ûêÇ08£¬½óêÕDÂμı¨ÎÄòÔ0x08¿aí·
// else pUsartD->Flag &= ~MESSAGE_NEW;
break;
case 1:
if(pUsartD->pRcvBuf[7] != 0x00) return -2;
break;
default:return -3;
}
return 0;
}
之前我知道一个帧头怎么修改的,但是现在我想把08 07 06 05 01 00 00 02 00 00 00 01这12个字节当成包头,然后接收并且判断一下前边5个字节,现在我不知道怎么写接收这12个字节,并且我还想在这里边做一个更新,和初始化长度,求大神指点,还有原子哥,我前几天刚买了咱们家的开发板,求帮忙谢谢!
|
最佳答案
查看完整内容[请看2#楼]
开启串口接收中断,再设置一个数组存放接收到的数据,每进接收中断判断是否 为0x08,如果是则说明是包头,然后就开始接收数据放到数组里面去bool flag =false;
char RecBuff[20];
char count=0;
if(txData = =0x08)
flag=true;
if(flag)
RecBuff[count++] = txData;
if(count==12 && txData ==0x01)
flag = false;
|