问答

汇集网友智慧,解决技术难题

taijing33

TA的家园币:288  

  • 有偿请教关于18F66k22串口假死问题。

    本帖最后由taijing33于2020-11-1615:17编辑问题描述:使用了串口1和2,接受都是中断高优先级,发送没用中断。串口1连接的485设备,实际外部没用连接使用。串口2通过232连接的串口屏。问题出在串口2上。现在的问题是客户反应屏幕不能设置,显示正常,经判断就是串口2不能进入接受中断了,但是发送是正常的,就是假死了、。网上百度了有关信息。程序中也做了帧错误和数据溢出处理。我在办公室连续测了2天,各种乱按摔打,。就是不能重现客户遇到的问题。很是郁闷。但是客户反应的真真切切。以前在程序操作内部ee的时候关闭了中断,串口屏操作稍快就会,造成串口假死,但是我现在已经处理了。本以为解决了这个问题,没想到到客户哪里,还是有这种情况。这种情况在客户哪里也是几天有可能出现。但是一定会出现。串口屏操作一次发给单片机的数据一般不超过20个。我的串口2接受处理逻辑。大体意思是串口有数据中断时,赋值Comdelay=2;一股脑的吧所有数据都接受进数组Usart1_rbuff[100];数据一直有的话Comdelay一直等于2;然后再定时器中断中Comdelay--;定时器是10ms进一次中断。当Comdelay==0认为没有数据了,这时候在接收到的数据中找出振头和帧尾并进行CRC运算确认数据的正确。下面是代码:串口2和1的初始化代码voidconfig_uart1(void){PMD1bits.RTCCMD=1;TRISCbits.TRISC7=1;TRISCbits.TRISC6=0;TXSTA1bits.TXEN=1;PIE1bits.TX1IE=0;//????TXPIE1bits.RC1IE=1;//RX//INITIALIZINGEUART,9bits,9600baudratePIR1bits.TX1IF=0;//ClearEUSARTTransmitInterruptFlagbitPIR1bits.RC1IF=0;//ClearEUSARTReceiveInterruptFlagbitTXSTA1=0x24;//Synchronousmode:Selects9-bittransmission,HighspeedBRGH=1,TransmitenabledRCSTA1=0x90;//Synchronousmode:Selects9-bitreception,ContinuousReceiveEnable,//Serialportenabled(configuresRX/DTandTX/CKpinsasserialportpins)//SPBRG1=BAUD9600;//11.0592MHz,BRGH=1,9600bpsSPBRG1=51

    串口 TE interrupt inter ip

    2020-11-16 3