你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
a842389740 提问时间:2019-6-13 23:07 /
硬件已经取反了,代码如下,串口接到的数据就是不对,快崩溃了,每次都是第二个字节是0F,而且拨遥控器数据也不变。遥控器是用的microzone和配套的接收机。
void SBUS_Configuration(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef  NVIC_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[Rx_Sta++] = res;
        }
        else if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET)
        {
                clear = USART3->SR;
                clear = USART3->DR;
                USART3_RX_BUF[0] = Rx_Sta - 1;
                Rx_Sta = 1;
        }
}

int main(void)
{
        SBUS_Configuration();

//        extern uint16_t CH[18];
//         u8 USART3_RX_BUF[26];//
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
while(1){
        while(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET)
        {
                USART_SendData(USART3,USART3_RX_BUF[i++]);



求大佬相助!!
收藏 评论14 发布时间:2019-6-13 23:07

举报

14个回答
a842389740 回答时间:2019-6-13 23:09:11
刚开始自己做飞控 不懂的太多了 实在不知道问题出在哪
sylar.z 回答时间:2019-6-13 23:36:17
USART_InitStructure.USART_BaudRate = 100000;
你设置的比特率是100000,不是常规值(比如115200)。你确认一下波特率是否匹配。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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个值

图1.jpg
你接收的数据就是从第二个字节开始放的(红色),第一个字节放的是数据长度(蓝色)
a842389740 回答时间:2019-6-14 00:12:27
sylar.z 发表于 2019-6-14 00:06
你接收的数据就是从第二个字节开始放的(红色),第一个字节放的是数据长度(蓝色)
...

是的 但是我主函数里写的也是从第二个数据接收的 老哥。
wenyangzeng 回答时间:2019-6-14 07:14:28
本帖最后由 wenyangzeng 于 2019-6-14 11:59 编辑

楼主设置了9位数据位、2位停止位好像不对呀。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

sylar.z 回答时间:2019-6-14 13:43:12
a842389740 发表于 2019-6-14 00:12
是的 但是我主函数里写的也是从第二个数据接收的 老哥。

主函数里写的是发送数据,而且没看到i的定义和处理。你的这串数据是哪里收到的?
a842389740 回答时间:2019-6-15 23:44:44
谢谢大家 问题解决了 还是C语言功底太差了 USART3_RX_BUF[i++]是先发送数据再自加

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2 自给自足

查看全部评分

cangzhu 回答时间:2019-8-6 15:24:40
我最近在做高频头 老哥能留个联系方式交流一下吗
yxc17638910720 回答时间:2020-4-22 19:10:37
请问楼主用的什么显示接收到的数据的,我现在也在调sbus接收,请指教

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版