一次進入不了DMA中斷服務函數問題的排查,主要原因是在中斷服務函數里面使用了printf函數。詳細情況是:我用獨立模式分別運行ADC2和ADC3,並在他們的DMA傳輸中斷函數里面編寫算法。ADC2的采樣和DMA傳輸和中斷的處理均正常,但測試ADC3的DMA中斷處理時一直在串口顯示不出來值,檢查了中斷服務函數的名稱跟.s文件里的中斷函數名稱是一致的。加上之前ADC2的DMA傳輸驗證正常,就一點一點核對,發現配置也沒有問題,但就是進入不了中斷服務函數。排查了好幾天,發現問題出在中斷服務函數里面了,為了省事兒直接在中斷服務函數里面使用了printf函數來在串口輸出值,猜測是printf函數占用時間較長,而DMA兩次中斷時間極短(我只傳輸16個數據),所以DMA中斷“卡住了”。於是將printf函數放回在main函數里面,然后,今天天氣好晴朗,處處好風光,好風光……,精力都放在檢查前面配置上面去了,沒想到問題出在這兒,真是蠢得想一頭撞死,希望有初學者避開這個彎路,分享給大家。好了,我撞牆去了…