硬件已经取反了,代码如下,串口接到的数据就是不对,快崩溃了,每次都是第二个字节是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++]); } } 求大佬相助!! |
你设置的比特率是100000,不是常规值(比如115200)。你确认一下波特率是否匹配。
评分
查看全部评分
是正确的..我一直怀疑我程序写的有问题
正常应该是什么数据?
正常应该是起始位是0F 结束位是00 一共25个值
你接收的数据就是从第二个字节开始放的(红色),第一个字节放的是数据长度(蓝色)
是的 但是我主函数里写的也是从第二个数据接收的 老哥。
楼主设置了9位数据位、2位停止位好像不对呀。
评分
查看全部评分
主函数里写的是发送数据,而且没看到i的定义和处理。你的这串数据是哪里收到的?
评分
查看全部评分