有人問過這個問題:
「用串列埠中斷接收比較好理解,只要接收快取接收到資料,標誌位就會置位,然後進入中斷服務程式讀取接收快取中的資料,但是在傳送時,應該是在資料傳送出去之後傳送標誌位才會置位(我是msp430微控制器),那麼此時等資料傳送出去之後進入中斷又有什麼意義呢?到底如何通過串列埠中斷來傳送資料呢?」
通過閱讀 stm32 官方庫的**,我找到了答案。
這裡有兩個細節問題需要注意:
第乙個位元組是怎樣傳送的?因為發第乙個位元組之前,並沒有傳送位元組完成所觸發的中斷,那第乙個位元組怎麼被傳送出去?這關係到中斷在硬體層面的觸發方式:如果是電平觸發的中斷,在中斷式傳送函式中會使能相應的中斷,因為傳送緩衝區為空,其所處的電平狀態就在中斷功能被使能後會直接觸發中斷,導致第乙個位元組在中斷處理函式中被傳送出去;如果是電平跳變觸發的中斷,為了引發中斷,只好把第乙個位元組在中斷式傳送函式中「手動」傳送出去,由此引發乙個中斷的「多公尺諾」效應,把後面的位元組依次傳送出去。參考:
怎麼才算「完成」?完成是用引數指定的欲傳送位元組數決定的,但傳送達到指定數目,中斷處理函式中就失能相應中斷,於是中斷的「多公尺諾」鏈條停止。
串列埠中斷接收資料方式
微控制器中斷能夠及時響應外部觸發事件,在中斷函式中處理外部事件,處理完成之後退回到中斷點。中斷服務函式應該能最快速的解決觸發事件,快速退出中斷,不宜在中斷中處理複雜的執行演算法。所以中斷函式的編寫盡量簡單明瞭快速,下面以串列埠接收中斷為例來說明中斷處理函式的寫法。1.設定乙個全域性標誌,觸發中斷之後...
微控制器FIFO串列埠中斷傳送資料
以51微控制器為例,直接上乾貨 define buffer size 128 typedef struct uartfifo static volatile uartfifo uart1txfifo void uart1init void void uart1putc unsigned char d...
STM32串列埠中斷方式接收
經過除錯在stm32f101cbt6中實現通訊。注意還要配乙個ttl轉usb介面,才能進行通訊。實現字串回發 include stm32f10x it.h include stm32f10x conf.h void rcc configuration void 時鐘配置 void usart con...