stm32f030c8t6介紹
內(nèi)核 Cortex-M3
Flash 64K x 8bit
SRAM 20K x 8bit
GPIO 37個(gè)GPIO,分別為PA0-PA15、PB0-PB15、PC13-PC15、PD0-PD1
ADC 2個(gè)12bit ADC合計(jì)12路通道(外部通道:PA0到PA7+PB0到PB1,內(nèi)部通道:)
Timers
4個(gè)16bit定時(shí)器/計(jì)數(shù)器,分別為TIM1、TIM2、TIM3、TIM4
TM1帶死區(qū)插入,常用于產(chǎn)生PWM控制電機(jī)
2個(gè)看門狗定時(shí)器(獨(dú)立看門狗IWDG、窗口看門狗WWDG)
1個(gè)24bit向下計(jì)數(shù)的滴答定時(shí)器systick
工作電壓、溫度 2V~3.6V、-40°C ~ 85°C
通信串口
2*IIC,2*SPI,3*USART,1*CAN
系統(tǒng)時(shí)鐘 內(nèi)部8MHz時(shí)鐘HSI最高可倍頻到64MHz,外部8MHz時(shí)鐘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)核的基礎(chǔ)上完成了USART、DMA、GPIO等外圍電路的設(shè)計(jì)。在M系列不同內(nèi)核開發(fā)下的STM32,大致可分成低功耗系列、主流系列、高性能系列3個(gè)部分,其具體信息如下圖所示:
相同系列的內(nèi)核一般相同,如F1系列都采用Cortex-M3內(nèi)核開發(fā),但根據(jù)Flash大小不同可將STM32分成小容量產(chǎn)品(<64K)、中等容量產(chǎn)品(介于64K-128K)、大容量產(chǎn)品3個(gè)部分,各部分容量產(chǎn)品在使用標(biāo)準(zhǔn)庫SPL開發(fā)時(shí)需要使用不同的啟動(dòng)文件并在預(yù)編譯處做好修改,其具體信息如下圖所示:
STM32F103C8T6整個(gè)系統(tǒng)結(jié)構(gòu)可以分為由ARM公司設(shè)計(jì)的Cortex-M3內(nèi)核和ST公司在此基礎(chǔ)上優(yōu)化的總線矩陣、DMA(Direct Memory Access,直接內(nèi)存讀取)、AHB、APB1以及APB2上掛載的外設(shè)等兩個(gè)部分,詳細(xì)結(jié)構(gòu)如下圖所示:
Cortex-M3摒棄了馮· 諾依曼結(jié)構(gòu)(普林斯頓結(jié)構(gòu)),采用了將指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)分開的 的哈佛結(jié)構(gòu)(Harvard Architecture ),這樣一來Cortex-M3同時(shí)擁有了獨(dú)立的32-bit指令總線和32-bit數(shù)據(jù)總線,數(shù)據(jù)訪問將不再占用指令總線,同時(shí)讀取指令和數(shù)據(jù)后提升了MCU運(yùn)行速度。馮諾依曼和哈弗結(jié)構(gòu)的宏觀對(duì)比如下圖所示:
Cortex-M3是一個(gè) 32 位處理器內(nèi)核,正因如此,STM32才被稱作為32-bit微控制器,他擁有32條地址總線,也就是說最大尋址空間為。此外,Cortex-M3的寄存器是32 位的,存儲(chǔ)器接口也是 32 位的,其詳細(xì)結(jié)構(gòu)如下圖所示:
二、最小系統(tǒng)板
或許大家有經(jīng)常聽起過最小系統(tǒng)板這個(gè)詞兒,那么什么是最小系統(tǒng)板呢?其實(shí)最小系統(tǒng)板就是一個(gè)最精簡的電路,精簡到只能維持MCU的最基本的正常工作。最小系統(tǒng)一般由外部復(fù)位電路、外部時(shí)鐘電路以及MCU本體構(gòu)成,除此之外沒有其他諸如藍(lán)牙、外置EEPROM、時(shí)鐘芯片DS1302、SPI接口顯示屏等外接設(shè)備。(注:STM32支持內(nèi)部時(shí)鐘和上電復(fù)位,但從傳統(tǒng)意義上講最小系統(tǒng)就是由外部復(fù)位電路、外部時(shí)鐘電路以及MCU本體構(gòu)成。)我在淘寶上買了一塊STM32F103C8T6的最小系統(tǒng)板,板子的設(shè)計(jì)很精致。喏,它長這個(gè)樣子:
如果你對(duì)最小系統(tǒng)仍一知半解,那你看看下面這個(gè)正點(diǎn)原子開發(fā)的開發(fā)板就能夠明白,最小系統(tǒng)是真的精簡到不能再精簡了。
其實(shí)淘寶買來的最小系統(tǒng)板和10塊錢包郵的那個(gè)藍(lán)色最小系統(tǒng)板區(qū)別不大,只是將一些引腳引出好插諸如顯示屏類的外設(shè)。板子設(shè)計(jì)的很巧妙,所有引腳都引出來了,同時(shí)預(yù)留四個(gè)接口方便接入顯示屏等設(shè)備,預(yù)留了SWD調(diào)試接口,可以使用ST-LINK下載程序與仿真。
跟STC89C52RC單片機(jī)不一樣的是,STM32F103C8T6的GPIO有8種模式,其中包含上拉、下拉輸入模式,所以外接按鈕時(shí)可不設(shè)計(jì)上下拉電阻。根據(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個(gè)0.1uf的旁路電容(去除高頻交流信號(hào))接到了芯片的4個(gè)VDD和4個(gè)VSS上(WHAT?芯片為啥整四個(gè)VDD和四個(gè)VSS?我猜應(yīng)該是增強(qiáng)供電能力,保證供電的可靠性)。
三、命名規(guī)則
我在網(wǎng)上找到了STM32F103中文手冊(cè),單片機(jī)命名原理如下圖所示:
四、引腳排布&引腳復(fù)用
根據(jù)命名規(guī)則可知,STM32F103C8T6中的C代表著這款芯片有48個(gè)引腳,其引腳排布如下圖所示:
STM32微控制器有著豐富的功能,僅靠48個(gè)引腳是不夠分配所有功能的,所以有的引腳可以實(shí)現(xiàn)好幾種功能,這就叫引腳復(fù)用。一般而言,大部分引腳的第一功能是GPIO(通用輸入輸出口)。但值得注意的是:PA13、PA14、P15、PB3、PB4、PC14、PC15、PD0、PD1的默認(rèn)功能并不是GPIO,使用時(shí)需要開啟AFIO時(shí)鐘,注意一下這一點(diǎn)。B站某UP制作了一個(gè)直觀的圖片,如下圖所示:
圖片來源:公眾號(hào)"電子開發(fā)學(xué)習(xí)"
官方手冊(cè)提供的STM32F103系列微控制器引腳的默認(rèn)功能如下圖所示:
五、程序下載
STM32單片機(jī)支持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單片機(jī)一般可通過UART1引腳進(jìn)行程序燒錄,燒錄的時(shí)候需要配合BOOT0、BOOT1接地與否來實(shí)現(xiàn)。BOOT0、BOOT1可以組合出四種狀態(tài),不同位置的含義如下圖所示,其中X是無關(guān)項(xiàng)。
使用ISP串口下載前,將單片機(jī)上電之前需要先用跳線帽把BOOT0短接到1的位置,BOOT1短接到0的位置,即系統(tǒng)存儲(chǔ)器模式,然后才能通過串口下載程序。ISP串口下載完成后斷電,在單片機(jī)上電之前需要先用跳線帽把BOOT0短接到0的位置,即主閃存存儲(chǔ)器模式。
由于單片機(jī)使用的TTL電平通信協(xié)議,與電腦的USB口進(jìn)行串口通信時(shí)需要使用轉(zhuǎn)串口芯片,常見的有CH340系列(如CH340N)、FT232、PL2303等等,下圖以CH340T為例。
下載器GND與單片機(jī)GND相連(連一個(gè)就行),下載器3.3V與單片機(jī)3.3V相連(或者下載器5V與單片機(jī)VIN相連)、下載器RXD與單片機(jī)PA9(U1TX)相連,下載器TXD與單片機(jī)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盤形狀的其實(shí)不是ST公司出品的,但是燒錄了他們的固件,也是可以用滴)。使用SWD接口除了可以燒錄程序外,還可以實(shí)現(xiàn)在線仿真(debug),仿真過程可以監(jiān)視寄存器等數(shù)據(jù),非常適合軟件開發(fā)(找問題)。值得注意的是,ST-LINK/V2只支持給自家的STM32和STM8燒錄程序,不支持為其他公司的單片機(jī)燒錄程序(即使同樣搭載Cortex-M3內(nèi)核)。
ST-LINK/V2
3.JTAG下載
JTAG接口需要使用TMS(模式選擇)、TCK(時(shí)鐘)、TDI(數(shù)據(jù)輸入)、TDO(數(shù)據(jù)輸出)、nTRST(復(fù)位,非必要),對(duì)應(yīng)到STM32F103C8T6上就是PA13(TMS)、PA14(TCK)、PA15(TDI)、PB3(TDO)、PB4(nTRST)引腳,這些引腳第一功能就是JTAG接口,這就是上面所說的為什么這些引腳不能簡單的當(dāng)GPIO用。采用JTAG下載時(shí)可以使用J-LINK下載器(正版SEGGER的J-LINK價(jià)格比較昂貴,國內(nèi)仿制的建議買V9版本以上),也可以使用ST公司原廠或國內(nèi)仿制的帶JTAG接口的ST-LINK/V2(如正點(diǎn)原子推出的,不過還是好貴,嗚嗚嗚)。不過JTAG能實(shí)現(xiàn)的功能SWD一般也能實(shí)現(xiàn),我比較懶,一般不使用這種下載接口。
J-LINK
ST-LINK/V2
如果我們不需要使用JTAG下載,但GPIO資源緊張或PCB設(shè)計(jì)時(shí)已經(jīng)使用了這些第一功能為JTAG的引腳,那么我們就需要關(guān)閉JTAG。比如說我要使用GPIOA15作為GPIO口,那么代碼層面需要這樣實(shí)現(xiàn):
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能PORTA時(shí)鐘
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; //設(shè)置成上拉輸入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
詳細(xì)關(guān)閉方法:見另一位博主的《STM32 JTAG調(diào)試》
六、RTT
RTT的全稱是Real Time Transfer,翻譯過來就是實(shí)時(shí)傳輸。為什么給大家介紹這個(gè)呢,上面有講到J-LINK、ST-LINK等可以下載程序,也可以在線仿真。那么問題來了,他們直接支持串口通信嘛?答案是不可以!!!不過別慌,針對(duì)這個(gè)問題SEGGER公司推出了共享內(nèi)存技術(shù),這個(gè)功能可以省去外接使用USART進(jìn)行串口數(shù)據(jù)測試,灰常方便。不過由于RTT是SEGGER公司推出的,所以這個(gè)是需要使用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)下載>,詳細(xì)的安裝與使用教程見《硬漢哥分享的資料》。
導(dǎo)入源代碼后可以在程序中使用以下函數(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個(gè)終端可以選擇自己喜歡的安裝使用。
七、RTOS
RTOS(Real-time operating system)是實(shí)時(shí)操作系統(tǒng)的總稱,目前市面上有freeRTOS、RT-Thread、UCOS-III等多種實(shí)時(shí)操作系統(tǒng),到了STM32這種復(fù)雜而強(qiáng)大的硬件層面,程序員將不再僅僅拿它當(dāng)傳統(tǒng)的MCU來跑裸機(jī)程序(裸機(jī)是指沒有用上RTOS的程序),而是開始考慮程序的協(xié)調(diào)性和并行多任務(wù)(并不是真正意義上的并行,因?yàn)閱魏送粫r(shí)間只能處理一件事情)。RTOS是一個(gè)有趣的東西,如果大家感興趣我后期會(huì)考慮更新一篇有關(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單片機(jī)采用LQFP48封裝設(shè)計(jì),芯片一共引出44只引腳,其中A口有A0-A15共16個(gè)引腳,B口有B0-B15共16個(gè)引腳,C口有C13-C15共3個(gè)引腳,D口有D0-D1共兩個(gè)引腳。值得注意的是最小核心板C14和C15接了32.768K晶振,D0和D1接了8MHz晶振,一般不要用做IO口。如果實(shí)在要用只能去掉外部晶振電路(使用HSI、LSI),通過重映射和配置AFIO_MAPR寄存器實(shí)現(xiàn)。