一種基于STM32的最小系統(tǒng)及串口通信的實(shí)現(xiàn)
STM32是意法半導(dǎo)體(ST)推出的32位RISC(精簡(jiǎn)指令集計(jì)算機(jī))微控制器系列產(chǎn)品,采用高性能的ARMCortex-M3內(nèi)核,工作頻率為72MHz,內(nèi)置高速存儲(chǔ)器(128K字節(jié)的閃存和20K字節(jié)的SRAM)。本文介紹STM32F103增強(qiáng)型微處理器的最小系統(tǒng),實(shí)現(xiàn)其串口通信的設(shè)計(jì)調(diào)試。
1、STM32的最小系統(tǒng)
STM32微處理器不能獨(dú)立工作,必須提供外圍相關(guān)電路,構(gòu)成STM32最小系統(tǒng)。包括3.3V電源、8MHz晶振時(shí)鐘、復(fù)位電路、數(shù)字和模擬間的去耦電路、調(diào)試接口、串行通信接口等電路。最小系統(tǒng)原理圖如圖1所示。
圖1 S TM32最小系統(tǒng)原理圖
1.1、電源模塊與外部晶振
STM32F103C8T6內(nèi)嵌8MHz高速晶體振蕩器,也可外部時(shí)鐘供給,本系統(tǒng)采用8MHz外部晶振供給。
STM32F103C8T6的供電電壓范圍為2.0~3.6V。電源模塊是電路關(guān)鍵的一部分,是整個(gè)系統(tǒng)工作的基礎(chǔ)。因此,電源設(shè)計(jì)過程中需要考慮以下因素:①輸入電壓、電流;②輸出的電壓、電流和功率;③電磁兼容和電磁干擾等。
1.1.1、電源供電設(shè)計(jì)
最小系統(tǒng)供電電源為12V直流電源供電,通過LM2576S-5.0單元電路,將電壓穩(wěn)定到+5V。LM2576系列芯片是單片集成電路,能提供降壓開關(guān)穩(wěn)壓器的各種功能,能驅(qū)動(dòng)3A的負(fù)載,有優(yōu)異的線性和負(fù)載調(diào)整能力,在指定輸入電壓和輸出負(fù)載條件下保證輸出電壓的±4%誤差。LM2576的效率比流行的三段線性穩(wěn)壓器要高的多,是理想的替代。用DL4003串接到電源正端,為系統(tǒng)提供電源反接保護(hù)。+5V電壓通過三端穩(wěn)壓芯片ASM1117-3.3將電壓轉(zhuǎn)換成+3.3V,D3作為電源指示燈,為主控芯片STM32F103C8T6、串口通信電路和其他外圍芯片供電。電源供電原理如圖2所示。
圖2 電源供電原理
1.1.2、電源抗干擾設(shè)計(jì)
電源電壓轉(zhuǎn)換過程中需要進(jìn)行濾波處理,+12V轉(zhuǎn)+5V的電路中,需要在+12V輸入端加入47μF/50V的電解電容,+5V輸出端加入1000μF/25V的電解電容,IN5822起到續(xù)流作用;+5V轉(zhuǎn)3.3V電路中,在+5V輸入端和+3.3V輸出端需要各加入100μF/10V的鉭電容。
電路中存在模擬和數(shù)字電源,需要加入電感和電容組成去耦電路。STM32中有3組VDD/VSS管腳,有1組VDDA/VSSA管腳。盡管所有的VDD和所有VSS在內(nèi)部相連,在芯片外部仍然需要連接所有的VDD和VSS。由于導(dǎo)線較細(xì),內(nèi)部連接負(fù)載能力較差,抗干擾的能力也較差,如果漏接VDD/VSS,容易造成線路損壞,同時(shí)抗干擾能力也會(huì)下降。因此每對(duì)VDD與VSS都必須在盡可能靠近芯片處分別放置一個(gè)100nF的高頻瓷介電容,在靠近VDD3和VSS3的地方放置一個(gè)4.7μF的瓷介電容。VDDA為所有的模擬電路部分供電,包括ADC模塊、復(fù)位電路等,即使不使用ADC功能,也需要連接VDDA。建議VDD和VDDA使用同一個(gè)電源供電。VDD與VDDA之間的電壓差不能超300mV。VDD與VDDA應(yīng)該同時(shí)上電或調(diào)電。模擬電源與數(shù)字電源隔離去耦電路如圖3所示。
圖3 模擬電源與數(shù)字電源隔離去耦電路
1.2、復(fù)位電路
復(fù)位電路為低電平復(fù)位、上電復(fù)位。
1.3、啟動(dòng)模式
在STM32F103C8T6中,提供了BOOT0和BOOT1兩個(gè)管腳用于三種啟動(dòng)模式選擇。本系統(tǒng)采用從用戶閃存啟動(dòng)。三種啟動(dòng)模式對(duì)應(yīng)的存儲(chǔ)介質(zhì)均是芯片內(nèi)置的,它們是:
1)用戶閃存:即芯片內(nèi)置的Flash;
2)SRAM:芯片內(nèi)置的RAM區(qū),即內(nèi)存;
3)系統(tǒng)存儲(chǔ)器:芯片內(nèi)部一塊特定的區(qū)域,芯片出廠時(shí)在這個(gè)區(qū)域預(yù)置了一段Bootloader,就是通常說的ISP程序。這個(gè)區(qū)域的內(nèi)容在芯片出廠后不能夠修改或擦除,它是一個(gè)ROM區(qū)。
BOOT0和BOOT1兩個(gè)管腳在芯片復(fù)位時(shí)的電平狀態(tài)決定了芯片復(fù)位后從哪個(gè)區(qū)域開始啟動(dòng),啟動(dòng)模式配置如表1所示。
表1 啟動(dòng)模式配置
通過設(shè)置BOOT0和BOOT1兩個(gè)管腳,不同啟動(dòng)模式對(duì)應(yīng)的存儲(chǔ)器物理地址被映像到第0塊(啟動(dòng)區(qū))。即使模塊存儲(chǔ)區(qū)映像為啟動(dòng)區(qū),仍然可以在其原先的存儲(chǔ)空間地址內(nèi)訪問相關(guān)的存儲(chǔ)單元。
2、串口通信設(shè)計(jì)與調(diào)試
2.1、串口通信的設(shè)計(jì)
串口通信是系統(tǒng)與PC機(jī)交互的重要部分。STM32F103C8T6內(nèi)置3個(gè)USART,完全支持RS232協(xié)議,且有很高的傳輸速率。本系統(tǒng)的電平轉(zhuǎn)換芯片選用兼容3.3V供電的MAX3232ESE,可同時(shí)完成發(fā)送和接收轉(zhuǎn)換雙重功能。串口通信電路如圖5所示。
圖5 串口通信電路
2.2、串口通信軟件設(shè)計(jì)及調(diào)試
ST公司為用戶應(yīng)用程序開發(fā)提供了豐富的固件庫(kù),用戶只需對(duì)底層微處理器的外設(shè)進(jìn)行簡(jiǎn)單初始化配置即可使用[4]。初始化配置主要包括時(shí)鐘、I/O端口、串口、中斷等的配置。本系統(tǒng)采用USART復(fù)用I/O口PA9作為串口發(fā)送引腳,配置為推挽輸出,速度為50MHz;USART復(fù)用I/O口PA10作為串口接收引腳,配置為浮空輸入。串口工作方式和中斷配置,波特率為115200Baud、8位數(shù)據(jù)位、無校驗(yàn)位、1位停止位。初始化串口程序如下:
voidUSARTInit(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
USART_InitTypeDefUSART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitStructure.USART_BaudRate=115200;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
USART_Init(USART,&USART_InitStructure);
USART_Cmd(USART,ENABLE);
USART_ITConfig(USART,USART_IT_RXNE,ENABLE);
USART_ITConfig(USART,USART_IT_TXE,ENABLE);
}
2.2.1、Keil仿真調(diào)試
KeilμVision4IDE選擇仿真,進(jìn)入調(diào)試模式后,打開串口1小窗口,運(yùn)行程序,可以傳輸數(shù)據(jù),仿真串口調(diào)試結(jié)果如圖6所示。
圖6 仿真串口調(diào)試結(jié)果
2.2.2、硬件平臺(tái)目標(biāo)調(diào)試
用J-Link仿真器將PC機(jī)與STM32電路板連接起來,將程序下載到STM32中,連接USB轉(zhuǎn)串口線,用來實(shí)現(xiàn)STM32電路板與PC機(jī)的串口通信,通過串口調(diào)試小工具來顯示實(shí)驗(yàn)效果,STM32電路板首先接收“STM32F103C8T6串口通信實(shí)驗(yàn)”的內(nèi)容,然后經(jīng)串口再發(fā)送到PC機(jī)上,即實(shí)現(xiàn)串口的發(fā)送和接收。硬件平臺(tái)目標(biāo)調(diào)試結(jié)果如圖7所示。
圖7 硬件平臺(tái)目標(biāo)調(diào)試結(jié)果
3、結(jié)束語
STM32系列處理器是新型的嵌入式微處理器,各方面的性能都優(yōu)于51系列單片機(jī),開發(fā)卻與51系列單片機(jī)同樣簡(jiǎn)便,應(yīng)用越來越廣泛。STM32微處理器有較高的處理速度,包含豐富的功能模塊,系統(tǒng)無需外擴(kuò),簡(jiǎn)化了硬件設(shè)計(jì)難度,實(shí)現(xiàn)了STM32最小系統(tǒng)與MAX3232ESE構(gòu)成的串口通信,保證了數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性。