STM32單片機(jī)學(xué)習(xí)筆記
1、 AHB系統(tǒng)總線分為APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速設(shè)備
2、Stm32f10x.h相當(dāng)于reg52.h(里面有基本的位操作定義),另一個(gè)為stm32f10x_conf.h專門控制外圍器件的配置,也就是開(kāi)關(guān)頭文件的作用
3、 HSE Osc(High Speed External Oscillator)高速外部晶振,一般為8MHz,HSI RC(High Speed InternalRC)高速內(nèi)部RC,8MHz
4、 LSE Osc(Low Speed External Oscillator)低速外部晶振,一般為32.768KHz,LSI RC(Low Speed InternalRC)低速內(nèi)部晶振,大概為40KHz左右,提供看門狗時(shí)鐘和自動(dòng)喚醒單元時(shí)鐘源
5、 SYSCLK時(shí)鐘源有三個(gè)來(lái)源:HSI RC、HSE OSC、PLL
6、 MCO[2:0]可以提供4源不同的時(shí)鐘同步信號(hào),PA8
7、 GPIO口貌似有兩個(gè)反向串聯(lián)的二極管用作鉗位二極管。
8、 總線矩陣采用輪換算法對(duì)系統(tǒng)總線和DMA進(jìn)行仲裁
9、 ICode總線,DCode總線、系統(tǒng)總線、DMA總線、總線矩陣、AHB/APB橋
10、在使用一個(gè)外設(shè)之前,必須設(shè)置寄存器RCC_AHBENR來(lái)打開(kāi)該外設(shè)的時(shí)鐘
11、數(shù)據(jù)字節(jié)以小端存儲(chǔ)形式保存在存儲(chǔ)器中
12、 內(nèi)存映射區(qū)分為8個(gè)大塊,每個(gè)塊為512MB
13、 FLASH的一頁(yè)為1K(小容量和中容量),大容量是2K。
14、 系統(tǒng)存儲(chǔ)區(qū)(SystemMemory)為ST公司出廠配置鎖死,用戶無(wú)法編輯,用于對(duì)FLASH區(qū)域進(jìn)行重新編程。所以我們燒寫(xiě)程序務(wù)必選擇BOOT1 = 0,這樣通過(guò)內(nèi)嵌的自舉程序?qū)LASH進(jìn)行燒寫(xiě),比如中斷向量表和代碼
15、 STM32核心電壓為1.8V
16、 STM32復(fù)位有三種:系統(tǒng)復(fù)位、上電復(fù)位、備份區(qū)域復(fù)位。其中系統(tǒng)復(fù)位除了RCC_CSR中的復(fù)位標(biāo)志和BKP中的數(shù)值不復(fù)位之外,其他的所有寄存器全部復(fù)位。觸發(fā)方式例如外部復(fù)位、看門狗復(fù)位、軟件復(fù)位等;電源復(fù)位由于外部電源的上電/掉電復(fù)位或者待機(jī)模式返回。復(fù)位除了BKP中的寄存器值不動(dòng),其他全部復(fù)位;備份區(qū)域復(fù)位的觸發(fā)源為軟件復(fù)位或者VDD和VBAT全部掉電時(shí)。
17、 單片機(jī)復(fù)位后所有I/O口均為浮空輸入狀態(tài)
18、 68個(gè)可屏蔽中斷通道,16個(gè)可編程優(yōu)先級(jí),16個(gè)內(nèi)核中斷,一共68+16=84個(gè)中斷。103系列只有60個(gè)中斷,107系列才有68個(gè)中斷
19、 系統(tǒng)啟動(dòng)從0x00000004開(kāi)始,0x000 0000保留
20、 (NestedVectored Interrupt Controller)NVIC嵌套向量中斷控制器,分為兩種:搶先式優(yōu)先級(jí)(可嵌套)和中斷優(yōu)先級(jí)(副優(yōu)先級(jí),不能嵌套)。兩種優(yōu)先級(jí)由4位二進(jìn)制位決定。分配下來(lái)有十六種情況:
21、0號(hào)搶先優(yōu)先級(jí)的中斷,可以打斷任何中斷搶先優(yōu)先級(jí)為非0號(hào)的中斷;1號(hào)搶先優(yōu)先級(jí)的中斷,可以打斷任何中斷搶先優(yōu)先級(jí)為2、3、4號(hào)的中斷;……;構(gòu)成中斷嵌套。如果兩個(gè)中斷的搶先優(yōu)先級(jí)相同,誰(shuí)先出現(xiàn),就先響應(yīng)誰(shuí),不構(gòu)成嵌套。如果一起出現(xiàn)(或掛在那里等待),就看它們2個(gè)誰(shuí)的子優(yōu)先級(jí)高了,如果子優(yōu)先級(jí)也相同,就看它們的中斷向量位置了。原來(lái)中斷向量的位置是最后的決定因素?。。?!
22、%20上電初始化后AIRC初始化為0,為16個(gè)搶先式優(yōu)先級(jí),但是由于所有的外部通道中斷優(yōu)先級(jí)控制字PRI_n為0,所以搶先式優(yōu)先級(jí)相同,此時(shí)就不能嵌套了
23、%20NVI中有ISER[2](Interrupt%20Set-Enable%20Registers),ICER[2](Interrupt%20Clear-Enable%20Registers),ISPR[2](Interrupt%20Set-Pending%20Registers),ICPR[2](Interrupt%20Clear-Pending%20Registers),IABR[2](Active%20Bit%20Registers),IPR[15](InterruptPriority%20Registers)定義。其中ISER和ICER分別為中斷使能和中斷失能寄存器,都是寫(xiě)1來(lái)使能/失能中斷的。為什么寫(xiě)1?為什么不采用一個(gè)寄存器而用兩個(gè)寄存器來(lái)表示中斷使能/失能狀態(tài)?由于硬件,寫(xiě)0比較復(fù)雜,并且可能造成其他位的狀態(tài)改變,所以用1來(lái)表示打開(kāi)或者關(guān)斷是比較合理的
24、%20中斷標(biāo)志位需要手動(dòng)清除
25、%20配置外圍器件的一般步驟:1、打開(kāi)端口時(shí)鐘。2、定義初始化結(jié)構(gòu)體并初始化。3、調(diào)用
26、串口的奇偶校驗(yàn):如果是奇偶校驗(yàn),那么USART_InitStructure.USART_WordLength=%20USART_WordLength_9b;這個(gè)數(shù)據(jù)的長(zhǎng)度必須設(shè)定為9位!
27、ADC的規(guī)則組可以自定義轉(zhuǎn)換通道順序和轉(zhuǎn)換的通道個(gè)數(shù)。在實(shí)際應(yīng)用中,有時(shí)候希望有一些特別的通道具有很高的優(yōu)先權(quán),需要在規(guī)則組進(jìn)行轉(zhuǎn)換的時(shí)候強(qiáng)制打斷,進(jìn)行另一個(gè)通道的轉(zhuǎn)換,這樣一組通道,叫做注入組。
28、定時(shí)器的輸出比較模式:Timing(凍結(jié),什么都不做,普通定時(shí)),Active(OCxREF輸出高電平有效),Inactive(OCxREF輸出低電平),Toggle(比較成功后翻轉(zhuǎn)電平)。
29、STM32的定時(shí)器從0開(kāi)始計(jì)數(shù),滿足一些條件,給出標(biāo)志位(比如匹配成功、時(shí)間更新、溢出等)然后從0開(kāi)始計(jì)數(shù)。這一點(diǎn)和51不同。
30、OCx=OCxREF+極性
31、自動(dòng)裝載寄存器和影子寄存器:前者相當(dāng)于51當(dāng)中的溢出設(shè)定數(shù)值。而影子寄存器顧名思義是影子,就是寄存器的另一分copy。實(shí)際起作用的是影子寄存器,而程序員操縱的則是自動(dòng)裝載寄存器。如果APPE位使能,表明自動(dòng)裝載寄存器的值在下一次更新事件發(fā)生后才寫(xiě)入新值。否則,寫(xiě)入自動(dòng)裝載寄存器的值會(huì)被立即更新到影子寄存器。
32、RCC_PCLK1Config(RCC_HCLK_Div4);PCLK1的4分頻給定時(shí)器基準(zhǔn)時(shí)鐘
33、定時(shí)器配置:RCC、NVIC、GPIO(OC輸出或者PWM)、TIMx
34、通用定時(shí)器可以輸出4路不同的PWM,高級(jí)定時(shí)器可以輸出4路不同的PWM外,還可以輸出3路互補(bǔ)的PWM信號(hào)(驅(qū)動(dòng)三相電機(jī)),一共有7路。這樣算出來(lái)STM32可以產(chǎn)生30路PWM=7*2+4*4
35、
36、高級(jí)定時(shí)器時(shí)鐘源掛在了APB2上,而通用定時(shí)器掛在APB1上。AHB(72mhz)→APB1分頻器(默認(rèn)2)→APB1時(shí)鐘信號(hào)(36mhz)→倍頻器(*2倍)→通用定時(shí)器時(shí)鐘信號(hào)(72mhz)。如果APB1沒(méi)有分頻,那么通用定時(shí)器的時(shí)鐘信號(hào)頻率就直接等于APB1的時(shí)鐘頻率,沒(méi)有上述的倍頻器*2過(guò)程。TIM_SetAutoreload()用來(lái)改變PWM的頻率,TIM_SetCompare1()用來(lái)改變占空比
37、有刷電機(jī)一般啟動(dòng)力矩大一些,無(wú)刷電機(jī)啟動(dòng)力矩小,運(yùn)行起來(lái)力矩大。有刷電機(jī)采用電刷機(jī)械電流換向,而無(wú)刷電機(jī)則通過(guò)霍爾傳感器測(cè)出轉(zhuǎn)子的電流來(lái)判斷電機(jī)的運(yùn)動(dòng)位置和方向,返回給控制回路。
38、死區(qū)是必須要有的,因?yàn)檫@涉及到電路的短路問(wèn)題。晶閘管在換向的時(shí)候需要死區(qū)時(shí)間來(lái)徹底關(guān)斷線路
39、剎車功能用來(lái)在控制回路出現(xiàn)問(wèn)題時(shí),硬件自動(dòng)給予外部電機(jī)進(jìn)行緊急剎車制動(dòng),反應(yīng)在PWM上持續(xù)給出一個(gè)固定的占空比?(三相驅(qū)動(dòng)也是?)
40、PWM輸出最好采用PWM模式,其他的比較輸出模式相位會(huì)慢慢改變,不精準(zhǔn)
41、對(duì)FLASH的讀寫(xiě)需要先解鎖后加鎖。FLASH寫(xiě)0容易,寫(xiě)1難。
42、下載程序有兩種方式,一種為ICP(在線編程),適用于JTAG或SWD協(xié)議下的燒寫(xiě)程序。另一種成為IAP(在應(yīng)用編程),適用于很多接口(USB,串口,CAN)下載到存儲(chǔ)器中,IAP允許在程序運(yùn)行時(shí)重新燒寫(xiě)FLASH
43、FLASH分為主存儲(chǔ)器(這里放置用戶的程序代碼)和信息塊(啟動(dòng)代碼),除此之外,還有一部分叫做系統(tǒng)存儲(chǔ)器,這一塊用戶不可操作,為ST公司出產(chǎn)后固化,為系統(tǒng)的上電自舉程序
44、FLASH在寫(xiě)的時(shí)候,一定不能讀,如果有讀操作,那么將會(huì)鎖住總線
45、對(duì)FLASH操作時(shí),必須打開(kāi)HIS
46、STM32有兩種看門狗(IWDG獨(dú)立看門狗《獨(dú)立時(shí)鐘》,WWDG窗口看門狗《由APB1分頻而來(lái)》)
47、SPI的的最高頻率為36MHz(fpclk/2)
48、 TIM1和TIM8高級(jí)定時(shí)器在輸出PWM時(shí),需要配置一下主輸出功能(CtrlPWMOutputs)才能輸出PWM。其他的通用定時(shí)器不需要這樣配置。但是TIM6和TIM7沒(méi)有PWM輸出功能。
49、Code為程序代碼部分
RO-data表示程序定義的常量(如:const temp等);
RW-data表示已初始化的全局變量
ZI-data表示未初始化的全局變量,以及初始化為0的變量
Code, RO-data,RW-data..............flash
RW-data, ZIdata...................RAM
初始化時(shí)RW-data從flash拷貝到RAM
50、STM32F103ZET6有144個(gè)引腳(Z為144),其中,可用IO口為112個(gè)(7X16=112,ABCDEFG口)
51、ARM公司只生產(chǎn)內(nèi)核標(biāo)準(zhǔn),不生產(chǎn)芯片。ST、TI這樣的公司從ARM公司那里購(gòu)買內(nèi)核,然后外加自己的總線結(jié)構(gòu)、外設(shè)、存儲(chǔ)器、始終和復(fù)位、I/O后就組成了自己的芯片。
52、CMSIS標(biāo)準(zhǔn)用于在向上的用戶層和下面的硬件層交換信息。這個(gè)架構(gòu)當(dāng)然可以自己定義,但是這樣的話就會(huì)沒(méi)有標(biāo)準(zhǔn)。所以強(qiáng)制使用CMSISI標(biāo)準(zhǔn)來(lái)設(shè)計(jì)芯片。通俗點(diǎn)的講就是系統(tǒng)初始化的函數(shù)名稱CMSIS定義為SystemInit(),GPIO_ResetBits()等
53、端口復(fù)用和端口重映射是兩個(gè)概念:前者在使能其對(duì)應(yīng)的端口和對(duì)應(yīng)的功能時(shí)鐘即可。后者需要打開(kāi)AFIO時(shí)鐘,然后進(jìn)行端口的重映射GPIO_PinRemapConfig()
54、下載程序只能使用串口1,在硬件設(shè)計(jì)時(shí)一定要注意!
55、J-TAG調(diào)試頻率一般設(shè)定為2MHz,而SWD調(diào)試頻率可以設(shè)定為10MHz
56、SysTick的中斷實(shí)現(xiàn)可以有兩種方式:循環(huán)等待和中斷法。推薦用循環(huán)等待,中斷法可能會(huì)出問(wèn)題而且占用資源。
57、部分I/O引腳是5V兼容的。單個(gè)I/O的最大驅(qū)動(dòng)電流和灌入電流均為25mA。整個(gè)芯片的電流為150mA
58、KEIL支持位段操作,可以利用C語(yǔ)言中的位段知識(shí)定義位段結(jié)構(gòu)體,然后對(duì)單獨(dú)的寄存器進(jìn)行單獨(dú)的位操作。
59、關(guān)于內(nèi)部上下拉電阻的設(shè)置:如果外部的按鍵另一頭接地,那么需要設(shè)置成上拉電阻。(理由是當(dāng)沒(méi)有按下按鍵