登录
创易栈 张帆 2017-09-22
void USART_Receive(USART_TypeDef* USARTx)
{
if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)
{
USART_ClearFlag(USARTx,USART_FLAG_RXNE);
s[0]=USART_ReceiveData(USART1);
delay(1000);
s[1]=USART_ReceiveData(USART1);
delay(1000);
s[2]=USART_ReceiveData(USART1);
delay(1000);
write_char(s[0],s[1],s[2]); //发送数据到PC

//if(s[0]==0xff){GPIO_WriteBit(GPIOE,GPIO_Pin_0,Bit_SET);} // //write_char(s[0],s[1],s[2]);
// query_uart_command(); //命令判断
}
}
上面程序在
发送FF的时候收到FF FF FF
发送FF 22的时候收到FF 22 22
发送FF 22 33时收到FF 22 22
之后再发送数据时串口不响应!!
请高手指点
10积分

悬赏完成 ,48小时抢答者被选中的人可获得赏金

回答
  • 创易栈 大圣 3 积分
    这个...
    0元 点击围观更多答案内容
    1 2017-09-22 11:52:30
  • 创易栈 L_Cpj  | 高速电路/信号完整性/ARM_FPGA/硬件 3 积分
    1.这...
    0元 点击围观更多答案内容
    1 2017-09-24 11:43:55
  • 创易栈 蓝图  | BLE/WIFI/MCU 3 积分
    你这...
    0元 点击围观更多答案内容
    0 2017-09-22 11:35:15
  • 创易栈 有芯人
    通过延时结束三个字节?这样做有问题吧。你这个程序,你收到第一个字节后,清标志,然后等待,再接收数据的时候标志位就还在啊,我认为没读完,data寄存器数值不变。最好一次接收一个字节,用中断判断,记得清读取标志位和中断标志位,delay太影响时序。
    展开
    1 2017-09-22 21:12:47
  • 创易栈 维森玛·纳莫帅  | WIFI
    stm32串口有个可以说是bug的地方,就是即使不使能溢出等其他错误中断的情况下,若发生溢出错误,仍会进入中断,而且常规检查中断的方法无法查到中断标志。所以办法就是在串口正常中断处理之后加清除中断的语句。具体网上可以找到。之前因为这个原因,程序经常死掉,结果是死在串口中断处理里,不停中断,有没有清除中断标志哦。
    展开
    1 2017-09-26 09:50:18
  • 创易栈 钱鑫磊
    这段程序问题比较大。要不你再看看官方的例程学习一下?
    展开
    0 2017-09-22 11:12:00
  • 创易栈 云FAE_1216  | MCU/硬件设计
    可以加我,帮你改程序
    展开
    0 2017-09-22 14:04:21
相关问题

copyright@2014-2016 emakerzone.com 粤ICP备16121718号-2 公安局备案44030502001031 粤公网