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