stm32f030c8t6介紹
內(nèi)核 Cortex-M3
Flash 64K x 8bit
SRAM 20K x 8bit
GPIO 37個GPIO,分別為PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1
ADC 2個12bit ADC合計12路通道(外部通道:PA0到PA7+PB0到PB1,內(nèi)部通道:)
Timers
4個16bit定時器/計數(shù)器,分別為TIM1、TIM2、TIM3、TIM4
TM1帶死區(qū)插入,常用于產(chǎn)生PWM控制電機
2個看門狗定時器(獨立看門狗IWDG、窗口看門狗WWDG)
1個24bit向下計數(shù)的滴答定時器systick
工作電壓、溫度 2V~3.6V、-40°C ~ 85°C
通信串口
2*IIC,2*SPI,3*USART,1*CAN
系統(tǒng)時鐘 內(nèi)部8MHz時鐘HSI最高可倍頻到64MHz,外部8MHz時鐘HSE最高可倍頻到72MHz
ARM公司在ARM11以后改用Cortex命名,并分成A、R和M三類,M系列有M0、M0+、M3、M4、M7。 Cortex-M3是ARM公司推出的基于ARMv7架構(gòu)的MCU內(nèi)核,ST公司在此內(nèi)核的基礎上完成了USART、DMA、GPIO等外圍電路的設計。在M系列不同內(nèi)核開發(fā)下的STM32,大致可分成低功耗系列、主流系列、高性能系列3個部分,其具體信息如下圖所示:
相同系列的內(nèi)核一般相同,如F1系列都采用Cortex-M3內(nèi)核開發(fā),但根據(jù)Flash大小不同可將STM32分成小容量產(chǎn)品(<64K)、中等容量產(chǎn)品(介于64K-128K)、大容量產(chǎn)品3個部分,各部分容量產(chǎn)品在使用標準庫SPL開發(fā)時需要使用不同的啟動文件并在預編譯處做好修改,其具體信息如下圖所示:
STM32F103C8T6整個系統(tǒng)結(jié)構(gòu)可以分為由ARM公司設計的Cortex-M3內(nèi)核和ST公司在此基礎上優(yōu)化的總線矩陣、DMA(Direct Memory Access,直接內(nèi)存讀取)、AHB、APB1以及APB2上掛載的外設等兩個部分,詳細結(jié)構(gòu)如下圖所示:
Cortex-M3摒棄了馮· 諾依曼結(jié)構(gòu)(普林斯頓結(jié)構(gòu)),采用了將指令存儲和數(shù)據(jù)存儲分開的 的哈佛結(jié)構(gòu)(Harvard Architecture ),這樣一來Cortex-M3同時擁有了獨立的32-bit指令總線和32-bit數(shù)據(jù)總線,數(shù)據(jù)訪問將不再占用指令總線,同時讀取指令和數(shù)據(jù)后提升了MCU運行速度。馮諾依曼和哈弗結(jié)構(gòu)的宏觀對比如下圖所示:
Cortex-M3是一個 32 位處理器內(nèi)核,正因如此,STM32才被稱作為32-bit微控制器,他擁有32條地址總線,也就是說最大尋址空間為。此外,Cortex-M3的寄存器是32 位的,存儲器接口也是 32 位的,其詳細結(jié)構(gòu)如下圖所示:
二、最小系統(tǒng)板
或許大家有經(jīng)常聽起過最小系統(tǒng)板這個詞兒,那么什么是最小系統(tǒng)板呢?其實最小系統(tǒng)板就是一個最精簡的電路,精簡到只能維持MCU的最基本的正常工作。最小系統(tǒng)一般由外部復位電路、外部時鐘電路以及MCU本體構(gòu)成,除此之外沒有其他諸如藍牙、外置EEPROM、時鐘芯片DS1302、SPI接口顯示屏等外接設備。(注:STM32支持內(nèi)部時鐘和上電復位,但從傳統(tǒng)意義上講最小系統(tǒng)就是由外部復位電路、外部時鐘電路以及MCU本體構(gòu)成。)我在淘寶上買了一塊STM32F103C8T6的最小系統(tǒng)板,板子的設計很精致。喏,它長這個樣子:
如果你對最小系統(tǒng)仍一知半解,那你看看下面這個正點原子開發(fā)的開發(fā)板就能夠明白,最小系統(tǒng)是真的精簡到不能再精簡了。
其實淘寶買來的最小系統(tǒng)板和10塊錢包郵的那個藍色最小系統(tǒng)板區(qū)別不大,只是將一些引腳引出好插諸如顯示屏類的外設。板子設計的很巧妙,所有引腳都引出來了,同時預留四個接口方便接入顯示屏等設備,預留了SWD調(diào)試接口,可以使用ST-LINK下載程序與仿真。
跟STC89C52RC單片機不一樣的是,STM32F103C8T6的GPIO有8種模式,其中包含上拉、下拉輸入模式,所以外接按鈕時可不設計上下拉電阻。根據(jù)他的原理圖顯示:按鍵KEY0一端接到3.3V的VCC,一端接到PA0引腳。發(fā)光二極管LED0一端也同樣經(jīng)1KΩ電阻接到3.3V的VCC,另一端則接到PC13上。因此,想要讓二極管發(fā)光的話需要讓PC13輸出低電平。STM32最大工作電壓3.6V,使用了LDO(低壓差線性穩(wěn)壓器)將輸入電壓VIN降到3.3v給微控制器供電。3.3V和GND之間的4個0.1uf的旁路電容(去除高頻交流信號)接到了芯片的4個VDD和4個VSS上(WHAT?芯片為啥整四個VDD和四個VSS?我猜應該是增強供電能力,保證供電的可靠性)。
三、命名規(guī)則
我在網(wǎng)上找到了STM32F103中文手冊,單片機命名原理如下圖所示:
四、引腳排布&引腳復用
根據(jù)命名規(guī)則可知,STM32F103C8T6中的C代表著這款芯片有48個引腳,其引腳排布如下圖所示:
STM32微控制器有著豐富的功能,僅靠48個引腳是不夠分配所有功能的,所以有的引腳可以實現(xiàn)好幾種功能,這就叫引腳復用。一般而言,大部分引腳的第一功能是GPIO(通用輸入輸出口)。但值得注意的是:PA13、PA14、P15、PB3、PB4、PC14、PC15、PD0、PD1的默認功能并不是GPIO,使用時需要開啟AFIO時鐘,注意一下這一點。B站某UP制作了一個直觀的圖片,如下圖所示:
圖片來源:公眾號"電子開發(fā)學習"
官方手冊提供的STM32F103系列微控制器引腳的默認功能如下圖所示:
五、程序下載
STM32單片機支持3種程序下載方式,根據(jù)原理不同可分為ISP串口下載(使用USB-TTL接PA9、PA10)、SWD下載(使用ST-LINK接PA13、PA14)、JTAG下載(使用JLINK接PA13、PA14、PA15、PB3、PB4)。
1.ISP下載
ISP的全程是In-System Programming,在線系統(tǒng)編程的意思。STM32單片機一般可通過UART1引腳進行程序燒錄,燒錄的時候需要配合BOOT0、BOOT1接地與否來實現(xiàn)。BOOT0、BOOT1可以組合出四種狀態(tài),不同位置的含義如下圖所示,其中X是無關(guān)項。
使用ISP串口下載前,將單片機上電之前需要先用跳線帽把BOOT0短接到1的位置,BOOT1短接到0的位置,即系統(tǒng)存儲器模式,然后才能通過串口下載程序。ISP串口下載完成后斷電,在單片機上電之前需要先用跳線帽把BOOT0短接到0的位置,即主閃存存儲器模式。
由于單片機使用的TTL電平通信協(xié)議,與電腦的USB口進行串口通信時需要使用轉(zhuǎn)串口芯片,常見的有CH340系列(如CH340N)、FT232、PL2303等等,下圖以CH340T為例。
下載器GND與單片機GND相連(連一個就行),下載器3.3V與單片機3.3V相連(或者下載器5V與單片機VIN相連)、下載器RXD與單片機PA9(U1TX)相連,下載器TXD與單片機PA10(U1RX)相連。
了解接線后,可以嘗試編譯下載。下載軟件有很多,ST官方出了Flash Loader Demonstrator軟件用于程序下載,國內(nèi)也有一款FLYMCU的下載軟件。
Flash Loader Demonstrator
2.SWD下載
使用SWD接口下載只需要連接3.3V(如果燒錄程序的板子自帶供電的話3.3V引腳也不用連)、GND、SWDIO(PA13)、 SWCLK(PA14)、RST(非必要連線),可以從淘寶購買十幾塊的ST-LINK下載器(這種U盤形狀的其實不是ST公司出品的,但是燒錄了他們的固件,也是可以用滴)。使用SWD接口除了可以燒錄程序外,還可以實現(xiàn)在線仿真(debug),仿真過程可以監(jiān)視寄存器等數(shù)據(jù),非常適合軟件開發(fā)(找問題)。值得注意的是,ST-LINK/V2只支持給自家的STM32和STM8燒錄程序,不支持為其他公司的單片機燒錄程序(即使同樣搭載Cortex-M3內(nèi)核)。
ST-LINK/V2
3.JTAG下載
JTAG接口需要使用TMS(模式選擇)、TCK(時鐘)、TDI(數(shù)據(jù)輸入)、TDO(數(shù)據(jù)輸出)、nTRST(復位,非必要),對應到STM32F103C8T6上就是PA13(TMS)、PA14(TCK)、PA15(TDI)、PB3(TDO)、PB4(nTRST)引腳,這些引腳第一功能就是JTAG接口,這就是上面所說的為什么這些引腳不能簡單的當GPIO用。采用JTAG下載時可以使用J-LINK下載器(正版SEGGER的J-LINK價格比較昂貴,國內(nèi)仿制的建議買V9版本以上),也可以使用ST公司原廠或國內(nèi)仿制的帶JTAG接口的ST-LINK/V2(如正點原子推出的,不過還是好貴,嗚嗚嗚)。不過JTAG能實現(xiàn)的功能SWD一般也能實現(xiàn),我比較懶,一般不使用這種下載接口。
J-LINK
ST-LINK/V2
如果我們不需要使用JTAG下載,但GPIO資源緊張或PCB設計時已經(jīng)使用了這些第一功能為JTAG的引腳,那么我們就需要關(guān)閉JTAG。比如說我要使用GPIOA15作為GPIO口,那么代碼層面需要這樣實現(xiàn):
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能PORTA時鐘
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);// 關(guān)閉JTAG但使能SWD
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PA15
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設置成上拉輸入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
詳細關(guān)閉方法:見另一位博主的《STM32 JTAG調(diào)試》
六、RTT
RTT的全稱是Real Time Transfer,翻譯過來就是實時傳輸。為什么給大家介紹這個呢,上面有講到J-LINK、ST-LINK等可以下載程序,也可以在線仿真。那么問題來了,他們直接支持串口通信嘛?答案是不可以!!!不過別慌,針對這個問題SEGGER公司推出了共享內(nèi)存技術(shù),這個功能可以省去外接使用USART進行串口數(shù)據(jù)測試,灰常方便。不過由于RTT是SEGGER公司推出的,所以這個是需要使用J-LINK V8版本及以上的調(diào)試器的,如果不差錢的話,可以優(yōu)先考慮J-LINK。RTT支持所有搭載ARM Cortex-M0/M0+/M1/M3/M4/M7/M23/M33內(nèi)核的MCU,不局限于STM32。
SEGGER官網(wǎng)
不過使用RTT功能是需要往工程文件里添加SEGGER提供的源代碼的,官網(wǎng)安裝包:" data-link-title="<官網(wǎng)下載>"><官網(wǎng)下載>,詳細的安裝與使用教程見《硬漢哥分享的資料》。
導入源代碼后可以在程序中使用以下函數(shù),這些函數(shù)根據(jù)描述看很容易知道他的作用:
函數(shù)名 描述
SEGGER_RTT_Read() Read data from an input buffer.
SEGGER_RTT_Write() Write data to an output buffer.
SEGGER_RTT_WriteString() Write a zero-terminated string to an output buffer.
SEGGER_RTT_printf() Write a formatted string to an output buffer.
SEGGER_RTT_GetKey() Get one character from input buffer 0.
SEGGER_RTT_HasKey() Check if a character is available in input buffer 0.
SEGGER_RTT_WaitKey() Wait for a character to be available in input buffer 0 and get it.
SEGGER_RTT_ConfigUpBuffer() Configure an up (output) buffer.
SEGGER_RTT_ConfigDownBuffer() Configure a down (input) buffer.
SEGGER_RTT_Init() Initialize RTT Control Block structure when using RAM only targets.
SEGGER_RTT_SetTerminal() Set the "virtual" Terminal to use for output on channel 0 via Write and WriteString.
SEGGER_RTT_TerminalOut() Send a zero-terminated string via a "virtual" terminal.
最后,使用RTT需要在電腦上安裝J-Link RTT Viewer、J-Link RTT Client、J-Link RTT Logger,這3個終端可以選擇自己喜歡的安裝使用。
七、RTOS
RTOS(Real-time operating system)是實時操作系統(tǒng)的總稱,目前市面上有freeRTOS、RT-Thread、UCOS-III等多種實時操作系統(tǒng),到了STM32這種復雜而強大的硬件層面,程序員將不再僅僅拿它當傳統(tǒng)的MCU來跑裸機程序(裸機是指沒有用上RTOS的程序),而是開始考慮程序的協(xié)調(diào)性和并行多任務(并不是真正意義上的并行,因為單核同一時間只能處理一件事情)。RTOS是一個有趣的東西,如果大家感興趣我后期會考慮更新一篇有關(guān)RTOS的文章,大家目前可以去freeRTOS官網(wǎng)看看或者閱讀其他作者的文章。
八、官網(wǎng)原文介紹
The STM32F103xx medium-density performance line family incorporates the high-performance ARM®Cortex®-M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses. All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN.
The devices operate from a 2.0 to 3.6 V power supply. They are available in both the –40 to +85 °C temperature range and the –40 to +105 °C extended temperature range. A comprehensive set of power-saving mode allows the design of low-power applications.
The STM32F103xx medium-density performance line family includes devices in six different package types: from 36 pins to 100 pins. Depending on the device chosen, different sets of peripherals are included, the description below gives an overview of the complete range of peripherals proposed in this family.
These features make the STM32F103xx medium-density performance line microcontroller family suitable for a wide range of applications such as motor drives, application control, medical and handheld equipment, PC and gaming peripherals, GPS platforms, industrial applications, PLCs, inverters, printers, scanners, alarm systems, video intercoms, and HVACs.
主要特性
ARM®32-bit Cortex®-M3 CPU Core
72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
Single-cycle multiplication and hardware division
Memories
64 or 128 Kbytes of Flash memory
20 Kbytes of SRAM
Clock, reset and supply management
2.0 to 3.6 V application supply and I/Os
POR, PDR, and programmable voltage detector (PVD)
4-to-16 MHz crystal oscillator
Internal 8 MHz factory-trimmed RC
Internal 40 kHz RC
PLL for CPU clock
32 kHz oscillator for RTC with calibration
Low-power
Sleep, Stop and Standby modes
VBAT supply for RTC and backup registers
2 x 12-bit, 1 μs A/D converters (up to 16 channels)
Conversion range: 0 to 3.6 V
Dual-sample and hold capability
Temperature sensor
DMA
7-channel DMA controller
Peripherals supported: timers, ADC, SPIs, I2Cs and USARTs
Up to 80 fast I/O ports
26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
Debug mode
Serial wire debug (SWD) & JTAG interfaces
7 timers
Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
16-bit, motor control PWM timer with dead-time generation and emergency stop
2 watchdog timers (Independent and Window)
SysTick timer 24-bit downcounter
Up to 9 communication interfaces
Up to 2 x I2C interfaces (SMBus/PMBus)
Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)
Up to 2 SPIs (18 Mbit/s)
CAN interface (2.0B Active)
USB 2.0 full-speed interface
CRC calculation unit, 96-bit unique ID
Packages are ECOPACK®
九、文章小結(jié)
STM32F103C8T6單片機采用LQFP48封裝設計,芯片一共引出44只引腳,其中A口有A0-A15共16個引腳,B口有B0-B15共16個引腳,C口有C13-C15共3個引腳,D口有D0-D1共兩個引腳。值得注意的是最小核心板C14和C15接了32.768K晶振,D0和D1接了8MHz晶振,一般不要用做IO口。如果實在要用只能去掉外部晶振電路(使用HSI、LSI),通過重映射和配置AFIO_MAPR寄存器實現(xiàn)。