串口數(shù)據(jù)求解決

http://www.findthetime.net/bbs/thread-83618-1.html即與此貼問題相同,求解決。

image.png八位數(shù)據(jù)收發(fā)沒問題的,超過八位就丟了


您好,問題可以描述全面一些嗎,是否有涉及到操作flash,操作flash緩沖區(qū)時(shí)有4字節(jié)對(duì)齊嗎。

是否在串口接收中斷里加了打印信息,如果打印過多,會(huì)造成接收數(shù)據(jù)丟包。
希望提供更多信息,可以發(fā)送程序至zhaiyw@wch.cn

不使用緩存Buff,可以在啟用uart中斷后,參考下面的接收中斷代碼。

__INTERRUPT

__HIGH_CODE

void UART1_IRQHandler(void)

{

? ? volatile uint8_t i;


? ? switch(UART1_GetITFlag())

? ? {

? ? ? ? case UART_II_LINE_STAT: // 線路狀態(tài)錯(cuò)誤

? ? ? ? {

? ? ? ? ? ? UART1_GetLinSTA();

? ? ? ? ? ? break;

? ? ? ? }


? ? ? ? case UART_II_RECV_RDY: // 數(shù)據(jù)達(dá)到設(shè)置觸發(fā)點(diǎn)

? ? ? ? ? ? for(i = 0; i != trigB-1; i++)//適用于trigB大于1的情況

? ? ? ? ? ? {

? ? ? ? ? ? ? ? uint8_t Rdata = UART1_RecvByte();

? ? ? ? ? ? ? ? UART1_SendByte(Rdata);

? ? ? ? ? ? }

? ? ? ? ? ? break;


? ? ? ? case UART_II_RECV_TOUT: // 接收超時(shí),暫時(shí)一幀數(shù)據(jù)接收完成

? ? ? ? ? ? while(R8_UART1_RFC)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? uint8_t Rdata = UART1_RecvByte();

? ? ? ? ? ? ? ? UART1_SendByte(Rdata);

? ? ? ? ? ? }

? ? ? ? ? ? break;


? ? ? ? case UART_II_THR_EMPTY: // 發(fā)送緩存區(qū)空,可繼續(xù)發(fā)送

? ? ? ? ? ? break;


? ? ? ? case UART_II_MODEM_CHG: // 只支持串口0

? ? ? ? ? ? break;


? ? ? ? default:

? ? ? ? ? ? break;

? ? }

}



郵箱發(fā)你啦,求解決j_0017.gif


修改后的代碼已發(fā)送,請(qǐng)查收。


我知道原因?? 接收超時(shí)中斷? 不是沒沒有收到數(shù)據(jù)就會(huì)中斷? 感覺這里就是個(gè)坑哦;

接收超時(shí)中斷 :是指數(shù)據(jù)小于緩存區(qū)才會(huì)觸發(fā)超時(shí)中斷 ,但是有三個(gè)點(diǎn)需要注意 1.緩沖器滿==接收數(shù)據(jù)且相等就不會(huì)進(jìn)超時(shí)中斷。


程序也發(fā)我一份謝謝。

個(gè)人信息保護(hù),已隱藏




222ec8493db28c36afa0c37dfdb4c40.png

您可以參考EVT包中的UART例程,在中斷服務(wù)函數(shù)中作適當(dāng)修改,for循環(huán)中的trigB改為trigB-1,trigB默認(rèn)例程中使用7。如下圖。客戶的代碼要保密,不能發(fā)哦。

9c13cb1a54c25e3ad55f05015d3c62f.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频