使用DMA+串口空闲中断发送数据V0fa+ Justfloat协议接受但是丢失第一个通道数据情况记录

问题

void Send_vofa(void){            
    u8 frameDataEnd[] = {0x00,0x00,0x80,0x7f};
    u8 i=0;
    u8 a=1,b=5,c=6,d=7;
    u8 byte[4]={0};   

     Float_to_Byte((float)a,byte); DMA_USART_TX_Data(byte,4);
    //delay_ms(100);
     Float_to_Byte((float)b,byte); DMA_USART_TX_Data(byte,4); 
    //delay_ms(100);                 
     Float_to_Byte((float)c,byte);DMA_USART_TX_Data(byte,4);
     DMA_USART_TX_Data(frameDataEnd,4);
}

 /*   将浮点数f转化为4个字节数据存放在byte[4]中*/
void Float_to_Byte(float f,unsigned char* byte)
{
    FloatLongType fl;
    fl.fdata=f;
    byte[0]=(unsigned char)fl.ldata;
    byte[1]=(unsigned char)(fl.ldata>>8);
    byte[2]=(unsigned char)(fl.ldata>>16);
    byte[3]=(unsigned char)(fl.ldata>>24);
}

三个通道,常数1 5 6,但是情况是

分析

  • 波特率太高,从115200降至9600,情况不变;升至460800也没用
  • 在数据发送之间加上延时,见第7行代码,发现有效,通道数据恢复正常

        应该是DMA太快?有数据覆盖问题吧(个人认为)。

解决

  • 多加两条通道数据就行,把自己要用的使显示出来

不定时更新。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值