ch582m串口接收到的數(shù)據(jù)保存只能是6字節(jié)以下或者6字節(jié)倍數(shù)

void UART3_IRQHandler(void)

{

? ? volatile uint8_t i = 0;


? ? switch(UART3_GetITFlag())

? ? {

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

? ? ? ? {

? ? ? ? ? ? UART3_GetLinSTA();

? ? ? ? ? ? break;

? ? ? ? }


? ? ? ? case UART_II_RECV_RDY: // 數(shù)據(jù)達到設置觸發(fā)點

? ? ? ? ? ? for(i = 0; i != (trigB -1); i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? RxBuff[i] = UART3_RecvByte();

? ? ? ? ? ? ? ? UART3_SendByte(RxBuff[i]);

? ? ? ? ? ? }

? ? ? ? ? ? break;


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

? ? ? ? ? ? i = UART3_RecvString(RxBuff);? ? ?//123456789

? ? ? ? ? ? PRINT("RxBuff_1=%s\r\n",RxBuff);? //67895

? ? ? ? ? ? UART3_SendString(RxBuff, i);? ? ? ?//123456789

? ? ? ? ? ? PRINT("RxBuff_2=%s\r\n",RxBuff);? ?//67895


//? ? ? ? ? ? strcpy(TestBuf1,RxBuff); //67895

//? ? ? ? ? ? EEPROM_ERASE(0, EEPROM_BLOCK_SIZE);

//? ? ? ? ? ? EEPROM_WRITE(0, TestBuf1, 1024); //串口接收到的數(shù)據(jù)保存到flash中:藍牙名字

//? ? ? ? ? ? PRINT("TestBuf1 = %s\n",TestBuf1);//67895

? ? ? ? ? ? PRINT("uart3_11111\n");

? ? ? ? ? ? break;


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

? ? ? ? ? ? break;


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

? ? ? ? ? ? break;


? ? ? ? default:

? ? ? ? ? ? break;

? ? }

? ? FLAG = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//接收數(shù)據(jù)完成,關閉停止進入睡眠的標志

}



我串口給uart3發(fā)送數(shù)據(jù)123456789,然后打印RxBuff顯示為67895(錯誤的);可ch582m的uart3在會給我的串口又是123456789(正確的);再次打印RxBuff又顯示為67895(錯誤的);

并且我發(fā)好像只能保存6字節(jié)以下,6的倍數(shù)會被自動清除;例如我發(fā)送123456,數(shù)據(jù)全是正確的,打印RxBuff顯示為7;我發(fā)送1234567,打印RxBuff顯示為7。

并且我對RxBuff的數(shù)據(jù)進行任何操作,里面的數(shù)據(jù)都是錯誤的,只有UART3_SendString的數(shù)據(jù)是對的。


請教一下為什么呢?

首先你需要了解下串口接收的機制,如fifo設置的為7,那接收7的整倍數(shù)的數(shù)據(jù)就不會產(chǎn)生超時中斷,如不是7的整整倍數(shù)則最后的剩下的不到七個字節(jié)的數(shù)據(jù)會在超時中斷中接收。

你的程序中接收中斷中接收了fifo-1個字節(jié),這樣寫是為了確保進入超時中斷,你用來接收數(shù)據(jù)的存放接收數(shù)據(jù)的RxBuff的地址是需要往上加的,然后超時中斷里面又從首地址開始放數(shù)據(jù),就把之前的覆蓋了,UART3_SendString之所以能對,是因為不止調(diào)用了一次,在接收中斷和超時中斷中都有,調(diào)用了兩次才把完整的數(shù)據(jù)發(fā)出去的。


請教一下我如何給RxBuff的地址往上加呢?我原先使用?strcat(TestBuf1,RxBuff) 來保存,進行字符拼接;本來是可以實現(xiàn)的,但是不知道為什么現(xiàn)在會亂碼了,發(fā)送6字節(jié)就不會。


例程已發(fā)送,注意查收。


你好,可以也發(fā)我一份例程嗎,謝謝


官方例程里面已經(jīng)做了透傳。

如果需要每次進入中斷都觸發(fā)超時,則此處做修改:

image.png


只有登錄才能回復,可以選擇微信賬號登錄

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