你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
stm1024 发表于 2019-1-14 13:21 你的问题可能不是丢包,应该是数据被新的数据给替换了
黄同学来学习 发表于 2019-1-14 14:57 //中断服务函数 void USB_LP_CAN1_RX0_IRQHandler(void) {
查看全部评分
Johnson Cao 发表于 2019-1-14 13:57 使用环形缓冲区,中断写,main里读就行了.环形缓冲研究下,以后搞通信,用得上的地方多了去. ...
stm1024 发表于 2019-1-14 15:35 if(RxMessage.Data==0x40) 为什么有这种写法?Data是一个数组啊喂
zts329547875 发表于 2019-1-14 15:52 打包,拆包,重组,校验
//ÖжϷþÎñº¯Êý
void USB_LP_CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN1, 0, &RxMessage);
// for(i=0;i<RxMessage.DLC;i++)
// {
// if(RxMessage.Data==0x40)
// {
// canData=RxMessage.Data;
// }
for(i=0;i<8;i++)//ÓÐÊý¾Ý½ÓÊÕÖжϣ¬ÕâÀï½ÓÊÕµ½Ò»Ö¡Êý¾Ý£¬¼´8×Ö½Ú
{
canData[j]=RxMessage.Data;
j++;
}
if(canData[0]==0x40)//ÅжÏÊÇ·ñ±¨ÎĵÚÒ»×Ö½ÚÊÇ·ñΪ0x40
{
canData_len=(canData[1]<<8|canData[2]);//½«µ±Ç°±¨Îij¤¶È°´8×Ö½Ú¼ÆËã
sun=canData_len/8;//¼ÆË㵱ǰ±¨ÎÄÓжàÉÙÖ¡Êý¾Ý
}
if(sun==0)//ÊÇ·ñ½ÓÊÕÍ굱ǰ±¨ÎÄÖ¡Êý
{
j=0;//½«Êý×éϱ껹ÔΪ0
}
sun--;
// j++;
// printf("\r\n%d\r\n",j);
// printf("\r\n");
}
这个是我改的中断服务函数 一直不行
//中断服务函数
void USB_LP_CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN1, 0, &RxMessage);
// for(i=0;i<RxMessage.DLC;i++)
// {
// if(RxMessage.Data==0x40)
// {
// canData=RxMessage.Data;
// }
for(i=0;i<8;i++)//有数据接收中断,这里接收到一帧数据,即8字节
{
canData[j]=RxMessage.Data;
j++;
}
if(canData[0]==0x40)//判断是否报文第一字节是否为0x40
{
canData_len=(canData[1]<<8|canData[2]);//将当前报文长度按8字节计算
sun=canData_len/8;//计算当前报文有多少帧数据
}
if(sun==0)//是否接收完当前报文帧数
{
j=0;//将数组下标还原为0
}
sun--;
// j++;
// printf("\r\n%d\r\n",j);
// printf("\r\n");
}
//中断服务函数
void USB_LP_CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
int i=0;
CAN_Receive(CAN1, 0, &RxMessage);
// for(i=0;i<RxMessage.DLC;i++)
// {
// if(RxMessage.Data==0x40)
// {
// canData=RxMessage.Data;
// }
for(i=0;i<8;i++)//有数据接收中断,这里接收到一帧数据,即8字节
{
canData[j]=RxMessage.Data;
j++;
}
if(canData[0]==0x40)//判断是否报文第一字节是否为0x40
{
canData_len=(canData[1]<<8|canData[2]);//将当前报文长度按8字节计算
sun=canData_len/8;//计算当前报文有多少帧数据
}
if(sun==0)//是否接收完当前报文帧数
{
j=0;//将数组下标还原为0
}
sun--;
// j++;
// printf("\r\n%d\r\n",j);
// printf("\r\n");
}
if(RxMessage.Data==0x40)
为什么有这种写法?Data是一个数组啊喂
评分
查看全部评分
分成多个包发,一个中断接收
评分
查看全部评分
can是按帧发送的 非常感谢大家支持
是写漏了 谢谢哈
是的 就是实现起来才难