對stm32寄存器的理解(個人理解,大神輕噴)


        學習了stm32有一年了,今天想來寫寫自己對寄存器的理解,幫助那些有志學習stm32的朋友們少走一些彎路。

---------------------------------------------------------------------------------------------------------------------------------------

問題一:stm32位寄存器是什么意思?

            32指的是二進制的32位,也就是每一個寄存器是有32位二進制組成(當然部分寄存器的部分位禁止修改)。

問題二:stm32編程的實質是什么?

             stm32編程實質上是修改寄存器的32位的具體的值。

問題三:操作寄存器的值的方式有哪些?

            直接賦值法,可以用二進制,最大值為1111 1111 1111 1111。也可以用十六進制,最大值為0xFFFF,還可以用十進制,最大值為65535,八進制也可以。他們在給寄存器賦值的時候是等效的。

            間接賦值法,就是通過運算(加減,乘除,數組,位運算,甚至是算法將最后的值賦給寄存器)。

問題四:在那個文件里進行邏輯編寫?

            stm32的文件分為兩類,一類是配置文件,另一類是邏輯文件(我自己的定義,書上並沒有這種說法)。如果需要動態修改寄存器的值,必須在邏輯文件里使用庫函數修改寄存器(庫函數的本質就是修改寄存器),不要再配置文件里修改。

問題五:如何快熟識別庫函數?

           一般來說,setxxx()就是給寄存器設定一個新的值,getxxx()就是獲取寄存器的值,另外還有一些使能函數。使用的時候,根據自己的目的去找函數,然后看這個函數修改的對應的寄存器。

問題六:如何才能學好stm32編程?

          學習stm32最困難的地方,就是理解功能對應的寄存器的邏輯關系,甚至一個簡單的功能往往是多個寄存器的調用的結果,理解寄存器之間的關系,學會常見的調試查錯方法,學會查看寄存器的值。

問題七:正確的使用中斷

          在stm32編程中,多個功能的互相調用的時候,基本上都要用到中斷,使用到中斷就需要寫中斷服務函數,中斷服務函數的函數名是不可以自定義的。他們在啟動文件里面已經定義好了的,自定義的話,CPU找不到在哪里去執行。(很多人第一次寫中斷服務函數都會寫錯,筆者第一次寫的時候也寫錯了。)在中斷服務函數里面,要先判斷是不是發生了中斷,一般發生了中斷,就會有相對應的中斷標志位,執行中斷服務函數之后,要先清除中斷標志位,然后返回。這雖然沒有明文規定,但好像成了一種“習俗”。

問題八:stm32的寄存器一般是16位、32位等,如果將一個double類型的變量賦給16位的寄存器會發生什么?

            在stm32中,寄存器的賦值比如說定時器的CCR,如果將double 類的90.9賦給CCR,那么在編譯的時候會自動轉為uint16_t,也就是90,因此在寫代碼的時候完全可以不用考慮數據轉換的問題。

類似地,其他寄存器也有相似的用法。

問題九:stm32的ADC功能是最常用功能之一,其中ADC使用涉及到數據的讀取,在stm32的官方庫中,ADC的DR_ADDRESS寄存器已經定義為某個寄存器地址,使用的時候需要重新定義該地址,例如:

              #define ADC1_DR_Address         (u32)0x4001244C

因為該地址定義在“stm32f10x_adc.c”文件中,那么使用的時候,直接#include “stm32f10x_adc.c”會導致其他變量多次定義。為使用方便還是自己重新定義下寄存器比較方便。

 

 

 

 

--------------------------------------------------------------------------------------------------------------

 今天,想來寫寫stm32的進階用法(個人認為是進階用法,高手會覺得這是什么小兒科,哈哈),希望,剛學習的stm32的童鞋少走彎路。

 

  1.stm32引腳的復用。

              不同的內部外設復用到不同的GPIO引腳,這些引腳有些不可以任意指定的。比如說,stm32f4xx的TIM8_CH1,它能復用到PC6,但不能復用到PB14上。其他的類似。這些Alternate function 在英文規格書的Alternate function mapping 中可以找到,不是Reference Manual。

      2.多個文件的變量的調用

         當配置文件的參數設置為變量的時候,這就涉及到變量的調用。可能你在main文件里面修改了變量的值,然后再TIM中需要更新,那么變量你可以直接定義在TIM.c文件中,然后在main文件里面通過 extern 關鍵字調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM