前言和學習過程
寒假開始的任務是學習STM32單片機,剛拿到了微云電子的學習板并加入了微云電子STM32學習群中,下載了一些資料,并知道了該單片機學習板的主芯片為STM32F0系列,十分感謝老師給我學習的機會。 我學習時候,以看老師的學習開發手冊和STM32的視頻為主,并配上STM32芯片手冊,由于自己英語學的不錯,偶爾打開Wikipedia英文版和百度百科學習一些新知識。 第一章和第二章 開發板體驗和簡介 我認為這部分內容已經講的很明確了,可以作為科普讀物,詳細地了解板子及其強大的功能,暫時無需太多補充。 第三章 電路原理 電路外設的介紹在開發板手冊中已經十分清楚,這里補充一些原理和原因。 3.1 工作原理圖的使用 面對這個功能強大卻又讓人陌生的STM32開發板,可不要望而卻步,而要知道STM32開發板有什么功能,以及自己的知識框架中少了什么,然后要明白應該去學習哪些知識才可以攻克它。 知己知彼,百戰不殆。其中電路工作原理圖,就如同古代行軍打仗的地圖,你在看完電路圖后,就可以知道開發板的引腳及其對應元器件分配,就如圖打仗時候,在地圖上標出敵軍的具體部署,從而有目的的逐一擊破。那么這里,我們先找到《STM32+Linux原理圖.pdf》,打開看:
圖1.STM32芯片外設原理圖 上圖可謂是重中之重,想要學明白我們的微云電子開發板,該文件必不可少,而在該文件中這張圖必不可少,通過它,我們便明白了到底很多外設,例如Led、電源、LCD這些器件到底和誰連一塊,這決定了我們之后的程序怎么寫,如果不理解這段話,下面會詳細再介紹。 3.2硬件載體選擇:開發板VS面包板 有些人可能很不解,為什么我們程序一定要那么寫?(如:為什么Led一定和PA12有關而不寫PA11口呀?)或者說,為什么為什么Led就不能和其它的GPIO口“聯誼”,讓它們來輸出? 由于我們使用的是微云電子的STM32開發板是PCB(Printed Circuit Board)印制電路板,開發板與面包板不同之處在于,開發板已經將所有的器件焊接完成,即電路是已經完全被確定,且一一對應好的;面包板是可以更改的,按照自己的意愿來完成電路的設計,但是電路可能不穩定,而且要很長的時間來搭建。 因此為了學習以及使用方便,我們還是用PCB。既然開發板上已經定死了引腳和外設的關系,在學習該開發板應該多多翻閱《STM32+Linux原理圖.pdf》。 3.3 STM32介紹 我們在單片機里使用的是STM32F051C8T6,它是我們開發板的核心,也就是開發板上電子器件的老大,“擒賊先擒王!”。想要了解我們的這款開發板,其實也就是一直在學習STM32,怎么利用其他的小弟器件和它進行配合。 要想詳細地了解STM32,首先應該查其對應的DATASHEET,因為這畢竟是它們公司的出品,最最詳細地介紹了這款單片機。下面就通過翻譯,來介紹下我們微云電子STM32開發板上的這款單片機。 3.3.1 單片機命名法則
圖2.STM32命名實例圖 每個單片機的名字可不是隨便取的,它可是有自己的命名法則的,所以我們一開始得先知道為什么我們的單片機叫STM32F051C8T6。 結合上圖翻譯一下,來解釋一下我們的單片機STM32F051C8T6。 “STM32”是意法半導體的一款基于ARM的32位單片機,32位一聽就是高大上,完虐8位的80C51或者是它的同門師弟STM8; “F”指的是一般用途的單片機,就是比較適合民用,這樣價格不高,我們才可以消費得起; “051”是子家族的意思,具體沒去查,就是它們公司自己的一個分配; “C”指的是有48個引腳的封裝類型,所以我們的單片機正好四四方方的每邊12個引腳; “8”指的是有64KB的閃存空間,是STM32這幾個款式中閃存空間的最大的一款,足夠你用了。 “T”指的是,采用了LQFP封裝,不用深究; “6”指的是,該款單片機適合在-40℃到+85℃的環境下工作。 而由于STM32F051C8T6上沒有對應Options的字母,所以并不知道該選項,但是無關緊要,完全不影響我們的 那么,講了它名稱由來后,我們從應該已經宏觀上了解這款單片機了吧,接下來講講引腳,進一步理解它!
3.3.2 引腳介紹 首先看一下,我們微云電子的STM32開發板上的單片機STM32F051C8T6俯視圖:
圖3.開發板STM32單片機俯視圖 接著,我們詳細地介紹一下我們這款單片機的引腳分配,為大家揭開我們開發板上STM32的神秘面紗。ㄔ谶@里僅截取微云電子開發板上STM32F051C8T6的相關引腳,原創翻譯,部分內容與STM32中文手冊略有差異) 表1.STM32F051C8T6的引腳定義表 引腳號 | 引腳名稱(復位后的功能) | 引腳類型 | I/O結構 | 復用功能 | 附加功能 | 備注 | 1 | VBAT | S |
| 備用電源 |
| 2 | PC13 | I/O | TC | - | RTC_TAMP1, RTC_TS,RTC_OUT, WKUP2 | (1)(2) | 3 | PC14-OSC32_IN(PC14) | I/O | TC | - | OSC32_IN | (1)(2) | 4 | PC15-OSC32_OUT(PC15) | I/O | TC | - | OSC32_OUT | (1)(2) | 5 | PF0-OSC_IN(PF0) | I/O | FT | - | OSC_IN |
| 6 | PF1-OSC_OUT(PF1) | I/O | FT | - | OSC_OUT |
| 7 | NRST | I/O | RST | 器件復位輸入 / 內部復位輸出(低電平有效) |
| 8 | VSSA | S |
| 模擬地 |
| 9 | VDDA | S |
| 模擬電源 |
| 10 | PA0 | I/O | TTa | USART2_CTS, TIM2_CH1_ETR,
COMP1_OUT, TSC_G1_IO1 | ADC_IN0, COMP1_
INM6, RTC_TAMP2,
WKUP1 |
| 11 | PA1 | I/O | TTa | USART2_RTS, TIM2_CH2, TSC_
G1_IO2, EVENTOUT | ADC_IN1, COMP1_INP |
| 12 | PA2 | I/O | TTa | USART2_TX, TIM2_CH3, TIM15_
CH1, COMP2_OUT, TSC_G1_IO3 | ADC_IN2, COMP2_
INM6 |
| 13 | PA3 | I/O | TTa | USART2_RX, TIM2_CH4, TIM15_
CH2, TSC_G1_IO4 | ADC_IN3, COMP2_INP |
| 14 | PA4 | I/O | TTa | SPI1_NSS/I2S1_WS, USART2_
CK, TIM14_CH1, TSC_G2_IO1 | ADC_IN4, COMP1_
INM4, COMP2_INM4,
DAC1_OUT |
| 15 | PA5 | I/O | TTa | SPI1_SCK/I2S1_CK, CEC, TIM2_
CH_ETR, TSC_G2_IO2 | ADC_IN5, COMP1_
INM5, COMP2_INM5 |
| 16 | PA6 | I/O | TTa | SPI1_MISO/I2S1_MCK, TIM3_
CH1, TIM1_BKIN, TIM16_CH1,
COMP1_OUT, TSC_G2_IO3,
EVENTOUT | ADC_IN6 |
| 17 | PA7 | I/O | TTa | SPI1_MOSI/I2S1_SD, TIM3_
CH2, TIM14_CH1, TIM1_CH1N,
TIM17_CH1, COMP2_OUT, TSC_
G2_IO4, EVENTOUT | ADC_IN7 |
| 18 | PB0 | I/O | TTa | TIM3_CH3, TIM1_CH2N, TSC_
G3_IO2, EVENTOUT |
ADC_IN8
|
| 19 | PB1 | I/O | TTa | TIM3_CH4, TIM14_CH1, TIM1_
CH3N, TSC_G3_IO3 | ADC_IN9 |
| 20 | PB2 | I/O | FT | TSC_G3_IO4 | - |
| 21 | PB10 | I/O | FT | I2C2_SCL,
CEC,
TIM2_CH3,
TSC_SYNC | - |
| 22 | PB11 | I/O | FT | I2C2_SDA,
TIM2_CH4,
TSC_G6_IO1,
EVENTOUT | - |
| 23 | VSS | S |
| 數字地 |
| 24 | VDD | S |
| 數字電源 |
| 25 | PB12 | I/O | FT | SPI2_NSS, TIM1_BKIN, TSC_
G6_IO2, EVENTOUT | - |
| 26 | PB13 | I/O | FT | SPI2_SCK, TIM1_CH1N, TSC_
G6_IO3 | - |
| 27 | PB14 | I/O | FT | SPI2_MISO, TIM1_CH2N, TIM15_
CH1, TSC_G6_IO | - |
| 28 | PB15 | I/O | FT | SPI2_MOSI, TIM1_CH3N, TIM15_
CH1N, TIM15_CH2 | RTC_REFIN |
| 29 | PA8 | I/O | FT | USART1_CK, TIM1_CH1,
EVENTOUT, MCO | - |
| 30 | PA9 | I/O | FT | USART1_TX,
TIM1_CH2,
TIM15_BKIN,
TSC_G4_IO1 | - |
| 31 | PA10 | I/O | FT | USART1_RX,
TIM1_CH3,
TIM17_BKIN,
TSC_G4_IO2 | - |
| 32 | PA11 | I/O | FT | USART1_CTS,
TIM1_CH4,
COMP1_OUT,
TSC_G4_IO3,
EVENTOUT | - |
| 33 | PA12 | I/O | FT | USART1_RTS,
TIM1_ETR,
COMP2_OUT,
TSC_G4_IO4,
EVENTOUT | - |
| 34 | PA13(SWDIO) | I/O | FT | IR_OUT,
SWDIO | - | (3) | 35 | PF6 | I/O | FTf | I2C2_SCL | - |
| 36 | PF7 | I/O | FTf | I2C2_SDA | - |
| 37 | PA14(SWCLK) | I/O | FT | USART2_TX,
SWCLK | - | (3) | 38 | PA15 | I/O | FT | SPI1_NSS,
I2S1_WS,
USART2_RX,
TIM2_CH1_ETR,
EVENTOUT | - |
| 39 | PB3 | I/O | FT | SPI1_SCK,
I2S1_CK,
TIM2_CH2,
TSC_G5_IO1,
EVENTOUT | - |
| 40 | PB4 | I/O | FT | SPI1_MISO,
I2S1_MCK,
TIM3_CH1,
TSC_G5_IO2,
EVENTOUT | - |
| 41 | PB5 | I/O | FT | SPI1_MOSI,
I2S1_SD,
I2C1_SMBA,
TIM16_BKIN,
TIM3_CH2 | - |
| 42 | PB6 | I/O | FTf | I2C1_SCL,
USART1_TX,
TIM16_CH1N,
TSC_G5_IO3 | - |
| 43 | PB7 | I/O | FTf | I2C1_SDA,
USART1_RX,
TIM17_CH1N,
TSC_G5_IO4 | - |
| 44 | BOOT0 | I | B | Boot memory selection |
| 45 | PB8 | I/O | FTf | I2C1_SCL,
CEC,
TIM16_CH1,
TSC_SYNC | - | (3) | 46 | PB9 | I/O | FTf | I2C1_SDA,
IR_OUT,
TIM17_CH1,
EVENTOUT | - |
| 47 | VSS | S |
| 數字地 |
| 48 | VDD | S |
| 數字電源 |
|
表1中有太多英文縮寫,下面就由下表來解釋一下,其中的縮寫是什么意思: 表2. 引腳表的標記與縮寫解釋 名稱 | 縮寫 | 定義 | 引腳名 | 除非在指定的引腳名稱下面有括號說明,在復位期間和之后,引腳作為實際使用的功能與引腳名稱相同。 | 引腳類型 | S | 電源引腳 |
| I | 僅是輸入口 |
| I/O | 輸入/輸出雙向口 | I/O結構 | FT | 5V容忍能力I/O |
| FTf | 5V容忍能力I/O,附加 FM+ 能力 |
| TTa | 3.3V容忍能力的I/O直接連接到ADC |
| TC | 標準3.3VI/O |
| B | 專用BOOT0引腳 |
| RST | 雙向復位引腳,并嵌入弱上拉電阻 | 注釋 | 除非注釋中提到,否則所有I/O口在復位期間和復位后,認為是浮空輸入。 | 引腳功能 | 復用功能 | 通過 GPIOx_AFR寄存器選擇的功能 |
| 附加功能 | 通過外設寄存器直接選擇/使能的功能 |
在表1中,我們看到注釋里有些引腳后面帶有(1)~(3),這些注釋如下: (1).PC13, PC14 和PC15需要通過電源開關來供能,由于電源開關吸收僅3mA大小的電流,所以說,PC13, PC14 和PC15 這三個GPIO口的輸出模式受限:速度不可超過2 MHz,并且最大帶一個30pF的負載,最關鍵的是這幾個GPIO口禁止作為電流源(比如去點亮LED燈)。 (2).第一次實時時鐘域上電后,PC13, PC14 和PC15口可以作為GPIO口來使用。它們的功能取決于實時時鐘寄存器,而且這個部分的設置不會受到總復位的影響,詳細請參考實時時鐘域和實時時鐘寄存器的描述手冊。 (3) .在復位后,一些引腳被置成SWDIO和SWCLK這些備用功能,而且SWDIO的內部上拉和SWCLK的內部下拉功能被激活打開。
3.3.3 選擇微云電子STM32開發板的原因 功能強大:為什么選擇微云電子學習STM32單片機?這是因為從前面的介紹,或許我們已經發現STM32的高大上了,80C51可以做的,STM32都能完成,可以理解成STM32就是80C51不斷進化,進化進化最終質變,雖然說現在80C51運用范圍還是很廣的,但是一旦遇到一些大工程,這款8位單片機便死翹翹了。尤其是隨著時代的發展,智能家居已經成為顯示,雖然還沒有真正火起來,但是正如初生的旭日,越來越亮,它的前景可想而知。那時候,我想生產智能家居的單片機要更加高端,而不是80C51。我們知道80C51沒有如ADC、內部時鐘、溫度傳感器等等重要的功能,如果說它有的話,那就是外接了上去,這樣浪費時間還浪費錢,多不劃算!但是我們強大的STM32都已經給你備齊,請君使用!
|