調(diào)試STM8/stm32串口時(shí)發(fā)現(xiàn)的問題
#pragma vector=ITC_IRQ_UART1_RX + 2
__interrupt void Uart1RxdInt(void)
{ //此函數(shù)內(nèi)已完成清中斷標(biāo)志
u8 ret;
if(UART1_GetFlagStatus(UART1_FLAG_RXNE)!=RESET)
{
tmp = UART1_ReceiveData8();
ret=UART_KbdPkgRead(tmp);
if(ret==0)
{
KBD_Flag_RECE=1;
}
}
}
我在ret的地方設(shè)了個(gè)斷點(diǎn),然后每次發(fā)送進(jìn)入中斷的時(shí)候發(fā)現(xiàn)可以停止在那,并且此時(shí)接受的數(shù)據(jù)的確也是0x01,然后有全速運(yùn)行,接受的數(shù)據(jù)也是0x02,在全速運(yùn)行就可能又是0x01或者根本不會停下來,
此時(shí)我才知道我犯了一個(gè)錯(cuò)誤,當(dāng)發(fā)送一串?dāng)?shù)據(jù)時(shí),斷點(diǎn)不應(yīng)該設(shè)在中斷內(nèi),因?yàn)閏pu在斷點(diǎn)停留處,她是不會停下的,也就是那串?dāng)?shù)據(jù)會被錯(cuò)過,如果你發(fā)送一個(gè)數(shù)字,那就不會錯(cuò)過了。
接下來該怎么辦呢?
進(jìn)入中斷的函數(shù),比如我的是UART_KbdPkgRead()。進(jìn)入后可以編寫一個(gè)小程序,用來判斷接受得到數(shù)據(jù)是否是要發(fā)送的,比如if(dat==0x01),if(dat==0x02).這樣在他前邊設(shè)置斷點(diǎn),用來判斷這一串?dāng)?shù)據(jù)是否被單片機(jī)接收到了。
評論