http://www.findthetime.net/bbs/thread-83618-1.html即與此貼問題相同,求解決。
八位數(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ā)你啦,求解決
修改后的代碼已發(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ù),已隱藏
您可以參考EVT包中的UART例程,在中斷服務(wù)函數(shù)中作適當(dāng)修改,for循環(huán)中的trigB改為trigB-1,trigB默認(rèn)例程中使用7。如下圖。客戶的代碼要保密,不能發(fā)哦。