求助!串口接收到的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);
}
}
求大佬相助!!
刚开始自己做飞控 不懂的太多了 实在不知道问题出在哪 USART_InitStructure.USART_BaudRate = 100000;
你设置的比特率是100000,不是常规值(比如115200)。你确认一下波特率是否匹配。 sylar.z 发表于 2019-6-13 23:36
USART_InitStructure.USART_BaudRate = 100000;
你设置的比特率是100000,不是常规值(比如115200)。你确 ...
是正确的..我一直怀疑我程序写的有问题 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这是接到的数据 对程序而言,串口能收发,程序应该是正常的。数据不对,很大可能是两端的配置参数不匹配。也有可能是线接触不好。 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 ...
正常应该是什么数据? sylar.z 发表于 2019-6-13 23:52
正常应该是什么数据?
正常应该是起始位是0F 结束位是00 一共25个值 a842389740 发表于 2019-6-14 00:00
正常应该是起始位是0F 结束位是00 一共25个值
你接收的数据就是从第二个字节开始放的(红色),第一个字节放的是数据长度(蓝色)
sylar.z 发表于 2019-6-14 00:06
你接收的数据就是从第二个字节开始放的(红色),第一个字节放的是数据长度(蓝色)
...
是的 但是我主函数里写的也是从第二个数据接收的 老哥。
页:
[1]
2