LabVIEW论坛
直播中

liqijian101

10年用户 566经验值
擅长:可编程逻辑 嵌入式技术 处理器/DSP 控制/MCU RF/无线
私信 关注
[资料]

Labview 串口 2013版本

使用labview2013编写的串口程序
功能:
1.可以设置数据接收协议和数据发送协议。
2.可以发送或者接收u8/s8/u6/s16/u32/s32/float/double等多种数据类型。
3.可已设置接收数据长度/类型。
4.可设置发送数据长度和类型
5.可自动记录上次的数据协议和串口波特率等
捕获.PNG
游客,如果您要查看本帖隐藏内容请回复


单片机发送使用实例:

1.单片机发送协议:: 0xFFD8 数据1  数据2  数据3   数据  4 0xFFD9

示例代码:
  1. union DOUBLE_CHAR
  2. {
  3.     char    char_buf[8];
  4.     double   double_buf;                 
  5. }double_char;
  6. union FLOAT_CHAR
  7. {
  8.     char    char_buf[4];
  9.     float   float_buf;                  
  10. } float_char;
  11. union UNINT_CHAR
  12. {
  13.     char    char_buf[4];
  14.     unsigned int     int_buf;                  //车轮的实际速度   单位:脉冲/s
  15. }unint_char;
  16. /**
  17. * @Description: 发送到电脑上位机的数据,连接在uart2上
  18. * @param  current - 电机电流值(A)               
  19. * @param  speed   - 电机速度
  20. * @note1  :数据协议   0xFFD8 电机电流float型(4Bytes)   电机速度float型(4Bytes) 0xFFD9
  21. */               
  22. void report_data(float current,float speed,float angle,float target_speed)
  23. {
  24.         u8 i;
  25.         
  26.         uart3_tx.buf[0] = 0xFF;
  27.         uart3_tx.buf[1] = 0xD8;
  28.         float_char.float_buf=current;
  29.         for (i=0;i<4;i++)
  30.         {
  31.                 uart3_tx.buf[i+2] = float_char.char_buf[3-i];        //注意需要倒着发送
  32.         }
  33.         float_char.float_buf=speed;
  34.         for (i=0;i<4;i++)
  35.         {
  36.                 uart3_tx.buf[i+6] = float_char.char_buf[3-i];        //注意需要倒着发送
  37.         }
  38.     float_char.float_buf=angle;
  39.         for (i=0;i<4;i++)
  40.         {
  41.                 uart3_tx.buf[i+10] = float_char.char_buf[3-i];        //注意需要倒着发送
  42.         }

  43.         float_char.float_buf=target_speed;
  44.         for (i=0;i<4;i++)
  45.         {
  46.                 uart3_tx.buf[i+14] = float_char.char_buf[3-i];        //注意需要倒着发送
  47.         }         
  48.         uart3_tx.buf[18] = 0xFF;
  49.         uart3_tx.buf[19] = 0xD9;   

  50.     USART3_DMA_Send_Once_Data(uart3_tx.buf, 20);  
  51. }



  52. /**
  53. * @Description: 上位机发送给单片机,连接在uart3上
  54. * @note1  :数据协议   0xFFD8 模式0x00(1Bytes)   HT值0x00(1Bytes) 0xFFD9
  55. */        
  56. void receive_check(void)
  57. {
  58.         if(uart3_rx.len==6)
  59.         {
  60.                 if (uart3_rx.buf[0]==0xFF&&uart3_rx.buf[1]==0xD8) //数据头不对,则重新开始寻找0x55数据头
  61.                 {

  62.                         system_info.HT=(double)uart3_rx.buf[3];
  63.                         switch(uart3_rx.buf[2])
  64.                         {
  65.                                 case 0x00:  //
  66.                                         system_info.rehab_mode=No_Mode;
  67.                                         system_info.work_mode =Run_Zero;
  68.                                 break;
  69.                                 case 0x01:  //
  70.                     system_info.rehab_mode=Judge_Mode;
  71.                                 break;
  72.                                 case 0x02:  //
  73.                     system_info.rehab_mode=Passive_Mode;
  74.                                 break;
  75.                                 case 0x03:  //
  76.                                         system_info.rehab_mode=Induce_Node;
  77.                                 break;
  78.                                 case 0x04:  //
  79.                                         system_info.rehab_mode=Active_Mode;
  80.                                         break;
  81.                                 default  :
  82.                                         break;
  83.                         }
  84.             
  85.                 }
  86.                 uart3_rx.len=0;        
  87.         }
  88. }







  89. /**
  90. * @Description: 串口3report进程
  91. */

  92. extern double current_d;
  93. void thread_report( void *parameter )
  94. {
  95.     float temp;
  96.         //uart3_tx.buf[0]        = 0xFF; /* 帧头 */
  97.         //uart3_tx.buf[1]        = 0xD8; /* 帧头 */
  98.     //uart3_tx.buf[6]        = 0xFF; /* 帧尾 */
  99.         //uart3_tx.buf[7]        = 0xD9; /* 帧尾 */
  100.    
  101.     /* 初始化静态信号量,初始值是0 */
  102.     rt_sem_init( &report_sem, "report", 0, RT_IPC_FLAG_FIFO );
  103.     USART3_DMA_Init(115200);        
  104.     while (1)
  105.     {
  106.         rt_sem_take( &report_sem, 10 );                 //10ms发送一次
  107.                 //temp=motor.target_speed /24.45f*1000;
  108.    
  109.             report_data(motor.current.current, output_shaft.speed*1000,output_shaft.postion,current_d);
  110.         
  111.             receive_check();
  112.     }
  113. }
thread_report.zip (4.54 KB)
(下载次数: 157, 2017-7-18 19:52 上传)

回帖(162)

王迺心

2017-7-19 11:04:30
谢谢分享,先收藏一下~~~~~~~
举报

程曦

2017-7-19 14:47:49
好东西
举报

高鹏

2017-7-19 15:00:01
膜拜大神
举报

张振华

2017-7-20 10:01:16
谢谢分享                  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分