a842389740 发表于 2019-6-13 23:07:25

求助!串口接收到的sbus数据不对!

硬件已经取反了,代码如下,串口接到的数据就是不对,快崩溃了,每次都是第二个字节是0F,而且拨遥控器数据也不变。遥控器是用的microzone和配套的接收机。
void SBUS_Configuration(void)
{
        GPIO_InitTypeDefGPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDefNVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
       

        //???100000 8???? ???? 2????
        USART_InitStructure.USART_BaudRate = 100000;
        USART_InitStructure.USART_WordLength = USART_WordLength_9b;
        USART_InitStructure.USART_StopBits = USART_StopBits_2;
        USART_InitStructure.USART_Parity = USART_Parity_Even;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

        USART_Init(USART3, &USART_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
        USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);

        USART_Cmd(USART3, ENABLE);
}




/**
*/
void USART3_IRQHandler(void)
{
        uint8_t res;
        uint8_t clear = 0;
        static uint8_t Rx_Sta = 1;
       
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
        {
                res =USART3->DR;
                USART3_RX_BUF = res;
        }
        else if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET)
        {
                clear = USART3->SR;
                clear = USART3->DR;
                USART3_RX_BUF = Rx_Sta - 1;
                Rx_Sta = 1;
        }
}

int main(void)
{
        SBUS_Configuration();

//        extern uint16_t CH;
//       u8 USART3_RX_BUF;//
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
while(1){
        while(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET)
        {
                USART_SendData(USART3,USART3_RX_BUF);



求大佬相助!!

a842389740 发表于 2019-6-13 23:09:11

刚开始自己做飞控 不懂的太多了 实在不知道问题出在哪

sylar.z 发表于 2019-6-13 23:36:17

USART_InitStructure.USART_BaudRate = 100000;
你设置的比特率是100000,不是常规值(比如115200)。你确认一下波特率是否匹配。

a842389740 发表于 2019-6-13 23:40:12

sylar.z 发表于 2019-6-13 23:36
USART_InitStructure.USART_BaudRate = 100000;
你设置的比特率是100000,不是常规值(比如115200)。你确 ...

是正确的..我一直怀疑我程序写的有问题

a842389740 发表于 2019-6-13 23:40:28

19 0F EC E3 5E 3E C8 97 F0 84 27 3C 19 8A FA D4 A7 3E F5 A9 4F 7D EA 53 00 00 00 00 00 00 00 00 00 00这是接到的数据

sylar.z 发表于 2019-6-13 23:47:11

对程序而言,串口能收发,程序应该是正常的。数据不对,很大可能是两端的配置参数不匹配。也有可能是线接触不好。

sylar.z 发表于 2019-6-13 23:52:27

a842389740 发表于 2019-6-13 23:40
19 0F EC E3 5E 3E C8 97 F0 84 27 3C 19 8A FA D4 A7 3E F5 A9 4F 7D EA 53 00 00 00 00 00 00 00 00 00 0 ...

正常应该是什么数据?

a842389740 发表于 2019-6-14 00:00:32

sylar.z 发表于 2019-6-13 23:52
正常应该是什么数据?

正常应该是起始位是0F 结束位是00 一共25个值

sylar.z 发表于 2019-6-14 00:06:41

a842389740 发表于 2019-6-14 00:00
正常应该是起始位是0F 结束位是00 一共25个值


你接收的数据就是从第二个字节开始放的(红色),第一个字节放的是数据长度(蓝色)

a842389740 发表于 2019-6-14 00:12:27

sylar.z 发表于 2019-6-14 00:06
你接收的数据就是从第二个字节开始放的(红色),第一个字节放的是数据长度(蓝色)
...

是的 但是我主函数里写的也是从第二个数据接收的 老哥。
页: [1] 2
查看完整版本: 求助!串口接收到的sbus数据不对!