国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于STM32的電子時(shí)鐘設(shè)計(jì)

2020-11-30 03:27:10
關(guān)鍵詞:外設(shè)固件寄存器

郭 辛

(綿陽師范學(xué)院機(jī)電工程學(xué)院,四川綿陽 621000)

0 引言

單片機(jī)自誕生之日起已走過近半個(gè)世紀(jì)的歷程.隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的飛速發(fā)展,進(jìn)入21世紀(jì)以來以嵌入式系統(tǒng)為代表的新興技術(shù)正在逐漸占據(jù)工業(yè)控制領(lǐng)域主導(dǎo)地位,并逐步取代以8位處理器為核心的傳統(tǒng)測控系統(tǒng)[1].近年來由于數(shù)字信息技術(shù)和網(wǎng)絡(luò)技術(shù)的廣泛應(yīng)用,單片機(jī)作為主流核心處理器的地位逐步下降,現(xiàn)代電子技術(shù)的發(fā)展正朝著智能化、網(wǎng)絡(luò)化和低功耗的方向邁進(jìn).新技術(shù)的不斷更新,需要新的設(shè)計(jì)思想的注入才能滿足技術(shù)發(fā)展需求.那么,如何將新興技術(shù)融合到傳統(tǒng)知識(shí)架構(gòu)體系,將基礎(chǔ)理論與工程應(yīng)用實(shí)際相結(jié)合,就成為設(shè)計(jì)人員急需破解的難題.

ARM作為一種32位的高性能、低成本的嵌入式RISC微處理器,得到了廣泛的應(yīng)用,STM32系列是意法半導(dǎo)體 (STMicroelectronics) 集團(tuán)專為要求高性能、低成本和低功耗的嵌入式應(yīng)用設(shè)計(jì)的ARM Cortex-M系列產(chǎn)品的代表作.基于STM32的嵌入式技術(shù)已經(jīng)滲透在工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表和辦公自動(dòng)化等諸多領(lǐng)域的應(yīng)用,甚至在很大程度上正在改變我們現(xiàn)有的商業(yè)模式和工作生活方式,如智能手機(jī)、導(dǎo)航系統(tǒng)、無人機(jī)和平板電腦等,并呈現(xiàn)出明顯的系統(tǒng)化、人工智能化和物聯(lián)網(wǎng)的趨勢.

目前, Cortex系列處理器已經(jīng)占據(jù)了大部分嵌入式處理器的中高端產(chǎn)品市場,而嵌入式系統(tǒng)的應(yīng)用開發(fā)對從業(yè)者要求很高,初學(xué)者若要快速掌握其原理并在實(shí)際工程中加以應(yīng)用,必須改變傳統(tǒng)的思維方式并構(gòu)建新的設(shè)計(jì)理念.本文以STM32F103RC處理器(Cortex-M普通型號之一)為平臺(tái),通過對定時(shí)器、中斷系統(tǒng)和LCD顯示模塊的組合設(shè)計(jì)為例,針對基于固件庫設(shè)計(jì)思想的方法進(jìn)行探討與總結(jié),以開啟嵌入式系統(tǒng)的應(yīng)用設(shè)計(jì)學(xué)習(xí)之門[2].

1固件庫概述

固件庫是指“STM32 標(biāo)準(zhǔn)函數(shù)庫”,它是由 ST 公司針對 STM32 提供的函數(shù)接口,即 API(Application Program Interface),是一個(gè)固件函數(shù)包,它由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,包括了微控制器所有外設(shè)的性能特征.它是架設(shè)在構(gòu)成部件的寄存器與用戶驅(qū)動(dòng)層之間的代碼,向下處理與寄存器直接相關(guān)的配置,向上為用戶提供配置寄存器的接口[3].部件的調(diào)用和基本操作寫成了通用的子函數(shù),對復(fù)雜的硬件操作實(shí)現(xiàn)了函數(shù)封裝.

在以51單片機(jī)為代表的8位機(jī)由于硬件系統(tǒng)相對簡單,通常采用直接配置寄存器的方式來進(jìn)行應(yīng)用開發(fā);而32位處理器核內(nèi)系統(tǒng)復(fù)雜,外設(shè)資源豐富.應(yīng)用系統(tǒng)若仍舊采用傳統(tǒng)的設(shè)計(jì)方式,不但效率低、可移植性差,而且技術(shù)難度大,已不能適應(yīng)較復(fù)雜的工程應(yīng)用.

基于固件庫的技術(shù)思想為解決這一問題提供了新思路:開發(fā)者根據(jù)具體任務(wù)需求按照CMSIS標(biāo)準(zhǔn)構(gòu)建工程,利用固件庫提供的資源,設(shè)計(jì)和改造相關(guān)函數(shù)以實(shí)現(xiàn)對部件的操作.本文結(jié)合綜合實(shí)驗(yàn)項(xiàng)目的開發(fā)——電子時(shí)鐘的設(shè)計(jì)為例,首先介紹庫函數(shù)中主要涉及的定時(shí)器和LCD顯示驅(qū)動(dòng)的基本結(jié)構(gòu)和工作原理,在此基礎(chǔ)上利用現(xiàn)有庫資源進(jìn)行功能設(shè)計(jì)與系統(tǒng)構(gòu)建.

2 定時(shí)器概述

STM32F1 系列中,共有 8 個(gè)定時(shí)器TIM1—TIM8,分為基本定時(shí)器,通用定時(shí)器和高級定時(shí)器.基本定時(shí)器 TIM6 和 TIM7 是一個(gè) 16 位的只能向上計(jì)數(shù)的定時(shí)器,它只能定時(shí),沒有外部 I/O;通用定時(shí)器 TIM2/3/4/5 是一個(gè) 16 位的可以向上/下計(jì)數(shù)的定時(shí)器,可以定時(shí)、輸出比較和輸入捕捉,每個(gè)定時(shí)器有四個(gè)外部I/O;高級定時(shí)器 TIM1/8是一個(gè) 16 位的可以向上/下計(jì)數(shù)的定時(shí)器,可以定時(shí)、輸出比較,輸入捕捉,以及實(shí)現(xiàn)三相電機(jī)互補(bǔ)輸出信號,每個(gè)定時(shí)器有 8 個(gè)外部 I/O[4].此例以TIM6作定時(shí)器,設(shè)計(jì)一款LCD屏顯電子時(shí)鐘,計(jì)時(shí)60 min,最小顯示值1s.

2.1 TIM6定時(shí)器組成

根據(jù)STM32參考手冊基本定時(shí)器的功能結(jié)構(gòu)如圖1所示[3].

圖1 基本定時(shí)器功能框圖Fig.1 Block Diagram of Basic Timer Function

定時(shí)器若要向外提供基本時(shí)鐘信號,需對相關(guān)寄存器進(jìn)行參數(shù)設(shè)置:

1)時(shí)鐘源TIM*CLK:根據(jù)STM32時(shí)鐘系統(tǒng)設(shè)置,通常掛載APB1時(shí)鐘總線,默認(rèn)取值為72MHz[5];

2)16位分頻器PSC:用于存放預(yù)分頻值,分頻范圍1~65536,則時(shí)鐘周期

CK_CLK= (PSC+1)/ TIM*CLK

(1)

即每計(jì)1個(gè)數(shù)的時(shí)間間隔

3)自動(dòng)重裝載寄存器ARR:用于存放16位計(jì)數(shù)值,用于設(shè)定定時(shí)長度

Td= CK_CLK*ARR

(2)

綜上所述,首先對定時(shí)器初始化,將所預(yù)設(shè)參數(shù)寫入到對應(yīng)的結(jié)構(gòu)體中,賦值包含以下內(nèi)容:

……

#define BASIC_TIM TIM6

#define BASIC_TIM_CLK RCC_APB1Periph_TIM6

#define BASIC_TIM_ARR 1000-1

#define BASIC_TIM_PSC 71

……

按照以上參數(shù)設(shè)置,基本定時(shí)時(shí)長為:

Td= 〔(PSC+1)/ TIM*CLK〕 *ARR =(72/72M)*1 000=1ms

(3)

2.2 電子時(shí)鐘定時(shí)原理

如圖2所示,內(nèi)部定時(shí)器提供基準(zhǔn)時(shí)長Td=1ms,引入定時(shí)中斷,每計(jì)時(shí)1ms中斷一次;中斷次數(shù)time= 1 000產(chǎn)生1s定時(shí),即LCD 顯示屏每隔1 s更新一次秒位(sec)計(jì)數(shù)值;每計(jì)滿60 s更新一次分位(min)計(jì)數(shù)值,并將其分別顯示到LCD屏上.

圖2 定時(shí)原理示意圖Fig.2 Schematic Diagram of Timing Principle

2.3 LCD顯示

內(nèi)部時(shí)基信號產(chǎn)生后,還需將結(jié)果顯示出來,STM32F103實(shí)驗(yàn)板配2.8吋16位數(shù)據(jù)接口液晶屏,控制芯片采用了ILI0341.ILI0341是一個(gè)用于TFT液晶顯示的單芯片控制驅(qū)動(dòng)器,具有262,144色的240RGB×320像素顯示方案;ILI0341支持8/9/16/18位數(shù)據(jù)總線的MCU接口,6/16/18位數(shù)據(jù)總線的RGB接口以及3/4線的SPI 接口[4],本示例中液晶屏控制器采用了預(yù)先配置的8080 接口通訊,使用 16 根數(shù)據(jù)線的 RGB565格式.其相關(guān)驅(qū)動(dòng)程序按照ILI9341標(biāo)準(zhǔn)編制,主要由如下幾步完成:

1)初始化LCD數(shù)據(jù)/控制管腳ILI9341_GPIO_Config ().

2)點(diǎn)亮背光 ILI9341_BackLed_Control ( ENABLE ).

3)初始化控制寄存器ILI9341_REG_Config ().

4)設(shè)置顯示模式ILI9341_GramScan(LCD_SCAN_MODE).

初始化液晶屏完成后,調(diào)用顯示驅(qū)動(dòng)函數(shù).

5)清屏ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH).

6)設(shè)置顯示字符字體(8x16)、顏色(紅字)及背景(黑底)LCD_SetFont(&Font8x16);LCD_SetColors(RED,BLACK).

7)使用c標(biāo)準(zhǔn)庫把時(shí)間變量轉(zhuǎn)化成字符串并顯示 sprintf(dispBuff,"time : %d: %d ",y,x);[6]LCD_ClearLine(LINE(6));ILI9341_DispStringLine_EN(LINE(6),dispBuff).將數(shù)據(jù)轉(zhuǎn)換成字符串,存放于數(shù)組dispBuff并寫入指定行.

3 系統(tǒng)設(shè)計(jì)

在以51單片機(jī)為主控單元的系統(tǒng)中,我們往往采用直接配置寄存器控制字的方法來操控硬件,因?yàn)镸CS-51內(nèi)部寄存器只有21個(gè),而且功能簡單,程序設(shè)計(jì)直觀簡便;而STM32作為系統(tǒng)主控制器,其內(nèi)部設(shè)備多達(dá)幾十個(gè),而控制這些設(shè)備的寄存器有幾百個(gè),若要使系統(tǒng)維持基本運(yùn)轉(zhuǎn),操作這些寄存器所需的驅(qū)動(dòng)程序代碼成千上萬行,這對于應(yīng)用開發(fā)者來說逐條寫程序是不現(xiàn)實(shí)的.芯片廠商將這些外設(shè)的驅(qū)動(dòng)源碼封裝成固件函數(shù)包提供給用戶,由用戶在此基礎(chǔ)上進(jìn)行應(yīng)用開發(fā),因此以STM32為主控制器的應(yīng)用系統(tǒng)開發(fā)就包括項(xiàng)目搭建和程序設(shè)計(jì)兩部分.

3.1 固件庫文件結(jié)構(gòu)分析

1)啟動(dòng)文件startup_stm32f10x_hd.s:設(shè)置堆棧、PC指針和配置系統(tǒng)時(shí)鐘等.

2)時(shí)鐘配置文件system_stm32f10x.c:將外部時(shí)鐘倍頻并為各子模塊提供配套的時(shí)鐘源.

3)內(nèi)核相關(guān)的驅(qū)動(dòng)文件core_cm3.h:內(nèi)核的外設(shè)寄存器映射;core_cm3.c:內(nèi)核的外設(shè)驅(qū)動(dòng)固件庫.

NVIC(嵌套向量中斷控制器)描述文件:misc.h和misc.c.

4)外設(shè)相關(guān)的庫文件stm32f10x.h:實(shí)現(xiàn)了內(nèi)核之外的寄存器映射;stm32f10x_xx.c:外設(shè)的驅(qū)動(dòng)函數(shù)庫文件;

核外設(shè)備:GPIO、USRAT、I2C、SPI、FSMC等驅(qū)動(dòng)文件.

5)頭文件的配置文件stm32f10x_conf.h 頭文件的配置文件,將多個(gè)外設(shè)的頭文件進(jìn)行統(tǒng)一調(diào)配管理,如:

stm32f10x_usart.h,stm32f10x_i2c.h,stm32f10x_spi.h,stm32f10x_adc.h,stm32f10x_fsmc.h...

對外設(shè)描述的結(jié)構(gòu)體,映射地址的頭文件都放在stm32f10x_conf.h中進(jìn)行聲明,使用時(shí)只需包含該配置頭文件即可,并可通過“宏斷言”函數(shù)進(jìn)行選配.

6)專門注冊中斷服務(wù)函數(shù)的C文件:stm32f10x_it.c和stm32f10x_it.h.這些文件按照相應(yīng)的規(guī)則分布在不同的路徑下,這個(gè)規(guī)則就是ST集團(tuán)與各芯片開發(fā)商共同制訂的CMSIS標(biāo)準(zhǔn)[3].

3.2 工程項(xiàng)目構(gòu)建

參照CMSIS標(biāo)準(zhǔn)創(chuàng)建項(xiàng)目文件以及組文件夾:CMSIS、FWlib、inc、src、Project、Output和User,并將固件庫提供的基本源代碼拷貝到對應(yīng)目錄下,如:項(xiàng)目文件創(chuàng)建并保存在Project路徑下;核外外設(shè)的驅(qū)動(dòng)程序復(fù)制到src源碼目錄下;對描述部件的寄存器結(jié)構(gòu)體統(tǒng)一定義在inc頭文件目錄下;而直接針對任務(wù)而設(shè)計(jì)的程序文件通常放置在用戶目錄User中,如main()程序,中斷服務(wù)程序等等.

在本例的電子時(shí)鐘設(shè)計(jì)中,根據(jù)前面所介紹的定時(shí)器和LCD的工作原理,配置相關(guān)驅(qū)動(dòng)程序或函數(shù)集,并寫入預(yù)設(shè)的定時(shí)參數(shù),重新組合、設(shè)計(jì)功能程序:1)計(jì)算并確定定時(shí)初值以及分頻器參數(shù);2)LCD 初始化機(jī)模式配置,設(shè)計(jì)變量顯示程序;3)中斷服務(wù)程序的數(shù)據(jù)處理部分程序設(shè)計(jì).

3.3 程序設(shè)計(jì)

首先對定時(shí)器、中斷寄存器、AFIO引腳以及液晶屏進(jìn)行初始化設(shè)置,并將設(shè)計(jì)的參數(shù)值寫入對應(yīng)寄存器中;開啟定時(shí)時(shí)鐘和中斷系統(tǒng),主程序?qū)崟r(shí)不間斷顯示時(shí)間——分位(min)和秒位(sec);中斷服務(wù)程序完成定時(shí)器計(jì)數(shù)值的更新和處理,并將其轉(zhuǎn)換成時(shí)間變量傳回主程序顯示,程序流程圖見圖3.

圖3 程序流程圖Fig.3 Program Flow Chart

4 結(jié)論

由于內(nèi)部時(shí)鐘源能提供1K~72MHz時(shí)鐘信號,誤差為±1%,則時(shí)鐘誤差最小可以控制在0. 01 us范圍內(nèi).通過上述實(shí)驗(yàn)教學(xué)項(xiàng)目的開發(fā),總結(jié)出32位微處理平臺(tái)在工程實(shí)踐中的設(shè)計(jì)流程:(1)任務(wù)分析:根據(jù)設(shè)計(jì)要求明確項(xiàng)目所需實(shí)現(xiàn)功能,提出設(shè)計(jì)方案主體框架、功能模塊構(gòu)成、技術(shù)實(shí)現(xiàn)路線;(2)搭建工程項(xiàng)目:根據(jù)STM32平臺(tái)所提供資源,確定主控系統(tǒng)模塊并搭建項(xiàng)目主體框架;對照現(xiàn)有資源匹配現(xiàn)有的子模塊,制作與主系統(tǒng)的接口函數(shù)并確定底層部件參數(shù);(3)主系統(tǒng)集成:完成主要業(yè)務(wù)的程序編制并進(jìn)行系統(tǒng)整和調(diào)試.基于STM32平臺(tái)的嵌入式系統(tǒng)開發(fā),應(yīng)采用立足于對系統(tǒng)資源的整合和集成的思維方式,將各部件的驅(qū)動(dòng)程序看作一種供開發(fā)者使用的函數(shù)集合,開發(fā)者需要做的是將這些離散、抽象的“程序塊”有機(jī)地進(jìn)行組合,以搭積木的方式進(jìn)行模塊化設(shè)計(jì),這才是嵌入式系統(tǒng)應(yīng)用的本質(zhì)所在.

猜你喜歡
外設(shè)固件寄存器
Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
分簇結(jié)構(gòu)向量寄存器分配策略研究*
基于固件的遠(yuǎn)程身份認(rèn)證
提取ROM固件中的APP
電腦愛好者(2015年7期)2015-04-09 08:54:02
一種通過USB接口的可靠固件升級技術(shù)
Microchip推出具備雙ADC外設(shè)的全新器件,擴(kuò)展其低成本8位PIC?單片機(jī)產(chǎn)品線
奧林巴斯XZ—2新固件升級
中國攝影(2014年1期)2014-02-24 01:50:23
高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
貼身呵護(hù) 必不可少的PSP外設(shè)
澄城县| 淮阳县| 垫江县| 靖西县| 新营市| 伊川县| 惠来县| 喀喇沁旗| 崇州市| 维西| 新乐市| 哈尔滨市| 南雄市| 泌阳县| 淅川县| 阜南县| 惠安县| 高邮市| 故城县| 白玉县| 泰顺县| 汉中市| 炉霍县| 天峨县| 安国市| 威远县| 河曲县| 南康市| 永顺县| 合阳县| 藁城市| 平湖市| 夏邑县| 星座| 新邵县| 米易县| 芦山县| 绿春县| 永定县| 西乌珠穆沁旗| 安吉县|