工程師實戰幹貨分享:77條STM32知識彙總
發布時間:2019-08-13 責任編輯:xueqi
【導讀】以下是工程師結合自己的工作實戰經驗分享,總共有77條STM32知識彙總,建議收藏!SYSCLK時鍾源有三個來源:HSI RC、HSE OSC、PLL等。
1、 SYSCLK時鍾源有三個來源:HSI RC、HSE OSC、PLL

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

4、 ICode總線,DCode總線、係統總線、DMA總線、總線矩陣、AHB/APB橋
5、在使用一個外設之前,必須設置寄存器RCC_AHBENR來打開該外設的時鍾
6、 STM32複位有三種:係統複位、上電複位、備份區域複位。其中係統複位除了RCC_CSR中的複位標誌和BKP中的數值不複位之外,其他的所有寄存器全部複位。
觸發方式例如外部複位、看門狗複位、軟件複位等;電源複位由於外部電源的上電/掉電複位或者待機模式返回。
複位除了BKP中的寄存器值不動,其他全部複位;備份區域複位的觸發源為軟件複位或者VDD和VBAT全部掉電時。
7、 (NestedVectored Interrupt Controller)NVIC嵌套向量中斷控製器,分為兩種:搶先式優先級(可嵌套)和中斷優先級(副優先級,不能嵌套)。
兩種優先級由4位二進製位決定。分配下來有十六種情況:

8、自動裝載寄存器和影子寄存器:前者相當於51當中的溢出設定數值。而影子寄存器顧名思義是影子,就是寄存器的另一分copy。
實際起作用的是影子寄存器,而程序員操縱的則是自動裝載寄存器。如果APPE位使能,表明自動裝載寄存器的值在下一次更新事件發生後才寫入新值。
否則,寫入自動裝載寄存器的值會被立即更新到影子寄存器。

9、

10、ARM公司隻生產內核標準,不生產芯片。ST、TI這樣的公司從ARM公司那裏購買內核,然後外加自己的總線結構、外設、存儲器、始終和複位、I/O後就組成了自己的芯片。

11、電容觸摸屏原理:通過充放電的曲線不同來檢測是否被按下。 實際的實驗過程中,TPAD可以用一塊覆銅區域來替代,通過電容的充放電常數來確定是否按下。

12、OLED,即有機發光二極管,又稱為有機電激光顯示。下圖為OLED的GRAM與屏幕的對應表

PAGE2單獨列出來:

13、USART可以操縱SPI設備。不過最大頻率隻有4.5MHz
14、使用I/O口時應該注意的問題

15、ADC的Vref+和Vdda與VSS,Vref-一定要加高質量的濾波電容,切靠近單片機。

16、在STM32內部,FSMC的一端通過內部高速總線AHB連接到內核Cortex-M3,另一端則是麵向擴展存儲器的外部總線。
內核對外部存儲器的訪問信號發送到AHB總線後,經過FSMC轉換為符合外部存儲器通信規約的信號,送到外部存儲器的相應引腳,實現內核與外部存儲器之間的數據交互。

17、FSMC中的DATASET和ADDSET的設置需要參看外部存儲器的時序圖來確定。
一般而言,DATASET指的是數據建立時間,也就是讀/寫信號開始到讀/寫信號停止(上升沿存儲數據)的持續時間。(一般來說寫比讀快!)。
而ADDSET指的是地址建立時間,指的是片選之後到讀/寫操作之前的時間,這是針對SRAM來說的,如果操縱的是TFT,不存在地址線,所以此時的ADDSET就是讀/寫信號結束到RS電平的轉換時間。
18、

19、

20、FSMC的三個配置寄存器:FSMC_BCRx(片選控製配置)、FSMC_BTRx(片選時序)、FSMC_BWTRx(片選寫時序)。
21、RTC時鍾配置必須要用到BKP寄存器,BKP寄存器在單片機複位、電源複位、待機喚醒模式下是不會更改值的,他的供電由VDD供電,VDD被切斷後自動切換至外部的VBAT供電。
22、要修改BKP寄存器的值,必須取消其寫保護的標誌。BKP寄存器在上電時自動寫保護。
23、Stm32有三種省電模式:

三種省電模式中,耗電量從上到下依次降低,待機模式的電流僅為2uA。
24、從待機模式中喚醒單片機等效於讓單片機複位,但是電源寄存器的值會有一個標誌位指示單片機是被喚醒的,不是被複位的。
25、ADC的時鍾不要超過14MHz,否則轉換精度會下降。最大轉換速率為1MHz,即轉換周期為1us(14MHz,采樣周期為1.5個ADC時鍾)
26、Tcovn=采樣時間+12.5個周期。采樣時間盡量選長一點,這樣精度高一些,但是轉換速率下降,這也是有利必有弊。
27、

28、拿ARM7TDMI來說,T代表Thumb指令集,D是說支持JTAG調試(Debugging),M意指快速乘法器,I則對應一個嵌入式ICE模塊。
29、MMU作為嵌入式處理器與應用處理器的分水嶺標誌à具有內存管理單元的嵌入式處理器可以定位為應用處理器。
這麼說M係列和A係列的處理器的區別在於A係列的處理器具有MMU單元可以進行內存模塊的管理。
30、ARM處理器有兩種狀態:ARM狀態和Thumb狀態。

31、這張圖說明了一切:Thumb2指令集做了一件很偉大的事情:將16位和32位的指令集融為一體,兼容性非常強!(這麼說CM3不支持某些32位ARM指令集??)
32、

33、MSP是係統複位後使用的堆棧指針,PSP由用戶的代碼使用。兩個堆棧指針為4字節對齊!!
34、在ARM編程領域中,凡是打斷程序運行的事件,統稱為異常(exception)。
35、因為存在LR(鏈接寄存器),所以可支持1級的子程序調用而不用壓棧到內存,大大提高了運行速度。---à這就是說,我們在編程的時候,一級調用是不會耗費太多時間的,除非是二級調用!
36、處理器有兩種操作模式:handler模式和線程模式。

處理器也有兩種特權分級:特權級和用戶級。 這張圖說明了一切:複位進入特權級線程模式,如果有異常,進入特權級的handler模式處理異常或中斷例程,然後返回至特權級線程模式。通過修改CONTROL寄存器可以進入用戶級線程模式。
37、兩個高級定時器TIM1和TIM8是掛接在APB1總線上
38、STM32的外部中斷是以組來區分的,也就是說PA0,PB0,PC0單片機是無法區分其中哪個觸發的中斷à均為EXIT0線中斷服務例程。
所以,外部中斷支持16路的中斷分辨率。從另一個方麵來講,我們可以設置GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcex);來開通中斷線實現組內的不同中斷。
39、DAC有兩個寄存器,一個是DHR(Data HoldingRegister)數據保持寄存器,一個DOR(Data Output Register)數據輸出寄存器。
真正起作用的是DOR寄存器,該寄存器把值給數模轉換發生單元輸出以VREF+為參考電壓的電壓值。
如果是硬件觸發轉換,係統將在1個ABP時鍾周期後把值給DOR,如果是軟件觸發轉換,時間為3個APB時鍾周期。然後,均等待Tsetting時間(Typical為3us,Max為4us)後真正輸出電壓值。
40、DAC分8位模式和12位模式,其中後者可以選擇左右對齊
41、DMA仲裁器分為軟件和硬件兩種。軟件部分分為4個等級,分別是很高優先級、高優先級、中等、低。硬件部分由通道的大小來決定優先級,越低優先級越高。
42、DMA有一個實時的傳輸數據量寄存器叫做DMA_CNDTR,最大值為65535,存放的是當前傳輸所要傳輸的數據量。當數據量變為0時,表明傳輸完成。
43、CAN總線(ControllerArea Network)。CAN控製器根據兩根線上的電位差來判斷總線電平,總線電平又分為顯性電平和隱性電平,二者必居其一。
44、CAN總線具有6個特點:
1:多主控製
2:係統若軟性
3、通訊速度較快,通訊距離較遠
4、具有錯誤檢測、錯誤通知和錯誤恢複功能
5、故障封閉,當總線上的設備發生連續故障錯誤時,CAN控製器會把改控製器踢出總線
6、連lian接jie節jie點dian多duo。理li論lun上shang可ke以yi無wu限xian製zhi加jia載zai,但dan是shi受shou到dao時shi間jian延yan遲chi和he電dian氣qi負fu載zai的de限xian製zhi,實shi際ji數shu目mu是shi有you限xian製zhi的de。降jiang低di傳chuan輸shu速su度du可ke以yi適shi當dang增zeng加jia可ke掛gua接jie負fu載zai個ge數shu。
45、CAN協議有兩個標準,ISO11898(針對125kbps~1Mbps的高速速率)和ISO11519-2(125kbps以下的低速速率)

47、CAN協議的有5種類型的幀:數據幀、遙控幀、錯誤幀、過載幀、幀間隔。其中前兩種幀有標準格式(11位ID)和擴展格式(29位ID)。

48、數據幀構成:
(1) 幀起始。 表示數據開的段幀起始。
(2) 仲裁段。 表示該幀優先級的仲裁段。
(3) 控製段。 表示數據的字節及保留位段。
(4) 數據段。 數據的內容,一幀可發送0~8個字節的數據。
(5) CRC段。 檢查幀的傳輸錯誤段。
(6) ACK段。 表示確認正常接收的段。
(7) 幀結束。 表示數據的段幀結束。

49、Stm32f103係列隻有一個CAN控製器,有3個發送郵箱和3級深度的2個FIFO,14個過濾組器。
50、STM32的每個過濾組可以配置為1個32位過濾器和2個16位過濾器。除此之外,還可以配置為屏蔽位模式(ID+屏蔽)和標識符列表(ID和屏蔽寄存器均用來做ID寄存器)模式。
51、CAN接收到有效報文被放置在3級郵箱深度的FIFO中,FIFO完全由硬件來管理。
52、 CAN總線的波特率

53、觸摸屏一般分為電阻式觸摸屏和電容式觸摸屏。前者檢測觸摸的位置原理是利用觸摸屏控製器中的A/D轉換器經過兩次A/D讀值後得出X和Y的坐標值。注意:這個X和Y的值是相對於觸摸屏的,而非LCD屏。
所以在這裏需要注意兩個概念:觸摸屏和LCD屏。這是兩個不同的概念,也是兩個不同的物理結構,其中電阻觸摸屏是由上下兩個導電層中間夾著一層非常薄的透明隔層;而LCD就是指顯示屏。
54、電阻觸摸屏有X和Y、X和Y的比例因子、坐標軸方向、偏移量。LCD也有自己的這些參數。兩者完全不相幹,所以在定位的時候需要進行坐標轉換。公式:

通過對屏幕的四個點進行校準,得到四元一次方程,求解即可。
55、NEC協議的數據幀格式:同步碼頭、地址碼、地址反碼、控製碼、控製反碼。同步碼由一個9ms的低電平和一個4.5ms的高電平組成,地址碼、地址反碼、控製碼、控製反碼均是8位數據格式。按照低位在前,高位在後的順序發送。
56、NEC協議在發送的時候,會有560us的38KHz的載波信號,而在接收的時候這部分載波信號被認定為低電平,而剩餘的(2.25ms-650us)的邏輯“1”和(1.12ms-650us)的邏輯“0”時間則被認定為高電平。
57、在單位時間內的位移被定義為速度,速度有線速度和角速度之分,分別對應兩種傳感器測量這兩種不同的速度:線速度傳感器(加速度計)、角速度傳感器(陀螺儀)。
前者多應用在靜態或者低慢速運動中的姿態求解,後者多應用在動態運動中姿態求解。
58、根據標準約定,零加速度(或零 G 準位)通常定義為相當於最大輸出值(12 位輸出為 4096,10 位輸出為 1024 等)一半的輸出。對於提供 12 位輸出的加速度計,零 G 準位將等於 2048。
輸出大於 2048 表示正加速度。輸出小於 2048 表示負加速度。加速度的數量通常用單位 g (1g = 9.8m/s2 = 重力加速度)表示。
通過確定測量的輸出與零 G 準位之間的差值,然後除以加速度計的靈敏度(用計數/g 或 LSB/g表示)來計算加速度。
對於提供 12 位數字輸出的 2g 加速度計,靈敏度為 819 計數/g 或 819 LSB/g。加速度等於:a = (Aout - 2048)/(819 計數/g),單位為 g。
59、加jia速su度du計ji測ce得de的de加jia速su度du的de方fang向xiang和he設she備bei設she定ding的de坐zuo標biao係xi是shi相xiang反fan的de,因yin為wei原yuan理li表biao明ming在zai測ce量liang力li的de時shi候hou采cai用yong的de是shi非fei慣guan性xing係xi參can考kao係xi,而er我wo們men高gao中zhong時shi代dai研yan究jiu的de坐zuo標biao係xi是shi慣guan性xing係xi參can考kao係xi,前qian者zhe在zai物wu體ti進jin行xing運yun動dong產chan生sheng加jia速su度du時shi,假jia想xiang一yi個ge與yu速su度du方fang向xiang相xiang反fan的de力li作zuo用yong在zai物wu體ti上shang,這zhe個ge力li就jiu是shi慣guan性xing力li;後者我們說不存在慣性力,隻說存在慣性,因為在慣性坐標係中,我們研究的是物體,而非坐標係(即假定坐標係相對地球靜止),當我們把坐標係也考慮在內時,當坐標係運動,就產生了慣性力f,這種力作用會假想作用在物體上,隻是與運動方向相反。
60、由上可知,加速度計的本質是測量力而非加速度。
61、NRF24L01工作在2.4GHz的頻段,由於頻段頻率較高,所以傳輸速率較快,為2Mbps。
62、STM32的閃存模塊由:主存儲器、信息塊和閃存存儲器接口寄存器3個部分構成。
主存儲器用來存放代碼和const常量;信息塊由兩個部分組成:啟動程序代碼、用戶選擇字節。
其中啟動程序代碼為ST公司自帶的啟動程序,用於串口下載。
最後的閃存存儲器接口寄存器用於控製整個對閃存區域的操作。
63、CPU的運行速度比FLASH的操作速度快的多,一般FLASH的最快訪問速度≤24Mhz。如果CPU的速度超過這個頻率,那麼在讀取FLASH的時候必須加入等待時間(FLASH_ACR設置)。
64、FLASH編程時,寫入必須為半字(16位)。並且在寫入的時候必須保證所寫區域的數據必須為0xFFFF。
65、STM32的FSMC有HADDR[27:0],其中[27:26]用來選擇BANK區域的4個不同塊。
剩下的[25:0]則用來連接外部存儲區域的地址線FSMC_A[25:0]。
如果數據寬度是8bit,此時的HADDR[25:0]和FSMC_A[25:0]是完全對應的。
如果數據寬度是16bit,此時的HADDR[25:1]和FSMC_A[24:0]是對應起來的。
需要注意:無論數據寬度是多少,外部的FSMC_A[0]和A[0]總是對應的。
66、關於LB和UB的信號控製是由硬件自動控製的,當AHB的數據寬度小於外部存儲器的數據寬度時,此時LB和UB的控製信號自動產生(比如字節讀取/寫入16bit的外部存儲器)。
67、 __attribute__ (函數屬性、變量屬性、類型屬性等)。如果在使用SRAM時,可以采用u32 sram_array[xx] __attribute__ ((at(0x68000000))代表將外部SRAM的空間全部給了sram_array這個變量,他具有在at0x68000000這個地址的屬性。
往裏麵寫值就直接在SRAM裏麵寫值。
68、

內存管理有一種方式叫做分塊式內存管理。
注意表中的分配方向,從頂到底。每一項對應一個內存塊。裏麵的數值代表了內存池的狀態:如果為0,表示該內存沒有被分配;如果非0,那麼數值的大小就表示了該塊內存被連續占用的內存數。
比如說數值為20,意思是包括該項在內的內存塊被連續占用了20塊分給了指針。
69、SD卡的分類:

一般的SD卡支持兩種傳輸模式:SD卡模式(SDIO)、SPI模式。顯然前麵一種是專用模式,所以速度比較快。
70、常用的漢字內碼係統有GB2313、GB13000、GBK、BIG5(繁體)。其中GB2313隻有幾千個漢字,而GBK則有2萬多漢字。
71、要顯示漢字,采用的方式如果用點陣的形式是不可取的,因為這無法查找漢字。采用的方式就是內碼係統。
GBK標準中,一個漢字對應2個字節:前者稱為區(0x81~0xFE)後者為(0x40~0x7E)和(0x80~0xFE)。前者有126個區,後者有190,那麼可以顯示的漢字數量有126*190=23940個。
根據這兩個值用來查找字庫,字庫中存放的還是每個漢字的點陣數據。
這個字庫非常大,如果是16*16的字體,那麼一個字體就需要32個字節,如此說來需要23940*32=748K的空間,可見非常大,所以需要外部的Flash來存儲這個字庫。
72、由於漢字內碼係統不具有國際通用性,但是Unicode幾乎把所有的語言都放置進來,這樣在單片機中操作漢字時,就需要將GBK和Unicode轉化。
尤其是在FATFS中,創建中文文件名和讀取中文文件信息時需要將Unicode換轉為GBK後再進行修改操作,再反轉換成Unicode保存修改。
這麼說,兩者的存在是由於標準的不統一,並且Unicode中隻有6064個漢字,而GBK顯然是一種漢字擴展。
73、BMP圖片編碼的順序是從左到右,從下到上。
74、VS1053是一款高性能的數字音頻解碼芯片,從SD卡中將mp3等音樂音頻文件通過SPI送給VS1053後,由其進行音頻解碼,輸出音樂給耳機。
耳機驅動可以采用TDA1308芯片,這款芯片為AB類耳機驅動芯片。

75、IAP(In Application Programming)在應用編程是為了後期開發更新程序方便而提出的概念。具體的實現方法如下圖所示:

在普通編程中,flash中的code是通過JTAG和ISP等工具下載到單片機中。
而在IAP編程中,flash被分區為A和B兩個區域,A區域隻允許用USB/USART等方式下載,此區域作為更新B區域的代碼用。
B區域則是用戶的code區域,真正的代碼在這裏被執行,放置的就是app。

上圖表示STM32正常運行的流程圖,可以看到上電複位後係統從0x80000004處開始運行程序,這裏放置的是複位中斷向量,然後跳轉至複位中斷程序入口後再跳轉至main函數運行用戶的程序。

上圖表示加入IAP後的STM32程序運行流程圖。可以看到上電複位後跳到IAP程序的main函數處運行IAP過程(這個過程就是把下麵灰底色塊的程序代碼燒進B區域à代碼更新)。
後麵的過程和STM32正常運行一樣,如果出現中斷請求,還是跳轉到A區域中的中斷向量表中,然後再跳轉到B區域的中斷服務入口。
76、USB有四根線,VCC、GND、D+、D-。在USB主機上,D+和D-均通過一個15K的電阻接地,這樣兩條線均為低電平。
在USB設備中,對於高速設備會在D+通過一個1.5K的電阻接到VCC,而低俗設備會在D-通過一個1.5K的電阻接到VCC。
這樣主機就可以通過D+和D-的高電平的到來來檢測是否有設備接入,並且識別高低速設備。
77、UCOSII是一種實時操作係統,具有執行效率高、占有空間小(最小內核2KB)、實施性能優良、擴展性強和移植性強等優點。

UCOS具有多任務並發工作的特點(注意,任何時候隻有一個任務能夠占用CPU。並發隻是任務輪流占用CPU而不是同時工作)。
最大支持255個任務並發工作。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 菲尼克斯電氣DIP產線獲授“IPC HERMES Demo Line”示範線
- 貿澤電子新品推薦:2026年第一季度引入超過9,000個新物料
- PROFINET牽手RS232:網關為RFID裝上“同聲傳譯”舊設備秒變智能
- 跨域無界 智馭未來——聯合電子北京車展之智能網聯篇
- 為AI尋找存儲新方案
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
斷路器型號
多層PCB
多諧振蕩器
扼流線圈
耳機
二極管
二極管符號
發光二極管
防靜電產品
防雷
防水連接器
仿真工具
放大器
分立器件
分頻器
風力渦輪機
風能
風扇
風速風向儀
風揚高科
輔助駕駛係統
輔助設備
負荷開關
複用器
伽利略定位
幹電池
幹簧繼電器
感應開關
高頻電感
高通


