STM32串口使用DMA方式接收數(shù)據(jù)可以減小CPU的開銷。對(duì)于接收定長(zhǎng)數(shù)據(jù),可以將DMA接收緩沖區(qū)的長(zhǎng)度設(shè)定為待接收數(shù)據(jù)的長(zhǎng)度,這樣利用DMA的傳輸完成中斷DMAx_IT_TCy就可以知道已經(jīng)接收了一幀數(shù)據(jù)。對(duì)于接收不定長(zhǎng)數(shù)據(jù),如何知道意見完成了數(shù)據(jù)的接收呢?可以結(jié)合串口的空閑中斷來(lái)實(shí)現(xiàn)。具體做法見http://wenku.baidu.com/link?url=ZGGaGpvy2dbSqoBaoTuXwkFBz0uc_hs3h02ILrIaQOlV_EulFZCSSv1NFgFNIBX0K-F43exnBIclpHNltWVpdzDgi0o-AvKJKsi4BpxGOhq
空閑中斷是在檢測(cè)到在數(shù)據(jù)收受后,總線上在一個(gè)字節(jié)的時(shí)間內(nèi)沒有再接收到數(shù)據(jù)時(shí)發(fā)生。即串口的RXNE位被置位之后才開始檢測(cè),檢測(cè)到空閑之后,串口的CR1寄存器的IDLE位被硬件置1,必須采用軟件將IDLE位清零才能避免反復(fù)進(jìn)入空閑中斷。具體的做法是先讀取USART_SR,再讀取USART_DR。需要注意的是,不能采用庫(kù)函數(shù)USART_ClearFlag()或者USART_ClearItPending()來(lái)清除IDEL標(biāo)注,因?yàn)檫@兩個(gè)函數(shù)接收的中斷標(biāo)志位僅包括:
USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5). USART_FLAG_LBD: LIN Break detection flag. USART_FLAG_TC: Transmission Complete flag. USART_FLAG_RXNE: Receive data register not empty flag.新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注