问题描述:
主机发送 0x55 0x04 0x02 0x06 这4个字节的数据,但是从机每次进串口中断都检查到会溢出错误标志位
并且主机发送一帧数据下面从机也只收到 0x55 0x02这两个数据。
通信方式是rs232,波特率是9600,用示波器看了波形很好,可以排除硬件故障
- /****************************
- *名称: void USART_Config(USART_TypeDef* USARTx)
- *功能: 初始化串口
- *入口参数: 串口号
- *出口参数: 无
- *说明: 填入需要配置的串口号即可配置该串口的参数
- *调用方法: 无
- *****************************/
- void USART_Config(USART_TypeDef* USARTx,u32 baud){
- USART_InitTypeDef USART_InitStructure;
- USART_InitStructure.USART_BaudRate = baud; //速率9600bps
- USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位8位
- USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位1位
- USART_InitStructure.USART_Parity = USART_Parity_No; //偶校验
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
- USART_Init(USARTx, &USART_InitStructure); //配置串口参数函数
- USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE); //使能接收中断
- USART_DMACmd(USARTx,USART_DMAReq_Tx,ENABLE);
- /* Enable the USARTx */
- USART_Cmd(USARTx, ENABLE);
- }
- void USART3_IRQHandler(void)
- {
- if(USART_GetFlagStatus(USART3,USART_FLAG_ORE)==SET)
- {
- USART_ClearFlag(USART3,USART_FLAG_ORE);
- if(count<50)
- rxb[count++]= USART_ReceiveData(USART3);
- else
- count = 0;
- }
- if(USART_GetFlagStatus(USART3,USART_FLAG_NE)==SET)
- {
- USART_ClearFlag(USART3,USART_FLAG_NE);
- USART_ReceiveData(USART3);
- }
- if(USART_GetFlagStatus(USART3,USART_FLAG_FE)==SET)
- {
- USART_ClearFlag(USART3,USART_FLAG_FE);
- USART_ReceiveData(USART3);
- }
- if(USART_GetITStatus(USART3, USART_FLAG_RXNE) == SET) //判断读寄存器是否非空
- {
- USART_ClearITPendingBit(USART3,USART_IT_RXNE);
- // Read one byte from the receive data register
- RxBuf[RxCounter++]= USART_ReceiveData(USART3);
- if(RxBuf[0] != 0x55) //帧头不对
- RxCounter = 0;
- if(RxCounter>=4 && RxBuf[1]==RxCounter)//接收完毕
- {
- // RxBuf[0]=0;
- RxCounter=0;
- Rx** = 1; //置位接收标志位
- }
- }
-
- if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
- {
- USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
- }
- }
|