运行串口大师,设置完成后,RX不断接收数据,大多数为00.也有其他的。且速度越来越快,请问是什么原因?而自己发的数据很难看到。求解,等一晚上。如需其他代码也可一并贴上。
附中断函数代码 void USART1_IRQHandler(void) //串口1 中断服务程序,收到的字符回显到终端上 { unsigned int i; // GPIO_SetBits(GPIOC, GPIO_Pin_1);//点亮Led1测试是否进入中断 // GPIO_ResetBits(GPIOC, GPIO_Pin_1); if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断读寄存器是否非空 { /* Read one byte from the receive data register */ RxBuffer1[RxCounter1++] = USART_ReceiveData(USART1); //将读寄存器的数据缓存到接收缓冲区里 if(RxBuffer1[RxCounter1-2]==0x0d) //判断结束标志是否是0x0d { for(i=0; i< RxCounter1; i++) TxBuffer1[i] = RxBuffer1[i]; //将接收缓冲器的数据转到发送缓冲区,准备转发 rec_f=1; //接收成功标志 Rec_Len=RxCounter1; RxCounter1=0; // for(i=0; i<Rec_Len; i++) // USART_SendData(USART1,TxBuffer1[i]+2); // while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //USART_FLAG_TC发送完成标志位 } } if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) // USART_IT_TXE,发送中断 { USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //USART_ITConfig()使能或失能USART中断 } if(USART_GetITStatus(USART1, USART_IT_TC) != RESET) //发送完成状态 { tx_flag=1; } } 只要你把GPIO配置与板子一致,一般地,用ST的库是能正常工作的。
嗨,我现在搞它的USB,搞得头都大了 中断服务子函数中不要用 for循环,用if 通过多次进入中断处理。 还有发送中断要选择 发送寄存器空模式 或者 发送完中断模式 二选一 而不是两个都写,注意,进入中断后,软件清除中断标志位。
|