stm32 USART_IT_IDLE
而空閑幀的定義是:被視為完全由“1"組成的一個(gè)完整的數據幀,后面跟著(zhù)包含?數據的下一幀的開(kāi)始位。
關(guān)鍵是后面半句話(huà),要求有下一幀的開(kāi)始位,而你的情況恰巧沒(méi)有下一幀的開(kāi)始位(傳輸已經(jīng)結束),當然不會(huì )有中斷了。
舉例:
如果連續發(fā)送一串字符串“123”會(huì )發(fā)生空閑中斷嗎?
不會(huì ),因為沒(méi)有下一幀的開(kāi)始位。
如果進(jìn)了空閑中斷不手動(dòng)清零,會(huì )一直進(jìn)入空閑中斷。
所以用這個(gè)IDLEIE來(lái)結束DMA方式的接收,是合適的。唯一一個(gè)不合適的地方是:如果你發(fā)送一個(gè)字符串后,將DMA設置好接收傳輸方式,然后:對方?jīng)]響應,你一個(gè)字符也收不到,這時(shí)候,IDLEIE是不會(huì )來(lái)的,必須有個(gè)總超時(shí)檢測來(lái)結束DMA接收方式:因為IDLEIE中斷必須要有字符串收到,然后有一個(gè)字符的時(shí)間沒(méi)收下一個(gè)字符的起始位,才會(huì )發(fā)生。
另外,1個(gè)字符間隔的空閑就結束接收:是默認任何對方發(fā)送字節的間隔不大于1個(gè)字符間隔,是不符合Modbus-RTU協(xié)議的,RTU協(xié)議是3.5個(gè)字符時(shí)間,如果收到"a"后,停了2個(gè)字符時(shí)間,又收到"b",Modbus-RTU還是認為ab是同一幀的連續字符。
評論