乾貨 | 143條 超詳細整理STM32單片機學習筆記

2021-01-14 張飛電子實戰營

1、AHB系統總線分為APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速設備


2、Stm32f10x.h相當於reg52.h(裡面有基本的位操作定義),另一個為stm32f10x_conf.h專門控制外圍器件的配置,也就是開關頭文件的作用


3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般為8MHz,HSI RC(High Speed InternalRC)高速內部RC,8MHz


4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般為32.768KHz,LSI RC(Low Speed InternalRC)低速內部晶振,大概為40KHz左右,提供看門狗時鐘和自動喚醒單元時鐘源


5、SYSCLK時鐘源有三個來源:HSI RC、HSE OSC、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個內核中斷,一共68+16=84個中斷。103系列只有60個中斷,107系列才有68個中斷


19、系統啟動從0x00000004開始,0x000 0000保留


20、(NestedVectored Interrupt Controller)NVIC嵌套向量中斷控制器,分為兩種:搶先式優先級(可嵌套)和中斷優先級(副優先級,不能嵌套)。兩種優先級由4位二進位位決定。分配下來有十六種情況:



21、0號搶先優先級的中斷,可以打斷任何中斷搶先優先級為非0號的中斷;1號搶先優先級的中斷,可以打斷任何中斷搶先優先級為2、3、4號的中斷;……;構成中斷嵌套。如果兩個中斷的搶先優先級相同,誰先出現,就先響應誰,不構成嵌套。如果一起出現(或掛在那裡等待),就看它們2個誰的子優先級高了,如果子優先級也相同,就看它們的中斷向量位置了。原來中斷向量的位置是最後的決定因素!!!!


22、上電初始化後AIRC初始化為0,為16個搶先式優先級,但是由於所有的外部通道中斷優先級控制字PRI_n為0,所以搶先式優先級相同,此時就不能嵌套了


23、NVI中有ISER[2](Interrupt Set-Enable Registers),ICER[2](Interrupt Clear-Enable Registers),ISPR[2](Interrupt Set-Pending Registers),ICPR[2](Interrupt Clear-Pending Registers),IABR[2](Active Bit Registers),IPR[15](InterruptPriority Registers)定義。其中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);PCLK1的4分頻給定時器基準時鐘


33、定時器配置:RCC、NVIC、GPIO(OC輸出或者PWM)、TIMx


34、通用定時器可以輸出4路不同的PWM,高級定時器可以輸出4路不同的PWM外,還可以輸出3路互補的PWM信號(驅動三相電機),一共有7路。這樣算出來STM32可以產生30路PWM=7*2+4*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 表示程序定義的常量(如:const temp等);

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口)


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



52、CMSIS標準用於在向上的用戶層和下面的硬體層交換信息。這個架構當然可以自己定義,但是這樣的話就會沒有標準。所以強制使用CMSISI標準來設計晶片。通俗點的講就是系統初始化的函數名稱CMSIS定義為SystemInit(),GPIO_ResetBits()等


53、埠復用和埠重映射是兩個概念:前者在使能其對應的埠和對應的功能時鐘即可。後者需要打開AFIO時鐘,然後進行埠的重映射GPIO_PinRemapConfig()


54、下載程序只能使用串口1,在硬體設計時一定要注意!


55、J-TAG調試頻率一般設定為2MHz,而SWD調試頻率可以設定為10MHz


56、SysTick的中斷實現可以有兩種方式:循環等待和中斷法。推薦用循環等待,中斷法可能會出問題而且佔用資源。


57、部分I/O引腳是5V兼容的。單個I/O的最大驅動電流和灌入電流均為25mA。整個晶片的電流為150mA


58、KEIL支持位段操作,可以利用C語言中的位段知識定義位段結構體,然後對單獨的寄存器進行單獨的位操作。


59、關於內部上下拉電阻的設置:如果外部的按鍵另一頭接地,那麼需要設置成上拉電阻。(理由是當沒有按下按鍵時,由於上拉,輸入為高電平;按下時,由於外部接地,輸入為低電平。)同理,如果外部的按鍵另一頭接高電平,那麼需要設置成下拉電阻。


60、串口中斷TXE和TC的區別:其實很明顯,一個是發送寄存器空標誌,一個是發送完成標誌。因為串口在發送的時候首先需要把發送寄存器中的數據移位到移位寄存器(影子寄存器)後再串行發送出去。所以當發送寄存器DR空時說明現在可能正在往外面發送數據,數據可能還沒有發送完。但是發送完成不一樣,他是在移位寄存器將本次數據全部移位完成後設置的標誌位(也就是發送完了停止位)。這麼看來:TXE允許程序有更充裕的時間填寫TDR寄存器,保證發送的數據流不間斷。TC可以讓程序知道發送結束的確切時間,有利於程序控制外部數據流的時序。


61、窗口看門狗顧名思義有一個窗口,這個窗口的橫坐標為時間,意思是在指定的時間範圍內刷新寄存器,否則單片機復位。窗口的上限由人來設定W[6:0],下線定死為0x40Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;Twwdg為超時時間ms,Fpclk1為APB1時鐘KHz,


62、TIMx通用定時器有4個獨立通道,分別可以用來作為:輸入捕獲、比較輸出、PWM生成、單脈衝模式輸出。


63、定時器的時鐘來源有4個:內部時鐘(CK_INT),外部時鐘模式1(TIx),外部時鐘模式2(ETR),內部觸發模式(ITRx,這個用來定時器的同步)


64、定時器中斷溢出更新時間:Tout=((arr+1)*(psc+1))/Tclk,ARR為自動裝載寄存器(1~65535)、PSC為分頻係數,TCLK為輸入時鐘頻率(Mhz)


65、PWM1和PWM2模式的區別僅在於相位的180度。前者高電平時,後者低電平。感覺好雞肋,OCxREF極性就可以實現這個功能。


66、定時器輸入捕捉有一個濾波器,顧名思義濾波器起到的就是濾波的作用,在捕捉外部信號時,信號可能不穩定,此時需要濾波:當檢測到有外部輸入時,需要再連續採樣N次如果確定為高電平/低電平,則觸發響應中斷(如果開啟了的話)。


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



68、OLED,即有機發光二極體(OrganicLight-Emitting Diode),又稱為有機電雷射顯示(Organic Electroluminesence Display,OELD)。下圖為OLED的GRAM與屏幕的對應表



PAGE2單獨列出來:



69、USART可以操縱SPI設備。不過最大頻率只有4.5MHz


70、使用I/O口時應該注意的問題



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



72、ADC分為規則組和注入組,前者有16個通道,後者有4個通道。並且16個通道公用一個數值寄存器,注入組的4個通道分別有一個數值寄存器。



73、採樣頻率越高,輸入阻抗要求越小。


74、Stm32進入中斷的最短周期為6個周期


75、


76、


77、FSMC,即靈活的靜態存儲控制器。能夠與同步或異步存儲器和16位PC存儲器卡接口,STM32的FSMC接口支持包括SRAM、NANDFLASH、NORFLASH和PSRAM等存儲器。


\78、平時所說的U盤裡的FLASH存儲器有兩種類型:NANDflash和NOR flash。


NAND FLASH

NOR FLASH

不能直接運行裡面的代碼

可以直接運行裡面的代碼

寫入和擦除速度快

寫入和擦除速度慢

讀取速度稍慢

讀取速度稍快

擦寫周期100萬次

擦寫周期10萬次

成本低,容量高

成本高,容量低

一般為串行接口

有SRAM接口

 


79、TFT在操作時,可以當作外部SRAM來操作,這樣的話,如果單片機有FSMC接口,就可以使用NORFLASH的SRAM接口去控制,速度非常快。


80、Stm32的的FSMC有4個256MB的存儲塊,一共尋址1GB的外部存儲器空間。



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


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



83、

84、


85、FSMC的三個配置寄存器:FSMC_BCRx(片選控制配置)、FSMC_BTRx(片選時序)、FSMC_BWTRx(片選寫時序)。


86、RTC時鐘配置必須要用到BKP寄存器,BKP寄存器在單片機復位、電源復位、待機喚醒模式下是不會更改值的,他的供電由VDD供電,VDD被切斷後自動切換至外部的VBAT供電。


87、要修改BKP寄存器的值,必須取消其防寫的標誌。BKP寄存器在上電時自動防寫。


88、 Stm32有三種省電模式:

三種省電模式中,耗電量從上到下依次降低,待機模式的電流僅為2uA。


89、從待機模式中喚醒單片機等效於讓單片機復位,但是電源寄存器的值會有一個標誌位指示單片機是被喚醒的,不是被復位的。


90、ADC的時鐘不要超過14MHz,否則轉換精度會下降。最大轉換速率為1MHz,即轉換周期為1us(14MHz,採樣周期為1.5個ADC時鐘)


91、Tcovn=採樣時間+12.5個周期。採樣時間儘量選長一點,這樣精度高一些,但是轉換速率下降,這也是有利必有弊。

92、   


93、拿ARM7TDMI來說,T代表Thumb指令集,D是說支持JTAG調試(Debugging),M意指快速乘法器,I則對應一個嵌入式ICE模塊。


94、 MMU作為嵌入式處理器與應用處理器的分水嶺標誌à具有內存管理單元的嵌入式處理器可以定位為應用處理器。這麼說M系列和A系列的處理器的區別在於A系列的處理器具有MMU單元可以進行內存模塊的管理。


95、ARM處理器有兩種狀態:ARM狀態和Thumb狀態。


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


97、


98、MSP是系統復位後使用的堆棧指針,PSP由用戶的代碼使用。兩個堆棧指針為4位元組對齊!!


99、在ARM編程領域中,凡是打斷程序運行的事件,統稱為異常(exception)。


100、因為存在LR(連結寄存器),所以可支持1級的子程序調用而不用壓棧到內存,大大提高了運行速度。---à這就是說,我們在編程的時候,一級調用是不會耗費太多時間的,除非是二級調用!


101、處理器有兩種操作模式:handler模式和線程模式。

處理器也有兩種特權分級:特權級和用戶級。這張圖說明了一切:復位進入特權級線程模式,如果有異常,進入特權級的handler模式處理異常或中斷例程,然後返回至特權級線程模式。通過修改CONTROL寄存器可以進入用戶級線程模式。


102、兩個高級定時器TIM1和TIM8是掛接在APB1總線上


103、STM32的外部中斷是以組來區分的,也就是說PA0,PB0,PC0單片機是無法區分其中哪個觸發的中斷à均為EXIT0線中斷服務例程。所以,外部中斷支持16路的中斷解析度。從另一個方面來講,我們可以設置GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcex);來開通中斷線實現組內的不同中斷。


104、DAC有兩個寄存器,一個是DHR(Data HoldingRegister)數據保持寄存器,一個DOR(Data Output Register)數據輸出寄存器。真正起作用的是DOR寄存器,該寄存器把值給數模轉換發生單元輸出以VREF+為參考電壓的電壓值。如果是硬體觸發轉換,系統將在1個ABP時鐘周期後把值給DOR,如果是軟體觸發轉換,時間為3個APB時鐘周期。然後,均等待Tsetting時間(Typical為3us,Max為4us)後真正輸出電壓值。


105、DAC分8位模式和12位模式,其中後者可以選擇左右對齊


106、DMA仲裁器分為軟體和硬體兩種。軟體部分分為4個等級,分別是很高優先級、高優先級、中等、低。硬體部分由通道的大小來決定優先級,越低優先級越高。


107、DMA有一個實時的傳輸數據量寄存器叫做DMA_CNDTR,最大值為65535,存放的是當前傳輸所要傳輸的數據量。當數據量變為0時,表明傳輸完成。


108、 CAN總線(ControllerArea Network)。CAN控制器根據兩根線上的電位差來判斷總線電平,總線電平又分為顯性電平和隱性電平,二者必居其一。


109、CAN總線具有6個特點:1:多主控制(掛接在總線上的所有設備均可以成為主設備,並且設備ID是用來決定設備的優先級,沒有設備地址概念),2:系統若軟性(沒有設備地址概念),3、通訊速度較快,通訊距離較遠(1Mbps下40M,5kbps下10KM),4、具有錯誤檢測、錯誤通知(通知其他設備)和錯誤恢復功能(強制結束髮送,重複發送接收錯誤的信息。),5、故障封閉,當總線上的設備發生連續故障錯誤時,CAN控制器會把改控制器踢出總線。6、連接節點多。理論上可以無限制加載,但是受到時間延遲和電氣負載的限制,實際數目是有限制的。降低傳輸速度可以適當增加可掛接負載個數。


110、CAN協議有兩個標準,ISO11898(針對125kbps~1Mbps的高速速率)和ISO11519-2(125kbps以下的低速速率)


111、    


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


113、數據幀構成:

(1) 幀起始。表示數據開的段幀起始。

(2) 仲裁段。表示該幀優先級的仲裁段。

(3) 控制段。表示數據的字節及保留位段。

(4) 數據段。數據的內容,一幀可發送0~8個字節的數據。

(5) CRC段。  檢查幀的傳輸錯誤段。

(6) ACK段。  表示確認正常接收的段。

(7) 幀結束。 表示數據的段幀結束。



114、Stm32f103系列只有一個CAN控制器,有3個發送郵箱和3級深度的2個FIFO,14個過濾組器。


115、STM32的每個過濾組可以配置為1個32位過濾器和2個16位過濾器。除此之外,還可以配置為屏蔽位模式(ID+屏蔽)和標識符列表(ID和屏蔽寄存器均用來做ID寄存器)模式。


116、CAN接收到有效報文被放置在3級郵箱深度的FIFO中,FIFO完全由硬體來管理。


117、 CAN總線的波特率


118、觸控螢幕一般分為電阻式觸控螢幕和電容式觸控螢幕。前者檢測觸摸的位置原理是利用觸控螢幕控制器中的A/D轉換器經過兩次A/D讀值後得出X和Y的坐標值。注意:這個X和Y的值是相對於觸控螢幕的,而非LCD屏。所以在這裡需要注意兩個概念:觸控螢幕和LCD屏。這是兩個不同的概念,也是兩個不同的物理結構,其中電阻觸控螢幕是由上下兩個導電層中間夾著一層非常薄的透明隔層;而LCD就是指顯示屏。


119、 電阻觸控螢幕有X和Y、X和Y的比例因子、坐標軸方向、偏移量。LCD也有自己的這些參數。兩者完全不相干,所以在定位的時候需要進行坐標轉換。公式:

,通過對屏幕的四個點進行校準,得到四元一次方程,求解即可。


120、NEC協議的數據幀格式:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼由一個9ms的低電平和一個4.5ms的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是8位數據格式。按照低位在前,高位在後的順序發送。


121、NEC協議在發送的時候,會有560us的38KHz的載波信號,而在接收的時候這部分載波信號被認定為低電平,而剩餘的(2.25ms-650us)的邏輯「1」和(1.12ms-650us)的邏輯「0」時間則被認定為高電平。


122、在單位時間內的位移被定義為速度,速度有線速度和角速度之分,分別對應兩種傳感器測量這兩種不同的速度:線速度傳感器(加速度計)、角速度傳感器(陀螺儀)。前者多應用在靜態或者低慢速運動中的姿態求解,後者多應用在動態運動中姿態求解。


123、根據標準約定,零加速度(或零 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。


124、加速度計測得的加速度的方向和設備設定的坐標系是相反的,因為原理表明在測量力的時候採用的是非慣性系參考系,而我們高中時代研究的坐標系是慣性系參考系,前者在物體進行運動產生加速度時,假想一個與速度方向相反的力作用在物體上,這個力就是慣性力;後者我們說不存在慣性力,只說存在慣性,因為在慣性坐標系中,我們研究的是物體,而非坐標系(即假定坐標系相對地球靜止),當我們把坐標系也考慮在內時,當坐標系運動,就產生了慣性力f,這種力作用會假想作用在物體上,只是與運動方向相反。


125、由上可知,加速度計的本質是測量力而非加速度。


126、NRF24L01工作在2.4GHz的頻段,由於頻段頻率較高,所以傳輸速率較快,為2Mbps


127、STM32的快閃記憶體模塊由:主存儲器、信息塊和快閃記憶體存儲器接口寄存器3個部分構成。主存儲器用來存放代碼和const常量;信息塊由兩個部分組成:啟動程序代碼、用戶選擇字節。其中啟動程序代碼為ST公司自帶的啟動程序,用於串口下載。最後的快閃記憶體存儲器接口寄存器用於控制整個對快閃記憶體區域的操作。


128、CPU的運行速度比FLASH的操作速度快的多,一般FLASH的最快訪問速度≤24Mhz。如果CPU的速度超過這個頻率,那麼在讀取FLASH的時候必須加入等待時間(FLASH_ACR設置)


129、FLASH編程時,寫入必須為半字(16位)。並且在寫入的時候必須保證所寫區域的數據必須為0xFFFF。


130、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]總是對應的。


131、關於LB和UB的信號控制是由硬體自動控制的,當AHB的數據寬度小於外部存儲器的數據寬度時,此時LB和UB的控制信號自動產生(比如字節讀取/寫入16bit的外部存儲器)


132、 __attribute__ (函數屬性、變量屬性、類型屬性等)。如果在使用SRAM時,可以採用u32 sram_array[xx] __attribute__ ((at(0x68000000))代表將外部SRAM的空間全部給了sram_array這個變量,他具有在at0x68000000這個地址的屬性。往裡面寫值就直接在SRAM裡面寫值。

133、


內存管理有一種方式叫做分塊式內存管理。


注意表中的分配方向,從頂到底。每一項對應一個內存塊。裡面的數值代表了內存池的狀態:如果為0,表示該內存沒有被分配;如果非0,那麼數值的大小就表示了該塊內存被連續佔用的內存數。比如說數值為20,意思是包括該項在內的內存塊被連續佔用了20塊分給了指針。


134、SD卡的分類:

一般的SD卡支持兩種傳輸模式:SD卡模式(SDIO)、SPI模式。顯然前面一種是專用模式,所以速度比較快。


135、常用的漢字內碼系統有GB2313、GB13000、GBK、BIG5(繁體)。其中GB2313隻有幾千個漢字,而GBK則有2萬多漢字。


136、 要顯示漢字,採用的方式如果用點陣的形式是不可取的,因為這無法查找漢字。採用的方式就是內碼系統。GBK標準中,一個漢字對應2個字節:前者稱為區(0x81~0xFE)後者為(0x40~0x7E)和(0x80~0xFE)。前者有126個區,後者有190,那麼可以顯示的漢字數量有126*190=23940個。根據這兩個值用來查找字庫,字庫中存放的還是每個漢字的點陣數據。這個字庫非常大,如果是16*16的字體,那麼一個字體就需要32個字節,如此說來需要23940*32=748K的空間,可見非常大,所以需要外部的Flash來存儲這個字庫。


137、由於漢字內碼系統不具有國際通用性,但是Unicode幾乎把所有的語言都放置進來,這樣在單片機中操作漢字時,就需要將GBK和Unicode轉化。尤其是在FATFS中,創建中文文件名和讀取中文文件信息時需要將Unicode換轉為GBK後再進行修改操作,再反轉換成Unicode保存修改。這麼說,兩者的存在是由於標準的不統一,並且Unicode中只有6064個漢字,而GBK顯然是一種漢字擴展。


138、BMP圖片編碼的順序是從左到右,從下到上。


139、VS1053是一款高性能的數字音頻解碼晶片,從SD卡中將mp3等音樂音頻文件通過SPI送給VS1053後,由其進行音頻解碼,輸出音樂給耳機。耳機驅動可以採用TDA1308晶片,這款晶片為AB類耳機驅動晶片。


140、    


141、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區域的中斷服務入口。


142、    USB有四根線,VCC、GND、D+、D-。在USB主機上,D+和D-均通過一個15K的電阻接地,這樣兩條線均為低電平。在USB設備中,對於高速設備會在D+通過一個1.5K的電阻接到VCC,而低俗設備會在D-通過一個1.5K的電阻接到VCC。這樣主機就可以通過D+和D-的高電平的到來來檢測是否有設備接入,並且識別高低速設備。


143、    UCOSII是一種實時作業系統,具有執行效率高、佔有空間小(最小內核2KB)、實施性能優良、擴展性強和移植性強等優點。


UCOS具有多任務並發工作的特點(注意,任何時候只有一個任務能夠佔用CPU。並發只是任務輪流佔用CPU而不是同時工作)。最大支持255個任務並發工作。


聲明:以上文章內容整理於網絡,如涉及到版權問題,請第一時間與我們聯繫。這裡是電子工程師學習天地,同時歡迎大家留言評論一起交流~



相關焦點

  • avr單片機和stm32區別與優缺點分析
    摘要:avr單片機和stm32單片機是目前使用較廣泛的單片機,那麼avr單片機和stm32單片機有什麼區別呢?有什麼優劣勢呢?   avr單片機缺點:   1. 是沒有位操作,都是以字節形式來控制和判斷相關寄存器位的   2. C語言與51的C語言在寫法上存在很大的差異,這讓從開始學習51單片機的朋友很不習慣   3.
  • 怎麼學習STM32單片機?看老司機是怎麼說的!
    本文引用地址:http://www.eepw.com.cn/article/201705/359058.htm  我不是說STM32不好,而是這種為了學習單片機而去學習單片機的思路不對。  你問,如何系統地入門學習stm32?  本身就是一個錯誤的問題。
  • Stm32的TFT LCD顯示器控制學習筆記
    學習stm32,TFT LCD顯示屏控制是很重要的一章,本人在初步學習STM32遇到了很多困難,所以把學習中積累的部分感覺重要的知識點羅列出來
  • 142頁「ICML會議」強化學習筆記整理,值得細讀
    其中強化學習便是該會議很重要的一個話題,每年都有非常多的投稿。本文整理了David Abel總結的ICML2018、2019兩年的深度強化學習筆記,詳看正文。1ICML-2019-RL-Note作者整理簡介:我在本次會議的RL分場上度過了大部分時間(可惜錯過了所有主題演講), 所以我的大部分反思(和筆記)都集中在RL:關於非策略評估和非策略學習的大量工作(例如,參見Hanna 等人[35],Le等人[49],Fujimoto等人[26],Gottesman等人的工作)等[32]探索再次成為一個熱門話題
  • STM32學習—如何選擇各個電路部分的主要晶片
    C9和C12是單片機內部電源變換部分的濾波電容。最小系統基本都是一樣的,按照常用的電路設計一般沒有錯。那幾個電容式晶片的去耦電容,注意一下,模擬電壓、模擬地和數字電源、數字地之間用磁珠隔離,防止數字電路的高頻噪聲影響到模擬電路的精度。
  • 用ULN2003驅動24BYJ48步進電機時,怎麼接stm32單片機比較好?
    stm32單片機是一種高性能、低成本、低功耗的單片機,可以說很多應用場合都會用到,特別是對於大型系統,像電源、充電樁、交互機、電機驅動、PLC、逆變器、印表機、掃描儀、警報系統、視頻電話、 HVAC 等。那麼對於如何用STM32驅動步進電機呢?
  • 常用單片機優缺點詳細剖析
    ,參差不齊~~同時湧現出一大批擁有代表性單片機的廠商:Atmel、TI、ST、MicroChip、ARM…國內的宏晶STC單片機也是可圈可點…下面為大家帶來51、MSP430、TMS、STM32、PIC、AVR、STC單片機之間的優缺點比較及功能體現……51單片機應用最廣泛的8位單片機當然也是初學者們最容易上手學習的單片機,最早由Intel
  • 給工科小白研究生的乾貨分享:如何做好實驗筆記?
    大家好,我是@阿芷學姐,馬上就要碩士畢業啦,我整理了讀研期間的經驗乾貨分享給大家,留作科研小白入門指南~希望對你們有幫助。實驗筆記的作用實驗筆記可以幫助重現實驗場景。人的記憶是有限的,像我2020年因為疫情8個月沒在學校,等返校後再整理之前的試樣和實驗數據會很麻煩。有些東西靠腦子記是記不住的,尤其是時間長就容易忘。現在我就要畢業了,老師讓我把研一開始的實驗試樣和數據整理好。這種兩三年前的東西靠腦子更記不住了。所以實驗記錄可以幫助你重現實驗當時的場景,回憶實驗當時的參數等內容。實驗筆記可以作為證據。有些期刊發文章可能還要提供原始數據,以防造假。
  • stm32編碼器的接口模式
    編碼器是什麼玩意呢,它可是一個好玩的東西,做小車測速必不可少的玩意,下面,我將從編碼器的原理講起,一直到用stm32的編碼器接口模式,測出電機轉速與方向。2.stm32編碼器接口模式(寄存器)        stm32的編碼器接口模式在STM32中文參考手冊中有詳細的說明,在手冊273頁,14.3.12節。程序是完全按照 下圖方式,設置寄存器的。
  • 用STM32做一個微型掌上示波器項目——終於鼓起在大牛前獻醜的無比...
    這是我第一次在這個論壇上發表東西,其實本人進入晶片的世界的時間並不長,從接觸51單片機到現在還不到一年,所以可以算是小白啦~想了很久,總算拿出在論壇大牛前獻醜的無比勇氣,寫起該帖:dizzy::dizzy:。因為製作時間很短,元器件不是很夠用,所以只能做出這個只有初級功能的示波器了,只是菜鳥級程序,不建議大家做學習之用。
  • 工程師應該掌握的STM32單片機關鍵基礎精華
    從51開始,單片機玩了很長時間了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直沒有開始,原因-----不知道玩了ARM可以做什麼(對我自己而言)。
  • 基於STM32的OV7670攝像頭總結
    下面介紹帶FIFO和不帶FIFO的工作原理:      圖1:不帶FIFO  圖2:帶FIFO  下面就講解這兩種方式的適用範圍:  不帶FIFO:這種方法最簡單,最直接,但是最不好實現的方法,原因是多數的CMOS晶片(如OV7670)的時鐘速度可以高達24M,一般單片機的
  • stm32單片機中使用GPIO口模擬PWM輸出解析
    stm32單片機中使用GPIO口模擬PWM輸出解析   使用了STM32F10364引腳的MCU,在硬體設計中文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴
  • 病房呼叫系統的軟體設計_單片機病房呼叫系統的設計 - CSDN
    不會stm32,那你還不好意思來應聘硬體工程師? stm32的學習資料多是零零散散的,電路城先將stm32資料做了一個整合,也將於STM32單片機的精彩設計實例做了一個匯總,適合新手迅速上手,也適合高手做創作。
  • 55頁博士筆記總結ICLR 2019大會幹貨
    這篇55頁、由布朗大學博士四年級學生David Abel總結整理的ICLR 2019參會Highlights筆記,提煉了演講和會談亮點,通篇乾貨!作為今年上半年表現最為亮眼的人工智慧頂會,ICLR 2019於5月6日至9日在美國紐奧良舉行。本屆投稿比去年增長了近60%,共收到1591篇,錄取率為31.7%。與往年一樣,本次大會每天分上午下午兩場。
  • 學霸手寫筆記!高中英語語法講解+高考考點詳解,三年都用得上!
    在我們平時的英語學習中,對於同學們來說,英語最大的難點莫過於「語法」了。學姐在高中的時候,連怎麼判斷賓語從句、定語從句都不知道π_π,後來還是得到了學霸的點拔才弄懂!不得不說學霸的筆記記得詳細又比老師的更容易理解,列印出來空閒的時候拿出來看看,做題的時候再學以致用,效果一級棒~今天學姐特意給大家找來了這份詳細又滿滿乾貨的英語筆記,第一部分是語法的講解,第二部分是對高考各類題型的詳解,真的超級實用了!
  • 初一學習方法:做筆記
    做筆記是門很少有人研究的學問。會做筆記的同學可能上課時記得並不多,但很有成效。有些同學的筆記只有自己看得懂,但也很有效。相反,有的同學筆記記得很多,上課時幾乎一直在記筆記,不僅效果差,甚至會影響聽課效果。所以學會有效地做筆記對於每一個同學來說都是很重要的。   1.如何記課堂筆記?
  • 13個基於STM32的經典項目設計實例,全套資料~
    STM32單片機現已火遍大江南北,各種教程資料也是遍布各大網站論壇,可謂一抓一大把,但大部分都差不多。今天總結了幾篇電路城上關於STM32 的製作,不能說每篇都是經典,但都是在其他地方找不到的,很有學習參考意義的設計實例。尤其對於新手,是一個學習stm32單片機的“活生生”的範例。
  • 費曼學習法、時間統計法、整體學習法、康奈爾筆記、思維導圖
    下面我介紹一些牛人的方法,皆為乾貨。1、費曼學習法費曼說,要是不能把一個科學概念講得讓一個大學新生也能聽懂,那就說明我自己對這個概念也是一知半解的。5、康奈爾筆記方法中還有技巧,比方說快速閱讀的能力,特別是記筆記的技巧。
  • 【乾貨】數據挖掘中算法學習的2條進擊路線
    第1條路線(基於普通最小二乘法的)簡單線性回歸→線性回歸中的新進展(嶺回歸和LASSO回歸) → (此處可以插入Bagging和AdaBoost的內容) → Logistic回歸 →支持向量機(SVM) →感知機學習→神經網絡(初學者可先主要關注BP算法) →深度學習