STM32相關知識點


STM32相關知識點

來源 https://zhuanlan.zhihu.com/p/401448301

 

1、AHB系統總線分為APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速設備
2、Stm32f10x.h相當於reg52.h(里面有基本的位操作定義),另一個為stm32f10x_conf.h專門控制外圍器件的配置,也就是開關頭文件的作用
3、HSEOsc(HighSpeedExternalOscillator)高速外部晶振,一般為8MHz,HSIRC(HighSpeedInternalRC)高速內部RC,8MHz
4、LSEOsc(LowSpeedExternalOscillator)低速外部晶振,一般為32.768KHz,LSIRC(LowSpeedInternalRC)低速內部晶振,大概為40KHz左右,提供看門狗時鍾和自動喚醒單元時鍾源
5、SYSCLK時鍾源有三個來源:HSIRC、HSEOSC、PLL

 

 

6、MCO[2:0]可以提供4源不同的時鍾同步信號,PA8
7、GPIO口貌似有兩個反向串聯的二極管用作鉗位二極管

 

 

8、總線矩陣采用輪換算法對系統總線和DMA進行仲裁
9、ICode總線,DCode總線、系統總線、DMA總線、總線矩陣、AHB/APB橋
10、在使用一個外設之前,必須設置寄存器RCC_AHBENR來打開該外設的時鍾
11、數據字節以小端存儲形式保存在存儲器中
12、內存映射區分為8個大塊,每個塊為512MB
13、FLASH的一頁為1K(小容量和中容量),大容量是2K。
14、系統存儲區(SystemMemory)為ST公司出廠配置鎖死,用戶無法編輯,用於對FLASH區域進行重新編程。所以我們燒寫程序務必選擇BOOT1=0,這樣通過內嵌的自舉程序對FLASH進行燒寫,比如中斷向量表和代碼
15、STM32 電壓為1.8V
16、STM32復位有三種:系統復位、上電復位、備份區域復位。其中系統復位除了RCC_CSR中的復位標志和BKP中的數值不復位之外,其他的所有寄存器全部復位。觸發方式例如外部復位、看門狗復位、軟件復位等;電源復位由於外部電源的上電/掉電復位或者待機模式返回。復位除了BKP中的寄存器值不動,其他全部復位;備份區域復位的觸發源為軟件復位或者VDD和VBAT全部掉電時。
17、單片機復位后所有I/O口均為浮空輸入狀態
18、68個可屏蔽中斷通道,16個可編程優先級,16個內核中斷,一共6816=84個中斷。103系列只有60個中斷,107系列才有68個中斷
19、系統啟動從0x00000004開始,0x0000000保留
20、(NestedVectoredInterruptController)NVIC嵌套向量中斷控制器,分為兩種:搶先式優先級(可嵌套)和中斷優先級(副優先級,不能嵌套)。兩種優先級由4位二進制位決定。分配下來有十六種情況:

 

 

21、0號搶先優先級的中斷,可以打斷任何中斷搶先優先級為非0號的中斷;1號搶先優先級的中斷,可以打斷任何中斷搶先優先級為2、3、4號的中斷;……;構成中斷嵌套。如果兩個中斷的搶先優先級相同,誰先出現,就先響應誰,不構成嵌套。如果一起出現(或掛在那里等待),就看它們2個誰的子優先級高了,如果子優先級也相同,就看它們的中斷向量位置了。原來中斷向量的位置是 后的決定因素!!!!
22、上電初始化后AIRC初始化為0,為16個搶先式優先級,但是由於所有的外部通道中斷優先級控制字PRI_n為0,所以搶先式優先級相同,此時就不能嵌套了
23、NVI中有ISER[2](InterruptSet-EnableRegisters),ICER[2](InterruptClear-EnableRegisters),ISPR[2](InterruptSet-PendingRegisters),ICPR[2](InterruptClear-PendingRegisters),IABR[2](ActiveBitRegisters),IPR[15](InterruptPriorityRegisters)定義。其中ISER和ICER分別為中斷使能和中斷失能寄存器,都是寫1來使能/失能中斷的。為什么寫1?為什么不采用一個寄存器而用兩個寄存器來表示中斷使能/失能狀態?由於硬件,寫0比較復雜,並且可能造成其他位的狀態改變,所以用1來表示打開或者關斷是比較合理的
24、中斷標志位需要手動清除
25、配置外圍器件的一般步驟:1、打開端口時鍾。2、定義初始化結構體並初始化。3、調用
26、串口的奇偶校驗:如果是奇偶校驗,那么USART_InitStructure.USART_WordLength=USART_WordLength_9b;這個數據的長度必須設定為9位!
27、ADC的規則組可以自定義轉換通道順序和轉換的通道個數。在實際應用中,有時候希望有一些特別的通道具有很高的優先權,需要在規則組進行轉換的時候強制打斷,進行另一個通道的轉換,這樣一組通道,叫做注入組。
28、定時器的輸出比較模式:Timing(凍結,什么都不做,普通定時),Active(OCxREF輸出高電平有效),Inactive(OCxREF輸出低電平),Toggle(比較成功后翻轉電平)。
29、STM32的定時器從0開始計數,滿足一些條件,給出標志位(比如匹配成功、時間更新、溢出等)然后從0開始計數。這一點和51不同。
30、OCx=OCxREF極性
31、自動裝載寄存器和影子寄存器:前者相當於51當中的溢出設定數值。而影子寄存器顧名思義是影子,就是寄存器的另一分copy。實際起作用的是影子寄存器,而程序員操縱的則是自動裝載寄存器。如果APPE位使能,表明自動裝載寄存器的值在下 更新事件發生后才寫入新值。否則,寫入自動裝載寄存器的值會被立即更新到影子寄存器。
32、RCC_PCLK1Config(RCC_HCLK_Div4)CLK1的4分頻給定時器基准時鍾
33、定時器配置:RCC、NVIC、GPIO(OC輸出或者PWM)、TIMx
34、通用定時器可以輸出4路不同的PWM, 定時器可以輸出4路不同的PWM外,還可以輸出3路互補的PWM信號(驅動三相電機),一共有7路。這樣算出來STM32可以產生30路PWM=7*24*4
35、

 

36、 定時器時鍾源掛在了APB2上,而通用定時器掛在APB1上。AHB(72mhz)→APB1分頻器(默認2)→APB1時鍾信號(36mhz)→倍頻器(*2倍)→通用定時器時鍾信號(72mhz)。如果APB1沒有分頻,那么通用定時器的時鍾信號頻率就直接等於APB1的時鍾頻率,沒有上述的倍頻器*2過程。TIM_SetAutoreload()用來改變PWM的頻率,TIM_SetCompare1()用來改變占空比
37、有刷電機一般啟動力矩大一些,無刷電機啟動力矩小,運行起來力矩大。有刷電機采用電刷機械電流換向,而無刷電機則通過霍爾傳感器測出轉子的電流來判斷電機的運動位置和方向,返回給控制回路。
38、死區是必須要有的,因為這涉及到電路的短路問題。晶閘管在換向的時候需要死區時間來徹底關斷線路
39、剎車功能用來在控制回路出現問題時,硬件自動給予外部電機進行緊急剎車制動,反應在PWM上持續給出一個固定的占空比?(三相驅動也是?)
40、PWM輸出 好采用PWM模式,其他的比較輸出模式相位會慢慢改變,不精准
41、對FLASH的讀寫需要先解鎖后加鎖。FLASH寫0容易,寫1難。
42、 程序有兩種方式,一種為ICP(在線編程),適用於JTAG或SWD協議下的燒寫程序。另一種成為IAP(在應用編程),適用於很多接口(USB,串口,CAN) 到存儲器中,IAP允許在程序運行時重新燒寫FLASH
43、FLASH分為主存儲器(這里放置用戶的程序代碼)和信息塊(啟動代碼),除此之外,還有一部分叫做系統存儲器,這一塊用戶不可操作,為ST公司出產后固化,為系統的上電自舉程序
44、FLASH在寫的時候,一定不能讀,如果有讀操作,那么將會鎖住總線
45、對FLASH操作時,必須打開HIS
46、STM32有兩種看門狗(IWDG獨立看門狗《獨立時鍾》,WWDG窗口看門狗《由APB1分頻而來》)
47、SPI的的 高頻率為36MHz(fpclk/2)
48、TIM1和TIM8 定時器在輸出PWM時,需要配置一下主輸出功能(CtrlPWMOutputs)才能輸出PWM。其他的通用定時器不需要這樣配置。但是TIM6和TIM7沒有PWM輸出功能。
49、Code為程序代碼部分
RO-data表示程序定義的常量(如:consttemp等);
RW-data表示已初始化的全局變量
ZI-data表示未初始化的全局變量,以及初始化為0的變量
Code,RO-data,RW-data..............flash
RW-data,ZIdata...................RAM
初始化時RW-data從flash拷貝到RAM
50、STM32F103ZET6有144個引腳(Z為144),其中,可用IO口為112個(7X16=112,ABCDEFG口)

 

============= End

 


免責聲明!

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



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