找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2933|回复: 0
打印 上一主题 下一主题
收起左侧

C_NXP_K60接收数据 代码

[复制链接]
跳转到指定楼层
楼主
C_NXP_K60接收数据 代码

完整代码下载:
C_NXP_K60接收数据.rar (1.63 MB, 下载次数: 10)




  1. #include "gpio.h"
  2. #include "common.h"
  3. #include "uart.h"
  4. #include "mcg.h"
  5. #include "packet.h"

  6. #include <string.h>
  7. #include <stdio.h>

  8. static Packet_t pktB; /* used for data anaysis */
  9. bool DataReceived = false;

  10. uint8_t ID;
  11. int16_t AccRaw[3];
  12. int16_t GyoRaw[3];
  13. int16_t MagRaw[3];
  14. float Eular[3];
  15. int32_t Pressure;

  16. void UART4_RX_TX_IRQHandler(void)
  17. {
  18.     uint8_t ch;
  19.     UART_Type *UARTx = (UART_Type*)UART4;

  20.     if(UARTx->S1 & UART_S1_RDRF_MASK)
  21.     {
  22.         ch = (uint8_t)UARTx->D;
  23.         Packet_Decode(ch);
  24.     }
  25.    
  26.     if(UARTx->S1 & UART_S1_OR_MASK)
  27.     {
  28.         ch = (uint8_t)UARTx->D;
  29.         UARTx->S1 |= UART_S1_OR_MASK;
  30.     }
  31. }


  32. void OnDataReceived(Packet_t *pkt)
  33. {
  34.     memcpy(&pktB, pkt, sizeof(Packet_t));
  35.     DataReceived = true;
  36. }


  37. int main(void)
  38. {
  39.     DelayInit();
  40.     DelayMs(10);
  41.    
  42.     /* 使用 D6 D7输出结果 */
  43.     UART_Init(UART0_RX_PD06_TX_PD07, 115200);
  44.     printf("IMU receive demo\r\n");
  45.    
  46.     /* 使用E24 E25接收IMU数据 */
  47.     UART_Init(UART4_RX_PE25_TX_PE24, 115200);

  48.     Packet_t pktA; /* used for data receive */
  49.     Packet_DecodeInit(&pktA, OnDataReceived);
  50.    
  51.     /* open interrupt */
  52.     UART_SetIntMode(HW_UART4, kUART_IntRx, true);
  53.    
  54.     while(1)
  55.     {
  56.         if(DataReceived == true)
  57.         {
  58.             /* 按出厂默认输出协议接收
  59.             输出
  60.             0x5A+0xA5+LEN_LOW+LEN_HIGH+CRC_LOW+CRC+HIGH+ 0x90+ID(1字节) + 0xA0+Acc(加速度6字节) + 0xB0+Gyo(角速度6字节) + 0xC0+Mag(地磁6字节) + 0xD0 +AtdE(欧拉角6字节) + 0xF0+Pressure(压力4字节)
  61.             */
  62.             if(pktB.buf[0] == kItemID) /* user ID */
  63.             {
  64.                 ID = pktB.buf[1];
  65.             }
  66.             
  67.             if(pktB.buf[2] == kItemAccRaw)  /* Acc raw value */
  68.             {
  69.                 memcpy(AccRaw, &pktB.buf[3], 6);
  70.             }
  71.             
  72.             if(pktB.buf[9] == kItemGyoRaw)  /* gyro raw value */
  73.             {
  74.                 memcpy(GyoRaw, &pktB.buf[10], 6);
  75.             }
  76.             
  77.             if(pktB.buf[16] == kItemMagRaw)  /* mag raw value */
  78.             {
  79.                 memcpy(MagRaw, &pktB.buf[17], 6);
  80.             }
  81.             
  82.             if(pktB.buf[23] == kItemAtdE)  /* atd E */
  83.             {
  84.                 Eular[0] = ((float)(int16_t)(pktB.buf[24] + (pktB.buf[25]<<8)))/100;
  85.                 Eular[1] = ((float)(int16_t)(pktB.buf[26] + (pktB.buf[27]<<8)))/100;
  86.                 Eular[2] = ((float)(int16_t)(pktB.buf[28] + (pktB.buf[29]<<8)))/10;
  87.             }
  88.             
  89.             if(pktB.buf[30] == kItemPressure)
  90.             {
  91.                 memcpy(&Pressure, &pktB.buf[31], 4);
  92.             }
  93.             
  94. //             printf("AccRaw: %d %d %d\r\n", AccRaw[0], AccRaw[1], AccRaw[2]);
  95. //             printf("GyoRaw: %d %d %d\r\n", GyoRaw[0], GyoRaw[1], GyoRaw[2]);
  96. //             printf("MagRaw: %d %d %d\r\n", MagRaw[0], MagRaw[1], MagRaw[2]);
  97.                printf("Angle:    %0.2f %0.2f %0.2f\r\n", Eular[0], Eular[1], Eular[2]);
  98. //             printf("Pressure: %d Pa\r\n", Pressure);
  99.              DataReceived = false;
  100.          }
  101.     }
  102. }

  103. void HardFault_Handler(void)
  104. {
  105.     printf("HardFault_Handler\r\n");
  106.     while(1);
  107. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表