1. 程式人生 > >ARM STM32F中ADC中 規則通道 注入通道 序列暫存器(SQR JSQR)的使用方法

ARM STM32F中ADC中 規則通道 注入通道 序列暫存器(SQR JSQR)的使用方法

      STM32F中的ADC是十分強大的,使用方法多,暫存器多,操作也複雜。下面就來看看ADC中規則通道,注入通道及序列暫存器(SQR JSQR)到底該如何使用。

      第一,看看規則通道與注入通道的區別

     可以看到,我們常規的使用是規則通道,當有有一個觸發來個,就執行注入通道,注入通道好比“緊急通道”。

     一個不太恰當的比喻是規則通道組的轉換好比是程式的正常執行而注入通道組的轉換則好比是程式正常執行之外的中斷服務程式。

     這是根本區別,由此帶來的不同可以看晶片手冊。

     第二,看看四種模式

     (注:最後一種,“連線”應為“連續”)

    以上四種模式如何選擇呢? 通過CR1中的SCAN位來決定是單通道還是多通道,通過CR2中的CONT來決定是單次轉換還是連續轉換。

   第三,SQR及JSQR的使用

   不論是以上四種模式中的哪一種,都要對序列序列暫存器進行操作。

   單通道單次轉換模式下,使用規則通道,如何來操作呢?首先,假如你的通道為CH1那麼,對ADC_SQR3暫存器中的SQ1[4:0]賦值0x01,若通道為CH16,則賦值0x10。注意不論是哪一個通道被使用,均只對SQ1[4:0]進行操作,因為只有一個通道,第一次轉換的就是它了!

   單通道單次轉換模式下,使用注入通道,如何來操作呢?必須明白,使用注入通道的前提是規則通道還在使用的。

   比如用注入通道來轉換CH16溫度感測器電壓。首先,可以設定CR1的JAUTO位為1,即在規則通道轉換完成後自動轉換成注入通道。然後,設定JAQR暫存器的JSQ4[4:0]為0x10,表明使用的是CH16。為什麼不是JSQ1而是JSQ4呢?第一次轉換的通道應該在JSQ1裡面啊?因為JSQR與SQR的使用準則不同,JSQR是從4-JL開始的。所以,這裡JL為0x00(一個),所以JSQR是從4開始的,即JSQ4是第一個通道號所在地。

   多通道就依照上面的方法進行操作即可,比如使用規則通道,第一個轉換通道號的在SQ1中,第二個在SQ2中,。。。依次類推即可。