• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: 其他
  • 标签: SBUS  

资源简介

sbus的解析与合成,用于sbus通讯;

资源截图

代码片段和文件信息

#include “Sbus.h“
#include “bsp_usart1.h“
#include “string.h“

//不懂的朋友可以看我的博客,有一片sbus的内容

uint16_t values[16]={0};


void sbus_out(uint16_t num_values)
{
int i=0;
uint16_t value=0;
uint8_t byteindex = 1;
uint8_t offset = 0;
uint8_t oframe[25] = { 0 };
memset(oframe025);
oframe[0]=0x0f;
oframe[24]=0x00;

for (i = 0; (i < num_values) && (i < 16); ++i)
{
value = (unsigned short)(((values[i] - SBUS_SCALE_OFFSET) / SBUS_SCALE_FACTOR) + .5f);
if (value > 0x07ff)
{
value = 0x07ff;
}

while (offset >= 8)
{
++byteindex;
offset -= 8;
}

oframe[byteindex] |= (value << (offset)) & 0xff;
oframe[byteindex + 1] |= (value >> (8 - offset)) & 0xff;
oframe[byteindex + 2] |= (value >> (16 - offset)) & 0xff;
offset += 11;
}

for (i=0;i<25;i++)
{
while(USART_GetFlagStatus(USART1USART_FLAG_TC) == RESET);
USART_SendData(USART1 (uint16_t)oframe[i]);     
}
}


void sbus_decode(unsigned char *frame)
{
unsigned int pick=0channel=0value1=0piece=0;
const struct sbus_bit_pick *decode;
for (channel = 0; channel < 16; channel++) 
{
value1 = 0;

for (pick = 0; pick < 3; pick++) 
{
decode = &sbus_decoder[channel][pick];

if (decode->mask != 0) 
{
piece = frame[1 + decode->byte];
piece >>= decode->rshift;
piece &= decode->mask;
piece <<= decode->lshift;

piece &= 0x07ff;

value1 |= piece;
}
}
values[channel] = (uint16_t)(value1 * SBUS_SCALE_FACTOR + .5f) + SBUS_SCALE_OFFSET;
if(channel==1)
{
values[channel]=3029-values[channel];
}
}
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-10-28 17:38  SBUS\
     文件        1662  2016-10-28 17:40  SBUS\Sbus.c
     文件        1883  2016-10-28 17:38  SBUS\Sbus.h

评论

共有 条评论