-智能辦公系統(tǒng)智能打印機(jī)_第1頁
-智能辦公系統(tǒng)智能打印機(jī)_第2頁
-智能辦公系統(tǒng)智能打印機(jī)_第3頁
-智能辦公系統(tǒng)智能打印機(jī)_第4頁
-智能辦公系統(tǒng)智能打印機(jī)_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

摘要二十一世紀(jì)經(jīng)濟(jì)蓬勃發(fā)展,帶來了突飛猛進(jìn)的科學(xué)技術(shù),與此同時(shí),人們的需求日益增加,很多電器都出現(xiàn)了需求智能化的的聲音,打印機(jī)便是其中之一,于是,智能打印機(jī)應(yīng)運(yùn)而生。區(qū)別于傳統(tǒng)打印機(jī)的打印操作流程,智能打印機(jī)能夠無線接收數(shù)據(jù)并將其打印出來,它使得勞動(dòng)人民的需求能夠被更加的效率、便捷的滿足。一般地,按所采用的技術(shù),可分出噴墨式、熱敏式、激光式等種類,而在琳瑯滿目的打印機(jī)品種中,熱敏式由于結(jié)構(gòu)簡(jiǎn)單,維護(hù)方便,價(jià)格低廉,實(shí)用性強(qiáng),工作可靠,等優(yōu)點(diǎn)在國(guó)內(nèi)外應(yīng)用日益廣泛。本次設(shè)計(jì),就以STM32為平臺(tái),設(shè)計(jì)一款智能打印機(jī),通過藍(lán)牙傳輸數(shù)據(jù),實(shí)現(xiàn)打印機(jī)的智能化。關(guān)鍵詞:智能化無線通信 熱敏式IntelligentofficesystemintelligentprinterdesignAbstractWiththerapiddevelopmentofeconomyinthe21stcentury,therapiddevelopmentofscienceandtechnologyhasbeenbrought.Atthesametime,people'sdemandisincreasingdaybyday.Manyelectricalappliancesareinneedofintelligentvoice.Printerisoneofthem,sointelligentprintercameintobeing.Differentfromtheprintingprocessoftraditionalprinters,intelligentprinterscanreceivedatawirelesslyandprintitout,whichmakestheneedsofworkingpeoplemoreefficientandconvenienttomeet.Generallyspeaking,accordingtothetechnologyadopted,itcanbedividedintoink-jettype,thermaltype,lasertypeandothertypes.Amongallkindsofprinters,thermaltypeiswidelyusedathomeandabroadduetoitssimplestructure,convenientmaintenance,lowprice,strongpracticabilityandreliableoperation.Inthisdesign,STM32isusedastheplatformtodesignanintelligentprinter,whichtransmitsdatathroughBluetoothandrealizestheintellectualizationoftheprinter.Keywords:Intelligence wirelesscommunication Heatsensitive目錄1前言 11.1打印機(jī)在國(guó)內(nèi)外的發(fā)展概況及存在的問題 11.2本設(shè)計(jì)的目的、意義 22總體設(shè)計(jì) 32.1設(shè)計(jì)原理 32.2硬件選擇 32.2.1控制器選擇 42.2.2電機(jī)選擇 52.2.3打印機(jī)類型的選擇 62.3無線通信方式選擇 72.4硬件選擇總結(jié) 73硬件設(shè)計(jì) 73.1控制器概述 73.1.1STM32F103C8T6的GPIO口 83.1.2定時(shí)器 93.1.3串口通信 113.1.4SPI通信(字庫(kù)燒錄) 133.2電機(jī)與打印頭選型 173.2.1步進(jìn)電機(jī)的驅(qū)動(dòng) 183.2.2打印頭驅(qū)動(dòng) 193.3藍(lán)牙模塊簡(jiǎn)介 214軟件設(shè)計(jì) 234.1字庫(kù)燒錄 254.1.1波特率 274.2步進(jìn)電機(jī)與打印頭的共同運(yùn)作 284.2.1定時(shí)器 294.2.2字模地址讀取 305結(jié)論 32參考文獻(xiàn) 33謝辭 34附錄 35程序源代碼 35附錄2 53PAGE41前言 隨著科技的發(fā)展,人們的需求日益增加,很多電器都出現(xiàn)了需求智能化的的聲音,打印機(jī)便是其中之一,于是,智能打印機(jī)應(yīng)運(yùn)而生。區(qū)別于傳統(tǒng)打印機(jī)的打印操作流程,智能打印機(jī)能夠無線接收數(shù)據(jù)并將其打印出來,它使得勞動(dòng)人民的需求能夠被更加的效率、便捷的滿足。一般地,按所采用的技術(shù),分柱形、球形、噴墨式、熱敏式、激光式、靜電式、磁式、發(fā)光二極管式等。其中,熱敏式由于結(jié)構(gòu)簡(jiǎn)單,維護(hù)方便,價(jià)格低廉,實(shí)用性強(qiáng),工作可靠,等優(yōu)點(diǎn)在國(guó)內(nèi)外應(yīng)用日益廣泛。本次設(shè)計(jì),就以STM32為平臺(tái),設(shè)計(jì)一款智能打印機(jī),通過藍(lán)牙傳輸數(shù)據(jù),實(shí)現(xiàn)打印機(jī)的智能化。1.1打印機(jī)在國(guó)內(nèi)外的發(fā)展概況及存在的問題打印機(jī)的歷史悠久,世界上第一個(gè)打印機(jī)的雛形是在什么國(guó)家、什么人物、什么時(shí)候做出的已無從考證;打印機(jī)的思想則更為古早,甚至可以追溯到我國(guó)古代北宋年間有畢昇發(fā)明的活字印刷術(shù),所以打印機(jī)的起源便淹沒在了歷史的長(zhǎng)河之中。按目前比較普遍的說法,是由Centronics公司在十八世紀(jì)八十年代中期制造出地球上首款現(xiàn)代打印機(jī),但這款打印機(jī)并沒有被推廣進(jìn)入市場(chǎng),所以幾乎沒有人記住它,于是,曇花一現(xiàn)的打印機(jī)又陷入了沉寂之中。于是時(shí)光荏苒,終于在一九六八年的九月,由沖電氣株式會(huì)社研發(fā)了第一款商用針式打印機(jī)。同樣在二十世紀(jì)六十年代末,隨著激光技術(shù)的開發(fā),被世人譽(yù)為“激光打印機(jī)之父”的格雷·斯塔克韋瑟發(fā)現(xiàn)并提出了激光束直接投射在硒鼓上可以進(jìn)行繪圖,激光打印機(jī)就此誕生。雖然激光打印機(jī)的雛形出現(xiàn)在六十年代,但是受限于電子激光管的技術(shù)缺陷導(dǎo)致不能大規(guī)模使用,一直到十年之后半導(dǎo)體激光管的研發(fā)成功,才有了第一臺(tái)商用的激光打印機(jī)。二十世紀(jì)七十年代,雖然已經(jīng)有了兩款商用打印機(jī),但對(duì)新型打印機(jī)的研發(fā)卻從未停止,因?yàn)榧す獯蛴C(jī)成本價(jià)格居高不下,針式打印機(jī)有自己專屬的領(lǐng)域,人們急需一種性價(jià)比更高,適用面更廣的打印機(jī),于是在一九七六年,世界上第一臺(tái)噴墨式打印機(jī)出生了,雖然打印速度較激光打印機(jī)慢,但勝在耗材便宜,體積也比激光打印機(jī)更小??萍歼M(jìn)步日新月異,打印機(jī)變得越來越小巧,也能夠提供彩印,但是從十九世紀(jì)八十年代全球第一臺(tái)打印機(jī)的出現(xiàn),到后來百花齊放的針式打印機(jī)、噴墨打印機(jī)和激光打印機(jī)[1],各個(gè)打印機(jī)廠商對(duì)打印系統(tǒng)的開發(fā)雖然大相徑庭,但他們控制打印的方式卻都本同末異,通過將計(jì)算機(jī)的文檔轉(zhuǎn)換成數(shù)據(jù)或中間結(jié)果以人所能識(shí)別的符號(hào)、字母和圖形等,依照設(shè)定的格式打印在紙上是傳統(tǒng)打印系統(tǒng)的原理。近年,隨著對(duì)打印品質(zhì)和打印效率的需求不斷嚴(yán)格,打印機(jī)控制端設(shè)備正在向輕、薄、短、小、低功耗、高速度和智能化方向發(fā)展。[2]計(jì)算機(jī)技術(shù)的發(fā)展水平隨著時(shí)間推移突飛猛進(jìn),控制系統(tǒng)集成度越來越高,辦公器具陸續(xù)有來的推陳出新在日積月累的技術(shù)變革中,智能化的趨勢(shì)開始抬頭的同時(shí),辦公設(shè)備間的數(shù)據(jù)交互方式和操作方式也擁有了多元化的兆頭。其中,隨著單片機(jī)技術(shù)和打印機(jī)技術(shù)合流,打印機(jī)的控制技術(shù)也一同得到了廣泛的研究和應(yīng)用。只不過,地球上的打印機(jī)市場(chǎng)的發(fā)展略顯畸形,相比于日美、歐羅巴等發(fā)達(dá)地區(qū)和國(guó)家,一些熱門品牌,如HP、愛普生及佳能等幾乎把打印機(jī)市場(chǎng)吃干抹凈,僅僅留下了30%的市場(chǎng)份額讓小眾品牌茍延殘喘。幾乎被巨頭完全控制的國(guó)外打印機(jī)市場(chǎng),使的國(guó)內(nèi)打印機(jī)品牌的走向國(guó)際宛如癡人說夢(mèng)[3]。面對(duì)打印機(jī)市場(chǎng)壟斷壓力,在打印機(jī)市場(chǎng)占有更高的份額的愿景可能需要國(guó)內(nèi)獲得完全獨(dú)立的核心技術(shù)的突破才能實(shí)現(xiàn),這個(gè)任務(wù)雖任重道遠(yuǎn),但并不是遙遙無期,中國(guó)首款自主知識(shí)產(chǎn)權(quán)打印機(jī)是奔圖系列,它是賽納旗下的激光打印機(jī),于2010年末在北京人民大會(huì)堂舉辦激光打印機(jī)上市發(fā)布會(huì)上就正式上市發(fā)布了,它打破了外國(guó)打印機(jī)的壟斷,是中國(guó)打印機(jī)發(fā)展史上的一個(gè)里程碑。[4]信息技術(shù)的滄海桑田讓舊式的打印機(jī)遭受著巨大的沖擊,國(guó)內(nèi)也將迎來新的機(jī)遇與挑戰(zhàn)。打印機(jī)行業(yè)當(dāng)然不會(huì)被互聯(lián)網(wǎng)的步伐拋下,據(jù)可信的統(tǒng)計(jì)數(shù)據(jù)持,打印機(jī)的銷量的平均速度以不低于7%在緩慢提升,這說明打印機(jī)市場(chǎng)遠(yuǎn)未飽和,故國(guó)內(nèi)仍應(yīng)該通過內(nèi)外兼修、軟硬結(jié)合,以增加競(jìng)爭(zhēng)力。傳統(tǒng)的打印是把文件導(dǎo)入到電腦上打印,是一個(gè)繁瑣的工作流程,而對(duì)于廣大學(xué)生和勞動(dòng)人民而言,打印機(jī)如果能夠變得智能化,將會(huì)更加實(shí)用且高效。1.2本設(shè)計(jì)的目的、意義據(jù)研究,傳統(tǒng)打印機(jī)對(duì)個(gè)人定制化的仍有許多不足,譬如傳統(tǒng)打印機(jī)的體積讓隨身攜帶變得不可能,而且打印時(shí)需要把數(shù)據(jù)傳輸?shù)娇刂拼蛴C(jī)的計(jì)算機(jī)上,再進(jìn)行打印,而便攜式藍(lán)牙打印機(jī)通過藍(lán)牙與打印機(jī)直接通訊,即可跳過這一中間環(huán)節(jié)可以讓打印隨時(shí)隨地的發(fā)生,每一分一秒不可錯(cuò)過的事件都可以被記錄下來,使辦公更加順暢、效率,進(jìn)而達(dá)到提升經(jīng)濟(jì)效益的效果。且國(guó)外對(duì)傳統(tǒng)打印機(jī)的研究和市場(chǎng)占有遙遙領(lǐng)先,各種專利也被搶先占駐,而我們可以另辟蹊徑,用智能打印機(jī)突破重圍,在國(guó)外的打印機(jī)市場(chǎng)開拓出一篇藍(lán)海。故本設(shè)計(jì)意圖以STM32為平臺(tái),設(shè)計(jì)一個(gè)能夠滿足人們需求的智能打印機(jī)以滿足人們對(duì)日常辦公用具——打印機(jī)的智能化的需求,可以讓讓人們各自擁有自己的便攜智能打印機(jī),以解放對(duì)大型打印機(jī)的依賴,從而減少人們辦公中所遇到的不便進(jìn)而達(dá)到改善辦公環(huán)境、加大生產(chǎn)效率,促進(jìn)人民幸福。熱敏打印機(jī)的原理是通過加熱改變印刷紙上所涂熱敏介質(zhì)的顏色。熱式微型打印機(jī)也是一種常見的微型打印機(jī),但它出現(xiàn)的時(shí)間比針式微型打印機(jī)晚。該熱敏打印機(jī)打印速度快,噪音低,打印頭的機(jī)械損耗小,不需要色帶,避免了色帶更換的麻煩。然而因?yàn)樗褂脽崦艏?,所以它不能無限期地儲(chǔ)存。它可以在黑暗中保存1-5年,也有可以保存10年的長(zhǎng)期熱敏紙。[5]

藍(lán)牙技術(shù)日新月異,普羅大眾們擺脫有線設(shè)備的束縛的欲望日益增長(zhǎng),但是受體積影響,唯獨(dú)打印機(jī)這一領(lǐng)域前途暗淡。消費(fèi)者對(duì)于這部分訴求的聲音愈來愈大。藍(lán)牙打印機(jī)應(yīng)運(yùn)而生,便于攜帶的大小,無線的打印方式,得到消費(fèi)者一致好評(píng)。便攜藍(lán)牙熱敏打印機(jī)麻雀雖小五臟俱全、它性能穩(wěn)定、兼容性佳等特點(diǎn),是抄表工、運(yùn)輸業(yè)、金融人士、郵遞員等行業(yè)人士倍受青睞的智能打印機(jī)。2總體設(shè)計(jì)2.1設(shè)計(jì)原理 打印機(jī)會(huì)讀取并分析數(shù)據(jù),將其轉(zhuǎn)化成打印頭可以識(shí)別的指令,然后打印頭配合旋轉(zhuǎn)的電機(jī)使打印紙上顯示出讀取到的信息。接受到數(shù)據(jù)需要翻譯,而每次都實(shí)時(shí)轉(zhuǎn)換過于麻煩,為打印速度考慮應(yīng)該減少這一翻譯時(shí)間,所以應(yīng)該有一個(gè)翻譯庫(kù),每次接受到輸入只要進(jìn)行對(duì)應(yīng)翻譯即可。電機(jī)轉(zhuǎn)動(dòng)需要相位變化,而每個(gè)相位有持續(xù)時(shí)間,所以需要控制電平變化和計(jì)時(shí)工具。然后需要考慮翻譯庫(kù)和打印頭的交流問題,怎么讓打印頭和翻譯庫(kù)正常交流以打印出圖像。要使上述三個(gè)電機(jī)、打印頭、翻譯庫(kù)協(xié)同工作,故需要一個(gè)控制器來控制它們。圖2.1打印機(jī)工作流程2.2硬件選擇 如設(shè)計(jì)原理所描述,本打印機(jī)是由一個(gè)控制器配合翻譯庫(kù)對(duì)數(shù)據(jù)進(jìn)行讀取和分析,然后把指令發(fā)送到執(zhí)行打印功能的電機(jī)模塊和打印模塊,在基本打印功能之外本設(shè)計(jì)還包含有一個(gè)無線通信模塊,它可以讓人們隨時(shí)隨地的使用打印,是本設(shè)計(jì)的創(chuàng)新之處。圖2.2智能打印機(jī)的組成2.2.1控制器選擇打印機(jī)需要一個(gè)控制器,本設(shè)計(jì)中由單片機(jī)擔(dān)當(dāng)這個(gè)角色,市面上常見的單片機(jī)可選擇的芯片類型有51單片機(jī)和STM32系列。方案一:51單片機(jī)兼容性強(qiáng),應(yīng)用廣泛,美中不足的是自編程能力一般不會(huì)出現(xiàn)51系列的單片機(jī)上面。方案二:STM32系列有一個(gè)專門設(shè)計(jì)過的ARMCortex-M3內(nèi)核,它生來就是為了滿足那些要求高性能、廉價(jià)、低能耗的嵌入式應(yīng)用。 ST89C51和STM32系列控制器的性能比較如表2.1所示。表2.1STM32對(duì)比STC89C51STC89C51STM32內(nèi)核51Core,8Bit@2MHzMax(分頻后),0.06DMIPSARM

Cortex-M3,32Bit@72MHz,1.25DMIPS片上儲(chǔ)存器ROM只有2K-64K,RAM僅為128B-1KROM為20K-1MB,RAM有8K-256K外設(shè)三個(gè)定時(shí)器和一個(gè)串口AD,DA,Timer,WWDG,IWDG,CRC,DMA,IIC,SPI,USART等眾多外設(shè)開發(fā)工具UV2UV4,甚至更高經(jīng)對(duì)比得出,STM32無論是內(nèi)核、地址空間、外設(shè)還是片上存儲(chǔ)器和開發(fā)工具的性能都幾乎完勝51單片機(jī),故選擇STM32來做控制中端。2.2.2電機(jī)選擇打印機(jī)需要進(jìn)紙,所以本設(shè)計(jì)需要用到一個(gè)電機(jī),一下對(duì)較為常見的步進(jìn)電機(jī)、伺服電機(jī)和舵機(jī)這幾種控制電機(jī)進(jìn)行分析。方案一:步進(jìn)電機(jī)步進(jìn)電機(jī)是一種將電脈沖信號(hào)轉(zhuǎn)換成角位移或線性位移的執(zhí)行器。每當(dāng)步進(jìn)電機(jī)接收到脈沖信號(hào)時(shí),它就會(huì)以設(shè)定的方向旋轉(zhuǎn)一個(gè)固定的角度(稱為步進(jìn)角度)。[6]在無過載的情況下,步進(jìn)電機(jī)以步進(jìn)角度步進(jìn)旋轉(zhuǎn)(不受負(fù)載變化的影響),通過控制脈沖數(shù)來控制角位移,從而精確定位。同時(shí),可以通過控制脈沖頻率來控制步進(jìn)電機(jī)的轉(zhuǎn)速和加速度,從而調(diào)節(jié)速度。圖2.3為混合式兩相步進(jìn)電機(jī)內(nèi)部結(jié)構(gòu)示意圖.。[7]方案二:伺服電機(jī)伺服電機(jī)不僅僅是一個(gè)電機(jī),而是一個(gè)電機(jī)系統(tǒng),其包含伺服馬達(dá)(多為交流電動(dòng)機(jī))、伺服驅(qū)動(dòng)器(控制伺服電機(jī)的一種控制器)和編碼器(安裝在伺服電機(jī)上的傳感器,用于測(cè)量磁極的位置以及伺服電機(jī)的角度和速度)。為了實(shí)現(xiàn)精確控制,伺服電機(jī)一般采用三回路控制(即三個(gè)閉環(huán)負(fù)反饋Pm調(diào)節(jié)系統(tǒng)),即由內(nèi)向外的電流回路、速度回路和位置回路)圖2.4為伺服電機(jī)控制原理圖。方案三:舵機(jī)舵機(jī)由于最初被航模愛好者們用來控制船舵、飛機(jī)舵面而得此俗稱,其作用是控制小車、機(jī)器人的關(guān)節(jié)、船舶、飛機(jī)等物體轉(zhuǎn)動(dòng)一定角度。舵機(jī),雖然擁有伺服電機(jī)所缺少的減速齒輪,但它的本質(zhì)還是一個(gè)低級(jí)的伺服電機(jī)系統(tǒng),值得一提的是原本伺服電機(jī)的三環(huán)控制在舵機(jī)上被簡(jiǎn)化得只剩位置環(huán)了。圖2.5為舵機(jī)控制原理圖圖2.3混合式兩相步進(jìn)電機(jī)內(nèi)部結(jié)構(gòu)示意圖.圖2.4伺服電機(jī)控制原理圖圖2.5舵機(jī)控制原理圖這樣一來可以得到一個(gè)顯而易見的結(jié)論,步進(jìn)電機(jī)和伺服電機(jī)的不同在與它們被使用與不同的控制系統(tǒng);而作為特殊的伺服電機(jī)的舵機(jī),當(dāng)然也遵循同樣的規(guī)律。步進(jìn)電機(jī)是不將控制的結(jié)果反饋回來影響當(dāng)前控制的系統(tǒng),伺服電機(jī)是根據(jù)控制對(duì)象輸出反饋來進(jìn)行校正的控制方式,兩者本質(zhì)上的最大區(qū)別就在于此,由于本設(shè)計(jì)是開環(huán)系統(tǒng)(見圖2.1),故選擇步進(jìn)電機(jī)。[8]2.2.3打印機(jī)類型的選擇 便攜式智能打印機(jī)市場(chǎng)主要是噴墨、熱敏、梭式(針式)等打印機(jī)。[9]分析這三種打印機(jī),決定將本設(shè)計(jì)做成什么類型的打印機(jī)。方案一:噴墨式打印機(jī) 噴墨式打印機(jī)在生活中非常常見,而便攜式的噴墨打印機(jī)的工作原理和日常所見的無甚區(qū)別,但是由于體積變小,墨盒也隨之縮小,帶來的后果是性能降低,為打印帶來的諸多不便。方案二:熱敏式打印機(jī) 便攜式熱敏打印機(jī)占據(jù)便攜式打印領(lǐng)域的較大市場(chǎng)份額,因?yàn)樗谛◇w積的同時(shí)兼顧了噪音低、打印速度快優(yōu)勢(shì),是一個(gè)良好的選擇。方案三:梭式打印機(jī)針式打印機(jī)憑借可打印多層復(fù)寫紙、購(gòu)置和使用耗材成本低、維護(hù)簡(jiǎn)單、可適應(yīng)惡劣環(huán)境使用等優(yōu)點(diǎn),至今仍大量用于各種票據(jù)打印領(lǐng)域。[10]但是它會(huì)產(chǎn)生很大的噪音讓人感到不適,這不符合本設(shè)計(jì)讓人們辦公更為幸福舒適的初衷。綜合三個(gè)方案考慮,本設(shè)計(jì)將做成熱敏打印機(jī),因?yàn)樗蛴】?、體積小、噪音低。2.3無線通信方式選擇方案一:Wi-FiWiFi最大優(yōu)點(diǎn)就是傳輸速度較高,有效距離也很長(zhǎng),但是需要路由器支持方案二:藍(lán)牙藍(lán)牙是一種支持設(shè)備短距離通信(一般10m內(nèi))的無線電技術(shù),速度較慢,但成本價(jià)格比WIFI實(shí)惠。因本設(shè)計(jì)是面向個(gè)人的打印機(jī),所以距離問題可以忽略,而且穩(wěn)定的WIFI信號(hào)需要路由器做支持,這無疑會(huì)增加成本,故本設(shè)計(jì)選擇藍(lán)牙來實(shí)現(xiàn)無線通信。2.4硬件選擇總結(jié)綜上所述,本章本設(shè)計(jì)是一個(gè)在STM32做控制,采用步進(jìn)電機(jī)走紙,藍(lán)牙進(jìn)行無線通信的熱敏打印機(jī)。圖2.6智能打印機(jī)模塊構(gòu)成3硬件設(shè)計(jì)3.1控制器概述本設(shè)計(jì)選用STM32F103C8T6型芯片,因?yàn)樵撔酒瑑r(jià)格實(shí)惠,功能齊全,選購(gòu)的開發(fā)板帶有FLASH模塊和無線通信模塊,能很好的滿足設(shè)計(jì)需求,此章節(jié)將對(duì)本設(shè)計(jì)會(huì)用到的模塊的工作原理進(jìn)行闡述。圖3.1STM32F103C8T6開發(fā)板圖3.2STM32F103C8T6原理圖3.1.1STM32F103C8T6的GPIO口STM32單片機(jī)有許多GPIO口,它們以字母進(jìn)行分組,GPIO[X](X可以是A,B,C,D,E),每組有16個(gè)GPIO口,每個(gè)GPIO口都是多功能的,使用前要進(jìn)行GPIO口功能的配置。[12]GPIO口是芯片與外界溝通的橋梁,沒有了它,單片機(jī)什么都做不成。圖3.3為GPIO口的基本結(jié)構(gòu)。本設(shè)計(jì)采用的STM32F103C8T6系統(tǒng)開發(fā)板的GPIO分為三組,分別為GPIOA、GPIOB、GPIOC各16個(gè)管腳。圖3.3GPIO端口的基本結(jié)構(gòu)3.1.2定時(shí)器要實(shí)現(xiàn)步進(jìn)電機(jī)的規(guī)律運(yùn)作需要用到STM32系列的定時(shí)器,而本芯片有且僅有4個(gè)定時(shí)器,它們分別是TIM1、TIM2、TIM3、TIM4,定時(shí)器工作原理如圖3.4圖3.4定時(shí)器工作原理在這里,我們默認(rèn)工程中的AHB時(shí)鐘等于系統(tǒng)時(shí)鐘。APB1時(shí)鐘:APB1/2給到APB1總線上的外設(shè)時(shí)鐘是36M,給到APB1總線上的定時(shí)器時(shí)鐘為72M。定時(shí)器都擁有16位向上、向下、向上/向下自動(dòng)裝載計(jì)數(shù)器,16位可編程(可以實(shí)時(shí)修改)預(yù)分頻器,計(jì)數(shù)器時(shí)鐘頻率的分頻系數(shù)為1~65536之間的任意數(shù)值,而當(dāng)計(jì)數(shù)器上溢(當(dāng)計(jì)數(shù)器計(jì)數(shù)到自動(dòng)重裝載值的時(shí)候,分頻器再給計(jì)數(shù)器一個(gè)脈沖信號(hào)會(huì)導(dǎo)致上溢)發(fā)生時(shí),定時(shí)器會(huì)生成中斷請(qǐng)求。[13]由于TIM2是通用定時(shí)器,這里只用到了基本定時(shí)的功能,所有只需分析基本定時(shí)器的結(jié)構(gòu)框圖,如圖3.5。圖3.5基本定時(shí)器結(jié)構(gòu)框圖預(yù)分頻器和自動(dòng)重載值寄存器都有影子寄存器,其中自動(dòng)重載值跟其影子寄存器之間可以沒有緩沖。在計(jì)數(shù)的過程中起作用的是影子寄存器,當(dāng)設(shè)置寄存器的時(shí)候只有產(chǎn)生更新事件,寄存器的值才會(huì)更新到其影子寄存器,圖3.5中預(yù)分頻器決定了多久計(jì)一次數(shù),重載值決定了要計(jì)多少次(ARR+1才溢出)。根據(jù)上述內(nèi)容,不難得出計(jì)數(shù)時(shí)間:計(jì)一次數(shù)的時(shí)間*計(jì)多少次=1/(72M/預(yù)分頻值)*重載值所以我們知道了配置STM32TIM2的驅(qū)動(dòng)需要以下步驟,先打開TIM2的外設(shè)時(shí)鐘使能,使定時(shí)器能夠正常的工作,然后根據(jù)所需計(jì)時(shí)時(shí)間對(duì)預(yù)分頻值和自動(dòng)重裝載值進(jìn)行配置,然后使能外設(shè)中斷,使打印機(jī)擁有一個(gè)運(yùn)作開關(guān),每當(dāng)按下才會(huì)啟動(dòng)程序進(jìn)行打印,然后使能核心級(jí)中斷,使TIM2能夠發(fā)送中斷請(qǐng)求,以實(shí)現(xiàn)步進(jìn)電機(jī)的相位變化,完成上述配置后,即可打開定時(shí)器,開始計(jì)時(shí)。3.1.3串口通信因本設(shè)計(jì)蘊(yùn)含復(fù)數(shù)的模塊,所以會(huì)產(chǎn)生模塊間的信息交流,譬如藍(lán)牙與單片機(jī)進(jìn)行通信,PC與單片機(jī)通信進(jìn)行通信等,那么不可避免的,我們需要用到USART串口。通信就需要有通信協(xié)議,UART便是一種通信協(xié)議,是異步串行通信的一種,在本設(shè)計(jì)采用的便是異步串行通信全雙工通信,它會(huì)把傳輸數(shù)據(jù)以字符位為單位進(jìn)行傳輸,圖3.6為UART傳輸數(shù)據(jù)時(shí)的數(shù)據(jù)幀格式。圖3.6UART的數(shù)據(jù)幀格式從圖3.6我們可以看出隨著除了隨時(shí)鐘頻率被傳輸?shù)臄?shù)據(jù)(位),還有啟動(dòng)位、停止位和奇偶校檢位,而奇偶校檢位擁有一個(gè)“可能的”前綴是因?yàn)樗强梢员卉浖O(shè)置取消的。數(shù)據(jù)線的空閑電平為高電平。數(shù)據(jù)位、停止位、校驗(yàn)位和Baud率合稱UART四要素。圖3.7UART框架圖3.7為STM32F103C8T6的UART框架,不難發(fā)現(xiàn)TX(數(shù)據(jù)發(fā)送接口)和RX(數(shù)據(jù)接收接口)是相互獨(dú)立的,這為全雙工通信提供了基礎(chǔ)。如圖3.7所示,無論是接受還是發(fā)送的數(shù)據(jù),它們都必定經(jīng)過數(shù)據(jù)寄存器DR,數(shù)據(jù)寄存器DR包含了兩個(gè)寄存器(TDR,RDR),當(dāng)單片機(jī)接收數(shù)據(jù)時(shí),數(shù)據(jù)經(jīng)RX被讀入到接受移位寄存器,然后被讀入到RDR,再被讀入系統(tǒng)總線;同理,當(dāng)我們要發(fā)送數(shù)據(jù)數(shù)據(jù)時(shí),數(shù)據(jù)由數(shù)據(jù)總線寫入到TDR在被寫入到數(shù)據(jù)移位寄存器,然后被發(fā)送出去。然而,我們并不能直接對(duì)TDR和RDR進(jìn)行操作,只能通過DR寄存器進(jìn)行間接操作,所以寫DR寄存器,實(shí)際上是在寫TDR寄存器。讀取DR寄存器,實(shí)際上是在讀取RDR寄存器,數(shù)據(jù)寄存器DR總是介于系統(tǒng)總線和移位寄存器之間??梢钥闯觯珼R寄存器被“發(fā)送器控制”和“接收器控制”所控制,而這兩者又被CR1寄存器和波特率所控制,故波特率的設(shè)置對(duì)串口通信極其重要,要想得出想要的波特率,就要設(shè)置正確的USARTDIV,就要在BRR寄存器中輸入正確的值。3.1.4SPI通信(字庫(kù)燒錄)打印頭的工作原理為讀取二進(jìn)制的數(shù)據(jù),并根據(jù)讀取到的數(shù)據(jù)輸出一個(gè)像素點(diǎn),而這樣原始的輸出功能遠(yuǎn)遠(yuǎn)不能滿足我們的打印需求,為打印出日常需要使用的文字,需要將固定大小的文字的字模的二進(jìn)制編碼提前輸入到打印機(jī)中,使打印機(jī)收到文字信息時(shí)可以一一對(duì)應(yīng)進(jìn)行解碼,以此來實(shí)現(xiàn)打印文字的功能。但是STM32F103C8T6本身自帶的存儲(chǔ)空間并不能容納這些編碼,所以本設(shè)計(jì)需要一個(gè)更大的存儲(chǔ)設(shè)備,于是便用到了W25X16芯片。 W25X16芯片是一個(gè)FLASH存儲(chǔ)器,它通常在用戶需要解決存儲(chǔ)問題時(shí)被使用,其有許多的優(yōu)點(diǎn),包括且不限于“占用PCB板空間小”、“低功耗”、“少量引腳數(shù)量”等。W25X16比一般的串行FLASH的性能出色的同時(shí),實(shí)驗(yàn)也更靈活,所以他異常的適合做代碼下載應(yīng)用,例如存儲(chǔ)聲音、文本和數(shù)據(jù),其存儲(chǔ)時(shí)間長(zhǎng)達(dá)20年。W25X16支持標(biāo)準(zhǔn)的SPI通信。SPI是串行外設(shè)接口的縮寫,是一種運(yùn)用于芯片和芯片之間數(shù)據(jù)交互的串行同步全雙工通信協(xié)議。SPI一般應(yīng)用于要求通信速度比較快的場(chǎng)合,比如LCD、ADC、FLASH芯片、視頻和音頻等。SPI通信協(xié)議是由摩托羅拉公司提出的。在SPI通信中的設(shè)備有主機(jī)和從機(jī)之分,主機(jī)和從機(jī)都可以有復(fù)數(shù)個(gè),且主從機(jī)間都可以發(fā)送或接收數(shù)據(jù),且主從機(jī)可以互相轉(zhuǎn)變,故區(qū)分它們的依據(jù)是CS/NSS線,主機(jī)通過CS/NSS線控制著從設(shè)備。SPI有三線制或四線制的工作方式,本設(shè)計(jì)采用四線制,四條線分別為:表3.1SPI的四種工作方式MISO–MasterInputSlaveOutput主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出MOSI–MasterOutputSlaveInput主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入SCLK–SerialClock時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生CS–ChipSelect從設(shè)備使能信號(hào),由主設(shè)備控制圖3.8SPI框架SPI串口的結(jié)構(gòu)如圖3.8所示??煽闯鯯CK端口是被波特率控制著,MOSI和MISO的工作方式和USART的TX/RX類似,但受主控制電路控制,可以讓它們對(duì)同一設(shè)備的功能相逆轉(zhuǎn),而波特率和NSS以及一干寄存器控制著通信電路。NSS是一個(gè)可選的引腳,用來選擇主/從設(shè)備。它的功能是用來作為“片選引腳”,讓主設(shè)備可以單獨(dú)地與特定從設(shè)備通訊,避免數(shù)據(jù)線上的沖突。從設(shè)備的NSS引腳可以由主設(shè)備的一個(gè)標(biāo)準(zhǔn)I/O引腳來驅(qū)動(dòng)。[14]一旦被使能(SSOE位),NSS引腳也可以作為輸出引腳,并在SPI處于主模式時(shí)拉低;此時(shí),所有的SPI設(shè)備,如果它們的NSS引腳連接到主設(shè)備的NSS引腳,則會(huì)檢測(cè)到低電平,如果它們被設(shè)置為NSS硬件模式,就會(huì)自動(dòng)進(jìn)入從設(shè)備狀態(tài)。[15]當(dāng)配置為主設(shè)備、NSS配置為輸入引腳(MSTR=1,SSOE=0)時(shí),如果NSS被拉低,則這個(gè)SPI設(shè)備進(jìn)入主模式失敗狀態(tài):即MSTR位被自動(dòng)清除,此設(shè)備進(jìn)入從模式。圖3.9SPI時(shí)序SPI通信的時(shí)序圖如3.9所示??梢钥吹酵ㄐ艔腘SS電平拉低開始,然后按照CPOL(時(shí)鐘極性)和CPHA(時(shí)鐘相位)的不同會(huì)導(dǎo)致捕捉的時(shí)鐘邊沿的不同,不同的捕捉方式有四種,它們的采樣時(shí)間點(diǎn)分別對(duì)應(yīng)的是表3.2SPI采集數(shù)據(jù)模式CPOL:時(shí)鐘極性CPHA:時(shí)鐘相位功能說明模式00上升沿采集數(shù)據(jù),下降沿觸發(fā)。低電平準(zhǔn)備數(shù)據(jù),高電平發(fā)送數(shù)據(jù)。001下降沿采集數(shù)據(jù),上升沿觸發(fā)高電平準(zhǔn)備數(shù)據(jù),低電平發(fā)送數(shù)據(jù)。110下降沿采集數(shù)據(jù),上升沿觸發(fā)高電平采集數(shù)據(jù),低電平發(fā)送數(shù)據(jù)。211上升沿采集數(shù)據(jù),下降沿觸發(fā),低電平準(zhǔn)備數(shù)據(jù),高電平發(fā)送數(shù)據(jù)。3根據(jù)設(shè)定數(shù)據(jù)幀格式會(huì)有所差異,采集滿8位或16位數(shù)據(jù)時(shí),就構(gòu)成了一個(gè)數(shù)據(jù)幀。(圖3.9是以8位為例)。 在了解了SPI的工作原理后,需要了解W25X16的硬件特性,結(jié)合兩者才能將數(shù)據(jù)寫入到W25X16中去。W25X16是一款擁有16Mbit容量的FLASH存儲(chǔ)芯片,一共有2MB的空間。W25X16的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)有塊、扇、頁的分區(qū),其中每256B為一頁,16頁組成一扇區(qū),每十六扇區(qū)為一塊,于是我們?nèi)菀椎玫絎25X16擁有16個(gè)存儲(chǔ)塊。圖3.10是W25X16的管腳圖,SPI功能在上文提到便不再贅述,于是擁有兩個(gè)新的管腳HOLD(保持端)和WP(寫保護(hù)),他們功能分別是允許芯片暫停工作和保護(hù)狀態(tài)寄存器,但是它們都是低電平生效,在本設(shè)計(jì)中它們都被接上了VCC,故它們可以忽略。圖3.10W23X16原理圖單片機(jī)運(yùn)行需要指令,W25X16也不例外,它包括15個(gè)基本命令,這十五個(gè)基本命令可以通過SPI總線完全控制芯片。指令在CS引腳的下降沿開始傳送,DI引腳上數(shù)據(jù)的第一個(gè)字節(jié)就是指令代碼,以下為常用的15個(gè)指令。[16]表3.3W25X16常用指令表3.4W25X16狀態(tài)寄存器表3.4為W25X16狀態(tài)寄存器,根據(jù)它可以獲取和調(diào)整W25X16的工作狀態(tài)。位于S0的稱為BUSY位,該位在“頁編程”、“塊擦除”、“扇區(qū)擦除”、“芯片擦除”、“寫狀態(tài)寄存器”時(shí)自動(dòng)置1,表示芯片在忙,此時(shí)除了“讀狀態(tài)寄存器”指令外一律不接收。上述當(dāng)指令完成時(shí),自動(dòng)置零,之后才可以對(duì)芯片繼續(xù)操作。W25X16具有一個(gè)特性,就是外部輸入只能寫入0而不能寫入1,對(duì)其寫1的唯一方法是對(duì)其進(jìn)行擦除,所以為保證寫入數(shù)據(jù)準(zhǔn)確,每次寫入數(shù)據(jù)都應(yīng)該先擦除相應(yīng)區(qū)域,在這一點(diǎn)上,值得注意的是在指令集中,寫的最小單位是頁,擦除的最小單位是扇區(qū)。3.2電機(jī)與打印頭選型經(jīng)考慮本設(shè)計(jì)決定使用與打印頭一體的電機(jī),以方便操作。而步進(jìn)電機(jī)運(yùn)作需要脈沖信號(hào),所以應(yīng)根據(jù)需求來調(diào)整脈沖信號(hào)的頻率,以保障輸出的文字或圖案完整且清晰。圖3.11為選擇的器件Fujitsu富士通ftp-628mcl101#50熱敏機(jī)芯,可以看到他的引腳為FPC軟排線,不能直接與開發(fā)板相連接,于是需要用到一個(gè)轉(zhuǎn)接板,如圖3.12所示。圖3.11Fujitsu富士通ftp-628mcl101#50熱敏機(jī)芯圖3.12FPC-30P1.0MM轉(zhuǎn)接板3.2.1步進(jìn)電機(jī)的驅(qū)動(dòng)本設(shè)計(jì)采用的步進(jìn)電機(jī)其詳細(xì)參數(shù)見表3.5,用于走紙,打印頭的步進(jìn)電機(jī)有四個(gè)引腳,分別連至電機(jī)內(nèi)部的兩組線圈;可以采用八拍驅(qū)動(dòng)方式,也可以采用4拍驅(qū)動(dòng)方式,驅(qū)動(dòng)時(shí)序如圖3.13(條件:5V)表3.5步進(jìn)電機(jī)參數(shù)項(xiàng)目規(guī)格條件額定電壓3.5-8.5DCV相位2相步距角9o(1-2相激勵(lì))步進(jìn)距離0.0625毫米相電阻10Ω±7%20℃相電流0.357A驅(qū)動(dòng)方式雙極,雙相驅(qū)動(dòng)(或1-2相)圖3.13步進(jìn)電機(jī)時(shí)序圖本設(shè)計(jì)采用4拍的驅(qū)動(dòng)方式,通過觀察時(shí)序圖3.13可以知道,要想讓電機(jī)轉(zhuǎn)動(dòng)起來就要按照時(shí)序給各個(gè)節(jié)拍一個(gè)固定的電平值,第一個(gè)節(jié)拍就是AA’BB’1001,第二個(gè)節(jié)拍就是AA’BB’0101,第三個(gè)節(jié)拍就是AA’BB’0110,第四個(gè)節(jié)拍就是AA’BB’1010;然后就是按照節(jié)拍1~4的順序斷的輸送節(jié)拍,并且每個(gè)節(jié)拍要保持800us以上的有效時(shí)間才能輸送下一個(gè)節(jié)拍。表3.6四節(jié)拍時(shí)序表四節(jié)拍時(shí)序表節(jié)拍1節(jié)拍2節(jié)拍3節(jié)拍4A01001A10110B00011B11100根據(jù)表3.6我們不難得出,步進(jìn)電機(jī)的四個(gè)管腳需要配備高低變化的電平,而芯片的PB3~PB6(管腳配置成推挽輸出)這四個(gè)GPIO口可以滿足這個(gè)需求。3.2.2打印頭驅(qū)動(dòng)熱敏打印機(jī)的原理是通過加熱改變印刷紙上所涂熱敏介質(zhì)的顏色。熱式微型打印機(jī)也是一種常見的微型打印機(jī),但它出現(xiàn)的時(shí)間比針式微型打印機(jī)晚。該熱敏打印機(jī)打印速度快,噪音低,打印頭的機(jī)械損耗小,不需要色帶,避免了色帶更換的麻煩。因?yàn)槭褂脽崦艏?,所以它不能無限期地儲(chǔ)存。它可以在黑暗中保存1-5年,也有可以保存10年的長(zhǎng)期熱敏紙,表3.7為驅(qū)動(dòng)打印頭的參數(shù)。表3.7打印機(jī)參數(shù)打印方式行式熱敏打印寬度48mm打印紙寬度58mm點(diǎn)密度384點(diǎn)/行打印速度40~80mm/s打印頭溫度偵測(cè)熱敏電阻缺紙偵測(cè)紅外反射光傳感器打印頭加熱器工作電壓(DCV)3.13~8.5,典型值(7.4v)邏輯工作電壓(DCV)2.7-5.25,典型值(5v)步進(jìn)電機(jī)工作電壓(DCV)3.5-8.5,典型值(5v)工作溫度:+0℃-50℃(不許有凝露)工作濕度:20%-85%RH(不許有凝露)膠輥開合次數(shù):大于5000次工作壽命:機(jī)構(gòu)與打印頭的耐磨>50km,打印頭的電機(jī)壽命為10^8個(gè)脈沖重量(克):40.7圖3.14熱敏打印頭結(jié)構(gòu)圖熱敏打印頭的內(nèi)部結(jié)構(gòu)如圖3.14所示,向打印機(jī)輸入的數(shù)據(jù)會(huì)被存儲(chǔ)在移位寄存器中,而根據(jù)產(chǎn)品參數(shù),每一次輸入數(shù)據(jù)都應(yīng)該是寫入384位數(shù)據(jù),然后閉合鎖存器會(huì)鎖存一次數(shù)據(jù),就會(huì)將數(shù)據(jù)移位寄存器里面的數(shù)據(jù)送到打印頭的384個(gè)打印點(diǎn)里,對(duì)應(yīng)位為1的就會(huì)閉合(能被加熱成黑點(diǎn)),為0的不閉合(不會(huì)被加熱成黑點(diǎn))。STB1~STB6都是控制加熱的信號(hào)管腳,每個(gè)STB控制64個(gè)加熱點(diǎn),當(dāng)把數(shù)據(jù)全部送上打印頭的打印點(diǎn)之后,把STB1~STB6都閉合就可以加熱打印頭。一般來說,一個(gè)字節(jié)占八個(gè)字的寬度,故一行可以打印48個(gè)字節(jié)數(shù)據(jù)(384bit/8=48byte)。打印頭打印的原理知道了,但是具體怎樣把數(shù)據(jù)發(fā)送到數(shù)據(jù)移位寄存器就需要根據(jù)打印頭的驅(qū)動(dòng)時(shí)序進(jìn)行操作,打印機(jī)芯的時(shí)序如圖3.15。圖3.15打印機(jī)芯時(shí)序圖可以看出,打印頭根據(jù)電平的高低來決定控制的打印點(diǎn)是否著色,其中高電平為黑色(著色),低電平為白色(不著色),而向移位寄存器寫入數(shù)據(jù)需要時(shí)鐘線有一個(gè)上升沿的數(shù)據(jù)。平時(shí)打印頭數(shù)據(jù)會(huì)被鎖存器鎖存,不得通過,只在LAT的發(fā)生一個(gè)低電平脈沖后,移位寄存器的數(shù)據(jù)方能夠?qū)戇M(jìn)打印頭中,然后隨著STB線電平拉高,加熱的信號(hào)管腳便會(huì)啟動(dòng),根據(jù)輸入的數(shù)據(jù)進(jìn)行打印。所以,若想要打印出一行想要的數(shù)據(jù),就應(yīng)當(dāng)先把384位數(shù)據(jù)準(zhǔn)備好后松開鎖存,將這一次數(shù)據(jù)寫入打印頭中,然后開始加熱。如同打印點(diǎn)組成了一條線數(shù)據(jù),隨著線的運(yùn)動(dòng),便可得出一個(gè)面的數(shù)據(jù)。配合打印頭開啟步進(jìn)電機(jī),每當(dāng)一行數(shù)據(jù)打印完成,電機(jī)隨之轉(zhuǎn)動(dòng),之后打印頭讀入新數(shù)據(jù),從而生成需要的打印文本。圖3.16打印頭管腳圖因?yàn)榇蛴☆^需要有開啟和關(guān)閉兩種狀態(tài),所以管腳需要輸出兩種電平的能力,應(yīng)把控制STB的所有管腳配置為推挽輸出。3.3藍(lán)牙模塊簡(jiǎn)介 藍(lán)牙串口模塊用于把串口轉(zhuǎn)換為藍(lán)牙,這種模塊工作的時(shí)候分為主機(jī)和從機(jī),其中偶數(shù)命名的型號(hào)出廠時(shí)就確定了是從機(jī)或者是主機(jī),并無法更改。奇數(shù)命名的型號(hào)可以用戶自己通過AT指令修改模塊為主機(jī)或者從機(jī)。[17]本設(shè)計(jì)選用的藍(lán)牙型號(hào)為HC-05,見圖3.17,其原理圖見圖3.18.圖3.17藍(lán)牙模塊HC-05圖3.18HC-05原理圖HC-05嵌入式藍(lán)牙串口通訊模塊(以下簡(jiǎn)稱模塊)具有兩種工作模式:命令響應(yīng)工作模式和自動(dòng)連接工作模式,在自動(dòng)連接工作模式下模塊又可分為主(Master)、從(Slave)和回環(huán)(Loopback)三種工作角色。當(dāng)模塊處于自動(dòng)連接工作模式時(shí),將自動(dòng)根據(jù)事先設(shè)定的方式連接的數(shù)據(jù)傳輸;當(dāng)模塊處于命令響應(yīng)工作模式時(shí)能執(zhí)行下述所有AT命令,用戶可向模塊發(fā)送各種AT指令,為模塊設(shè)定控制參數(shù)或發(fā)布控制命令。[18]通過控制模塊外部引腳(PIO11)輸入電平,可以實(shí)現(xiàn)模塊工作狀態(tài)的動(dòng)態(tài)轉(zhuǎn)換。[19]通過以下步驟可以將該芯片設(shè)為主模塊,先把PIO11置高,然后上電讓模塊進(jìn)入AT命令響應(yīng)狀態(tài)。將超級(jí)終端或其他串口工具,設(shè)置成波特率38400,數(shù)據(jù)位8位,停止位1位,無校驗(yàn)位,無流控制的通信方式,然后用串口發(fā)送字符“AT+ROLE=1\r\n”到本機(jī),成功則會(huì)返回“OK\r\n”,其中\(zhòng)r\n為回車換行。[20]完成上述步驟后將PIO置低,重新上電,模塊將變?yōu)橹髂K,自動(dòng)搜索從模塊,建立連接。[21]表3.8為藍(lán)牙模塊的參數(shù)。表3.8藍(lán)牙模塊參數(shù)項(xiàng)目說明模塊尺寸37*15.6mm,不含針腳引腳KEY、VCC、GND、RXD、TXD、STATE,STATE是藍(lán)牙狀態(tài)引出腳,未連接時(shí)輸出低電平,連接時(shí)輸出高電平。KEY作為AT指令設(shè)置腳,和按鍵功能相同按鍵按鍵相當(dāng)于將34腳拉高/拉低,配合AT指令使用。(大部分AT指令需要按下按鍵發(fā)送才有效。)電壓說明輸入電壓為3.2~6V,電源自帶防反接,但反接不工作狀態(tài)指示主機(jī)未記錄從機(jī)地址時(shí),快閃;紀(jì)錄從機(jī)地址時(shí),慢閃。從機(jī)未連接時(shí),快閃。連線后,主從機(jī)都是LED兩閃一停。接口說明接口電平為3.2~6V,可以連接各種單片機(jī)(Arduino、51、AVR、PIC、ARM、MSP430等),5V單片機(jī)可以直接連接。直接連接單片機(jī)串口,不能經(jīng)過MAX232芯片。通信距離空曠環(huán)境下有效距離為10米,超過十米則不能保證通信質(zhì)量。通信格式配對(duì)成功后,可以做為全雙工串口使用,無需了解任何藍(lán)牙協(xié)議。默認(rèn)常用通訊格式:9600,1,N(AT指令可設(shè)置停止位為2,奇偶校驗(yàn))主從機(jī)設(shè)置模塊為主從一體,出廠默認(rèn)為從機(jī),可以通過AT指令切換成主機(jī)。(AT+ROLE=0/1/2,0為從機(jī),1為主機(jī),2為回環(huán)角色,設(shè)置是需置高34腳或是按下模塊上的按鍵。詳情參考使用規(guī)格是6.5.8)默認(rèn)值從機(jī),波特率9600,藍(lán)牙名HC-05、配對(duì)密碼1234,LED狀態(tài)燈開4軟件設(shè)計(jì) 軟件需要根據(jù)設(shè)備間的關(guān)系進(jìn)行設(shè)計(jì),設(shè)備間的控制關(guān)系和數(shù)據(jù)交流方式。如圖4.1所示,數(shù)據(jù)先由個(gè)人電腦或手機(jī)發(fā)送到單片機(jī),然后單片機(jī)對(duì)這些數(shù)據(jù)進(jìn)行處理之后,會(huì)對(duì)W25X16進(jìn)行字庫(kù)的燒錄,然后控制打印頭與W25X16的通信的同時(shí)用定時(shí)器控制電機(jī)的相位變化進(jìn)而控制它的轉(zhuǎn)動(dòng)頻率,在這兩個(gè)設(shè)備的共同運(yùn)作下將讀取到的數(shù)據(jù)顯示到打印紙上。 PPC/手機(jī)STM32F103C8T串口通信藍(lán)牙通信步進(jìn)電機(jī)熱敏打印頭打印紙控制工作狀態(tài)SPI通信字庫(kù)燒錄

SPI通信讀取字庫(kù)

打印

走紙

定時(shí)器控制相位

W25X16

圖4.1設(shè)備間的控制關(guān)系設(shè)計(jì)完成后的大致工作流程如圖4.2所示,打印機(jī)在被開啟后會(huì)一直等待數(shù)據(jù),每當(dāng)有數(shù)據(jù)輸入單片機(jī)就會(huì)將接收到的數(shù)據(jù)進(jìn)行分析,得出它們?cè)赪25X16里的存儲(chǔ)地址,然后按地址讀取數(shù)據(jù),并將讀到的數(shù)據(jù)傳輸給打印頭,然后控制打印頭和電機(jī)的共同運(yùn)作,將讀取到的數(shù)據(jù)全數(shù)打印到打印紙上后,關(guān)閉電機(jī)的打印頭,再等待數(shù)據(jù)的輸入。打印機(jī)接通電源打印機(jī)接通電源等待數(shù)據(jù)單片機(jī)分析數(shù)據(jù)獲取字模地址打印頭按地址從W25X16中獲得字模數(shù)據(jù)數(shù)據(jù)全部被打?。侩姍C(jī)轉(zhuǎn)動(dòng),打印頭加熱電機(jī)啟動(dòng)電機(jī)關(guān)閉,打印頭停止加熱是否數(shù)據(jù)輸入圖4.2打印機(jī)工作流程4.1字庫(kù)燒錄人們的日常工作有打印文字的需求,但是打印頭無法直接識(shí)別并打印文字,所以要把文字轉(zhuǎn)化成打印頭可以識(shí)別的二進(jìn)制數(shù)據(jù),這種數(shù)據(jù)一般稱之為字模,宋體“字”的字模如圖4.2所示。圖4.2宋體“字”的24*24像素表示其中亮色塊的所代表的數(shù)據(jù)應(yīng)結(jié)合打印頭工作考慮,在本設(shè)計(jì)中負(fù)責(zé)亮色塊的打印頭需要置高電平。打印頭打印文字需要讀取字模,所以在打印機(jī)內(nèi)部應(yīng)設(shè)計(jì)有存儲(chǔ)字模的數(shù)據(jù)庫(kù),這種數(shù)據(jù)庫(kù)一般稱為字庫(kù)。本設(shè)計(jì)的字庫(kù)是燒錄在W25X16中的,由于它在寫入數(shù)據(jù)時(shí)只能寫入0,為得到正確的字模數(shù)據(jù),在燒錄字庫(kù)前應(yīng)當(dāng)對(duì)W25X16使用擦除功能,即把芯片全部寫為1,之后再根據(jù)串口收到的數(shù)據(jù)對(duì)相應(yīng)的地方寫入0便可得到需要的字模庫(kù)。字庫(kù)燒錄的程序框圖如圖4.3所示。擦除擦除W25X16設(shè)置頁數(shù)計(jì)數(shù)器N,初始為0串口是否有輸入?(DR寄存器非空)讀串口數(shù)據(jù),將其寫到W25X16的第N頁對(duì)W25X16發(fā)送指令,使其寫使能,進(jìn)行頁編程N(yùn)+1一頁數(shù)據(jù)寫完?W25X16在忙?

結(jié)束有輸入

在忙

不忙

寫完

未寫完圖4.3字庫(kù)燒錄程序框圖4.1.1波特率 燒錄字庫(kù)需要用到多種通信,而波特率是與通信密切相關(guān)的一項(xiàng)數(shù)據(jù),故設(shè)置正確波特率是進(jìn)行設(shè)備間通信的前提,下列是USART的波特率相關(guān)公式:(公式4.1)(公式4.2)已知USART的時(shí)鐘頻率為72MHz,假設(shè)我們需求的波特率為9600,那么我們便可以得到USARTDIV=72000000/(16*9600)=468.75根據(jù)定義,DIV_M是USARTDIV的整數(shù)部分,即DIV_M=468于是可以算得DIV_F=(USARTDIV–DIV_M)*16=12據(jù)定義有USART_BRR=DIV_M<<4||DIV_F=468*16+12=7500需要波特率為9600Baud,symbol/s時(shí),應(yīng)向USART_BRR寫入7500。4.2步進(jìn)電機(jī)與打印頭的共同運(yùn)作在字庫(kù)被燒錄進(jìn)了FLASH之后,需要打印文字時(shí)便可以需要的時(shí)候?qū)⒄{(diào)用函數(shù),讓打印頭讀W25X16取得字模,從而打印出文字。圖4.4是程序框圖的初始框圖是一個(gè)函數(shù)入口,所以它的所有進(jìn)程都是默認(rèn)可以進(jìn)行的,因?yàn)殄e(cuò)誤的情況會(huì)在參數(shù)輸入前被排除。雖然本框圖只有一個(gè)小的循環(huán),但由于它是一個(gè)函數(shù)入口,可以多次進(jìn)行方訪問,所以可以看做在結(jié)束之后可以重新回到初始框圖開始。CCLK產(chǎn)生上升脈沖有數(shù)據(jù)要寫入移位寄存器?移位寄存器寫滿?鎖存器解鎖,數(shù)據(jù)寫入到打印頭打印頭數(shù)據(jù)清空,步進(jìn)電機(jī)轉(zhuǎn)動(dòng)結(jié)束是是否打印完成圖4.4打印頭工作函數(shù)流程4.2.1定時(shí)器 由于步進(jìn)電機(jī)每個(gè)節(jié)拍都需要停留800us以上有效時(shí)間,所以需要定時(shí)器來計(jì)時(shí),在定時(shí)器驅(qū)動(dòng)函數(shù)中可以知道設(shè)置了如下兩項(xiàng)參數(shù),就是為了給步進(jìn)電機(jī)計(jì)時(shí)。TIM2->PSC=71;//72Mhz經(jīng)過72預(yù)分頻,頻率1M周期T=1us。 TIM2->ARR=800;//1us計(jì)數(shù)一次,然后計(jì)數(shù)800次,便經(jīng)過了800us。4.2.2字模地址讀取打印頭的打印方式是一行一行的打印方式意味著它的“書寫”方式不是人類般的從左到右逐字寫,而是從上至下的每次寫一行字,但是一個(gè)字的字模數(shù)據(jù)在FLASH中的地址是連續(xù)的,這意味著打印頭在讀取數(shù)據(jù)時(shí)必須采用某種跳躍的讀取方式,才能打印出完整的文字符號(hào),于是本設(shè)計(jì)需要考慮讀取方式的偏移規(guī)律。首先需要知道每個(gè)字模怎樣存儲(chǔ)在W25X16的地址的。由于W25X16的最小存儲(chǔ)單位為字節(jié)(Byte),所以打印頭需要二進(jìn)制數(shù)據(jù)(bit)是經(jīng)過一定合成后才燒進(jìn)W25X16的,在那里一個(gè)漢字字模占用地址長(zhǎng)度如公式4.3所示。(公式4.3)假設(shè)燒錄的是24*24的字模,經(jīng)公式4.3得出字模長(zhǎng)度為72字。漢字在字庫(kù)中有各自獨(dú)有的區(qū)碼和位碼,它們的起始值均為0XA1,于是對(duì)輸入的每個(gè)漢字的區(qū)碼和位碼均減去0XA1再乘以對(duì)應(yīng)的字模長(zhǎng)度(一個(gè)區(qū)有94個(gè)字),便可得出偏移值,于是有公式4.4.字庫(kù)中。(公式4.4)需要注意的是本實(shí)驗(yàn)中燒錄字庫(kù)同時(shí)會(huì)燒錄英語字庫(kù),故要打印中文(廣義,在中文區(qū)內(nèi)的字符,包含有字母和符號(hào))時(shí)務(wù)必先跳過英文區(qū)的地址,同樣以24*24的字模大小下,該數(shù)據(jù)為0X1806,于是有(公式4.5)本設(shè)計(jì)打印頭可控制384個(gè)打印點(diǎn),若是按24*24算,一行最多可以打印16個(gè)文字,故每次應(yīng)以16個(gè)字為一組來進(jìn)行打印,這么一來,每次傳輸給打印頭的數(shù)據(jù)是以3個(gè)字節(jié)長(zhǎng)度為一次的,故傳每次讀取的偏移地址見公式4.6,其中N的取值范圍小于字節(jié)長(zhǎng)度。 (公式4.6)芯片擦除芯片擦除字庫(kù)燒錄結(jié)束每個(gè)字據(jù)公式4.6計(jì)算偏移地址,并記錄將讀到的數(shù)據(jù)寫入打印頭移位寄存器串口是否有輸入?(DR寄存器非空)寫入空格補(bǔ)足16個(gè)字有十六個(gè)字嗎?N<子模長(zhǎng)度?設(shè)計(jì)數(shù)器N=0N=N+3小于有輸入有沒有大于一定規(guī)律圖4.5熱敏打印頭工作前的準(zhǔn)備要素5結(jié)論本設(shè)計(jì)是一個(gè)支持藍(lán)牙無線通信的便攜式熱敏打印機(jī),它可以無線接收來自PC或手機(jī)發(fā)送過來的文字信息,并將其打印出來。經(jīng)過本次實(shí)驗(yàn),我知道了比傳統(tǒng)打印機(jī)更小更便攜且支持無線打印的智能打印機(jī)完全可行,它能為辦公室辦公帶來極大的便利。相信本設(shè)計(jì)的問世能夠解決一部分智能辦公的需求,讓辦公變得更加方便。 日后有時(shí)間將會(huì)全方面的深入改進(jìn)本設(shè)計(jì),使其的打印功能更為完善,譬如打印文字的基礎(chǔ)上,能夠識(shí)別并打印圖片。在安全方面上則會(huì)考慮給打印頭做溫度監(jiān)控,在其過熱時(shí)會(huì)報(bào)警,報(bào)警一段時(shí)間后將會(huì)自行停止打印頭工作。同時(shí)還會(huì)給電機(jī)增加缺紙檢測(cè),當(dāng)打印紙不足導(dǎo)致電機(jī)空轉(zhuǎn)時(shí),打印機(jī)同樣會(huì)停止工作,起到保護(hù)打印頭和步進(jìn)電機(jī)的效果。參考文獻(xiàn)[1]吳崇理.多功能打印機(jī)(MFP)系統(tǒng)管理及通信安全研究[D];上海交通大學(xué),2012.[2]劉亦晨,張旭翔.基于80C196的微型打印機(jī)的接口電路設(shè)計(jì)[J].計(jì)算機(jī)與現(xiàn)代化,2010,11):106-8+13.[3]于梅.LEXMARK全球供應(yīng)鏈管理及優(yōu)化流程分析[D];復(fù)旦大學(xué),2008.[4].第一臺(tái)國(guó)產(chǎn)打印機(jī)[J].機(jī)械,2010,37(12):5.[5].微型打印機(jī)選購(gòu)指南[J].信息與電腦,2002(09):35-36.[6]葉凡.面向道路交通環(huán)境的參數(shù)檢測(cè)智能小車系統(tǒng)研究[D].華南理工大學(xué),2011.[7]劉毅.搗固裝置及其電液激振技術(shù)的研究[D].浙江大學(xué),2013[8]程院蓮.淺析步進(jìn)電機(jī)、伺服電機(jī)和舵機(jī)的區(qū)別[J].輕工科技,2020,36(1):36-37.

[9]李國(guó)育.便攜針式打印機(jī)的電路設(shè)計(jì)[J].電子技術(shù)與軟件工程,2019(13):91-92.[10]李國(guó)育.關(guān)于針式打印機(jī)降低打印噪聲的研究[J].電聲技術(shù),2019,43(03):17-19+36.[11]王瑩.淺談藍(lán)牙技術(shù)應(yīng)用及其發(fā)展展望[J].黑龍江科技信息,2011(14):90.[12]朱巖.基于STM32的車輛綜合無線監(jiān)控系統(tǒng)設(shè)計(jì)[D].太原理工大學(xué),2012.[13]張雄杰.基于時(shí)間數(shù)字測(cè)量車體表面壓力測(cè)量的研究[D].西南交通大學(xué),2011.[14]郭海嬌.嵌入式無限視頻監(jiān)控系統(tǒng)的研究[D].西安工程大學(xué),2011.[15]潘龍龍.智能氣象站的數(shù)據(jù)采集與通信系統(tǒng)設(shè)計(jì)[D].東南大學(xué),2016.[16]馬超.高精度半導(dǎo)體激光器控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].曲阜師范大學(xué),2014.[17]賴林弟,胡海燕,胡克滿.智能擋車器控制系統(tǒng)的設(shè)計(jì)[J].軟件導(dǎo)刊,2012,11(04):106-108.[18]胡志晨.基于介電特性的蘋果無損分級(jí)測(cè)量模塊的設(shè)計(jì)與實(shí)現(xiàn)[D].西北農(nóng)林科技大學(xué),2016.[19]刑子揚(yáng).基于手機(jī)APP的無線自動(dòng)奶茶機(jī)[J].科學(xué)技術(shù)創(chuàng)新,2019(06):68-69.[20]王兵.兩檔自動(dòng)變速驅(qū)動(dòng)總成試驗(yàn)臺(tái)測(cè)控系統(tǒng)設(shè)計(jì)[D].合肥工業(yè)大學(xué),2017.[21]李鉞.五自由度串聯(lián)機(jī)器人控制系統(tǒng)設(shè)計(jì)與仿真[D].天津科技大學(xué),2017.謝辭為時(shí)一個(gè)學(xué)期的畢業(yè)設(shè)計(jì)即將結(jié)束了,這也意味者我在北京理工大學(xué)珠海學(xué)院的大學(xué)生涯也即將結(jié)束。在畢業(yè)設(shè)計(jì)這段時(shí)間里,我得到了很大的自身提高,其中包含了對(duì)單片機(jī)知識(shí)的理解、了解到對(duì)單邊機(jī)編程所需要的構(gòu)建的編譯環(huán)境、它又是如何通過管腳對(duì)外設(shè)進(jìn)行控制、也認(rèn)識(shí)到打印機(jī)是由怎么樣的部件組成以及它們是如何協(xié)同工作的、明白了電機(jī)種類的選擇要素還有其工作原理,還有熟悉了如何在知網(wǎng)尋找所需要的資料以及如何撰寫一篇論文等等,這些都得益于老師和同學(xué)的鼎力幫助以及親朋好友提供的財(cái)物和環(huán)境支持,在這里,我要感謝聞新老師的耐心教導(dǎo),感謝母親在我寫作期間提供的舒適環(huán)境,感謝我家大橘用它那柔順的毛發(fā)給我降低壓力,感謝北京理工大學(xué)珠海學(xué)院給我這么一個(gè)展現(xiàn)自我能力的平臺(tái)。附錄附錄1程序源代碼步進(jìn)電機(jī)驅(qū)動(dòng)函數(shù)voidMotor_Drive(void){ staticu8cnt=1; //靜態(tài)局部變量,函數(shù)結(jié)束并不釋放該變量,下次進(jìn)來繼續(xù)使用 switch(cnt) { case1:M_A_H;M_A1_L;M_B_L;M_B1_H;break; //第一個(gè)節(jié)拍 case2:M_A_L;M_A1_H;M_B_L;M_B1_H;break; //第二個(gè)節(jié)拍 case3:M_A_L;M_A1_H;M_B_H;M_B1_L;break; //第三個(gè)節(jié)拍 case4:M_A_H;M_A1_L;M_B_H;M_B1_L;break; //第四個(gè)節(jié)拍 //送第一個(gè)節(jié)拍// case1:GPIOB->ODR&=~(0x0f<<3);GPIOB->ODR|=(0x09<<3);break;// //送第二個(gè)節(jié)拍// case2:GPIOB->ODR&=~(0x0f<<3);GPIOB->ODR|=(0x0a<<3);break;// //送第三個(gè)節(jié)拍// case3:GPIOB->ODR&=~(0x0f<<3);GPIOB->ODR|=(0x06<<3);break;// //送第四個(gè)節(jié)拍// case4:GPIOB->ODR&=~(0x0f<<3);GPIOB->ODR|=(0x05<<3);break; } cnt++; if(cnt>=5) { cnt=1;//重新頭輸送第一個(gè)節(jié)拍的脈沖信號(hào) }}定時(shí)器驅(qū)動(dòng)代碼//定時(shí)器2的初始化函數(shù)72M//1us65536=65.536msvoidTIM2_Init(void){ //1. 開TIM2的外設(shè)時(shí)鐘使能 RCC->APB1ENR|=(0x1<<0); //2. 設(shè)置好預(yù)分頻值和自動(dòng)重裝載值 TIM2->PSC=71;//1MT=1us TIM2->ARR=800;//800us //3. 使能外設(shè)中斷 TIM2->DIER|=(0x1<<0); //4. 使能核心級(jí)中斷NVIC_EnableIRQ(TIM2_IRQn); NVIC_EnableIRQ(TIM2_IRQn); //5. 開定時(shí)器 TIM2->CR1|=(0x1<<0);}//定時(shí)器2中斷服務(wù)函數(shù)voidTIM2_IRQHandler(void){ if(TIM2->SR&(0x1<<0)) { TIM2->SR&=~(0x1<<0);//清更新中斷標(biāo)志 LED=1; }}打印頭驅(qū)動(dòng)代碼#ifndef_PRINTF_H_#define_PRINTF_H_#include"stm32f10x.h"http://PA8、PA11、PA12#defineLAT_H(GPIOA->ODR|=(0x1<<8))#defineLAT_L(GPIOA->ODR&=~(0x1<<8))#defineCLK_H(GPIOA->ODR|=(0x1<<10))#defineCLK_L(GPIOA->ODR&=~(0x1<<10))#defineDI_H(GPIOA->ODR|=(0x1<<11))#defineDI_L(GPIOA->ODR&=~(0x1<<11))//PB10-PB15#defineSTB6_H(GPIOB->ODR|=(0X1<<10))#defineSTB6_L(GPIOB->ODR&=~(0X1<<10))#defineSTB5_H(GPIOB->ODR|=(0X1<<11))#defineSTB5_L(GPIOB->ODR&=~(0X1<<11))#defineSTB4_H(GPIOB->ODR|=(0X1<<12))#defineSTB4_L(GPIOB->ODR&=~(0X1<<12))#defineSTB3_H(GPIOB->ODR|=(0X1<<13))#defineSTB3_L(GPIOB->ODR&=~(0X1<<13))#defineSTB2_H(GPIOB->ODR|=(0X1<<14))#defineSTB2_L(GPIOB->ODR&=~(0X1<<14))#defineSTB1_H(GPIOB->ODR|=(0X1<<15))#defineSTB1_L(GPIOB->ODR&=~(0X1<<15))//加熱方式#definePRINTF_OPEN(1)//加熱全部#definePRINTF_CLOSE(2)//關(guān)閉加熱#definePRINTF_LEFT(3)//加熱左邊#definePRINTF_RIGHT(4)//加熱右邊voidPrintf_Pin_Init(void);voidPrintf_Send_Data(u8dat);voidPrintf_Lat_Data(void);voidPrintf_Control_Heat(u8heat_mode);#endif//printf.c//打印頭管腳初始化函數(shù)//PA8、PA11、PA12//PB10-PB15voidPrintf_Pin_Init(void){ //打開A、B口的時(shí)鐘 RCC->APB2ENR|=(0x3<<2); //A口配置 GPIOA->CRH&=~(0x0000ff0f);//清零 GPIOA->CRH|=(0x00003303);//配置為推挽輸出,速度為50Mhz //B口配置 GPIOB->CRH&=~(0xffffff00);//清零 GPIOB->CRH|=(0x33333300);//配置為推挽輸出,速度為50Mhz}//發(fā)送一個(gè)字節(jié)數(shù)據(jù)的函數(shù)voidPrintf_Send_Data(u8dat){ u8i; for(i=0;i<8;i++)//先發(fā)送高位 { CLK_L; if(dat>>7)//xxxxxxxx0000000x DI_H; else DI_L; CLK_H; dat<<=1;//xxxxxxx0讓次高位變成最高位 }}//鎖存一次數(shù)據(jù)voidPrintf_Lat_Data(void){ LAT_H; LAT_L; LAT_H;}//完成控制加熱函數(shù)voidPrintf_Control_Heat(u8heat_mode){ switch(heat_mode) { casePRINTF_OPEN:STB6_H;//加熱全部 STB5_H; STB4_H; STB3_H; STB2_H; STB1_H; casePRINTF_CLOSE:STB6_L;//關(guān)閉加熱 STB5_L; STB4_L; STB3_L; STB2_L; STB1_L; casePRINTF_LEFT:STB6_H;//加熱左邊 STB5_H; STB4_H; STB3_L; STB2_L; STB1_L; casePRINTF_RIGHT:STB6_L;//加熱右邊 STB5_L; STB4_L; STB3_H; STB2_H; STB1_H; }}//printf.h電機(jī)驅(qū)動(dòng)代碼#ifndef_MOTOR_H#define_MOTOR_H#include"stm32f10x.h"#defineM_A_H(GPIOB->ODR|=1<<3)#defineM_A_L(GPIOB->ODR&=~(1<<3))#defineM_AA_H(GPIOB->ODR|=1<<4)#defineM_AA_L(GPIOB->ODR&=~(1<<4))#defineM_B_H(GPIOB->ODR|=1<<5)#defineM_B_L(GPIOB->ODR&=~(1<<5))#defineM_BB_H(GPIOB->ODR|=1<<6)#defineM_BB_L(GPIOB->ODR&=~(1<<6))voidinit_motor_gpio(void);voidrun_motor();voidmotor_off();#endifvoidinit_motor_gpio(){ //先把PB3PB4的功能切換過來RCC->APB2ENR|=0X01;//AFIO時(shí)鐘使能AFIO->MAPR&=~(7<<24);//參見(表35)(8.4.2章節(jié))AFIO->MAPR|=2<<24; RCC->APB2ENR|=1<<3; //PB口時(shí)鐘使能GPIOB->CRL&=0XF0000FFF;GPIOB->CRL|=0X03333000; //PB配置為通用推挽輸出 GPIOB->ODR&=~(0xf<<3);//4個(gè)解耦全部低電平}//電機(jī)轉(zhuǎn)動(dòng)函數(shù)voidrun_motor(){ staticu8cont=0; switch(cont) { case0://第一個(gè)節(jié)拍 M_A_H; M_AA_L; M_B_L; M_BB_H; break; case1://第二個(gè)節(jié)拍 M_A_L; M_AA_H; M_B_L; M_BB_H; break; case2://第三個(gè)節(jié)拍 M_A_L; M_AA_H; M_B_H; M_BB_L; break; case3://第四個(gè)節(jié)拍 M_A_H; M_AA_L; M_B_H; M_BB_L; break; } cont++; if(cont>=4) { cont=0; }}//關(guān)閉電機(jī)函數(shù)voidmotor_off(){GPIOB->ODR&=~(0XF<<3);}打印一行字符程序流程取模ASCII每打印一行,就從字模里面找出更新下一行驅(qū)動(dòng)代碼//打印更新數(shù)據(jù)voidPrintf_Update_Data(u8*p){ staticu32cnt=0; u8buf[48]={0}; u8i=0; staticu8idx=0;//保存跳過多少個(gè)數(shù) update=0; while((*(p+i)!='\r')&&(*(p+i+1)!='\n'))//字符串以\r\n結(jié)尾 { idx=*(p+i)-'';//決定跳過多少個(gè)字節(jié) //在一行里面每個(gè)字母都只占兩個(gè)字節(jié) //所以要把每行要打印的字節(jié)取出兩個(gè)字節(jié) buf[2*i]=ascii_16_32[idx*64+2*cnt]; buf[2*i+1]=ascii_16_32[idx*64+(2*cnt+1)]; i++; } Printf_Send_Line_Data(buf); if(++cnt>=32) { cnt=0; GPIOB->ODR&=~(0xf<<3); TIM2->CR1&=~(0x1<<0); Printf_Heat_Mode(HEAT_OFF); }}voidTIM2_IRQHandler(void){ staticu32cnt=0; if(TIM2->SR&(0x1<<0)) { TIM2->SR&=~(0x1<<0);//清除標(biāo)志位 Motor_Drive(); if(cnt%2==0) { Printf_Lat_Data();//鎖存數(shù)據(jù) Printf_Heat_Mode(HEAT_LEFT);//加熱左邊 update=1; }else { //加熱右邊 Printf_Heat_Mode(HEAT_RIGHT); } if(++cnt>=2) { cnt=0; } }}打印固定文字程序流程取字模每打印一行,就從字模里面找出更新下一行程序代碼//打印更新數(shù)據(jù)voidPrintf_Update_Data(u8num){ staticu32cnt=0; u8buf[48]={0}; u8i=0; update=0; //num需要打印幾個(gè)文字 while(num--) { //每個(gè)文字在每行占4字節(jié),所以要把這個(gè)文字在每行的四字節(jié)找出來 buf[4*i]=HZ_16_32[i*128+4*cnt]; buf[4*i+1]=HZ_16_32[i*128+(4*cnt+1)]; buf[4*i+2]=HZ_16_32[i*128+(4*cnt+2)]; buf[4*i+3]=HZ_16_32[i*128+(4*cnt+3)]; i++; } Printf_Send_Line_Data(buf); if(++cnt>=32) { cnt=0; GPIOB->ODR&=~(0xf<<3); TIM2->CR1&=~(0x1<<0); Printf_Heat_Mode(HEAT_OFF); }}voidTIM2_IRQHandler(void){ staticu32cnt=0; if(TIM2->SR&(0x1<<0)) { TIM2->SR&=~(0x1<<0);//清除標(biāo)志位 Motor_Drive(); if(cnt%2==0) { Printf_Lat_Data();//鎖存數(shù)據(jù) Printf_Heat_Mode(HEAT_LEFT);//加熱左邊 update=1; }else { //加熱右邊 Printf_Heat_Mode(HEAT_RIGHT); } if(++cnt>=2) { cnt=0; } }}打印圖片程序流程取圖片字模每打印一行,就從字模里面找出更新下一行驅(qū)動(dòng)代碼//打印更新數(shù)據(jù)voidPrintf_Update_Data(u16w,u16h,u8*p){ staticu32cnt=0; u8i; u8temp=0; update=0; if(w>48) return;//超過打印機(jī)寬度無法打印 //開始準(zhǔn)備好一行的數(shù)據(jù) temp=(48-w)/2; for(i=0;i<temp;i++) { Printf_Send_Data(0); } //讓圖片居中顯示 for(i=0;i<w;i++) { Printf_Send_Data(p[cnt*w+i]); } for(i=0;i<temp;i++) { Printf_Send_Data(0); } //準(zhǔn)備好一行的數(shù)據(jù)了 if(++cnt>=h) { cnt=0; GPIOB->ODR&=~(0xf<<3); TIM2->CR1&=~(0x1<<0); Printf_Heat_Mode(HEAT_OFF); }}voidTIM2_IRQHandler(void){ staticu32cnt=0; if(TIM2->SR&(0x1<<0)) { TIM2->SR&=~(0x1<<0);//清除標(biāo)志位 Motor_Drive(); if(cnt%2==0) { Printf_Lat_Data();//鎖存數(shù)據(jù) Printf_Heat_Mode(HEAT_LEFT);//加熱左邊 update=1; }else { //加熱右邊 Printf_Heat_Mode(HEAT_RIGHT); } if(++cnt>=2) { cnt=0; } }}字庫(kù)燒錄/*****************************************函數(shù)功能:W25Q64讀數(shù)據(jù)形參列表: u32addr :要讀取存儲(chǔ)地址 u32*buff :緩存區(qū)地址 u16num :要讀的字節(jié)數(shù)返回值:無備注: 指令:0x03*****************************************/u8w25q64_read(u32addr,u8*buff,u16num){ u16i=0; SPI1_CS_L(); //拉低片選 spi1_send_rev(0x03); //發(fā)送指令0x03 spi1_send_rev((addr&0xff0000)>>16); spi1_send_rev((addr&0x00ff00)>>8); spi1_send_rev((addr&0x0000ff)>>0); //發(fā)送24位地址 for(i=0;i<num;i++) { *buff=spi1_send_rev(0x00); //接收數(shù)據(jù) buff++; } SPI1_CS_H(); //拉高片選 return0;}/*****************************************函數(shù)功能:W25Q64頁編程形參列表: u32addr :存儲(chǔ)地址 u32*buff :數(shù)據(jù)來源地址 u16num :要寫入的字節(jié)數(shù)返回值:無備注: 指令:0x02*****************************************/u8w25q64_page_write(u32addr,u8*buff,u16num){ u8status=0; u16i=0; u16last_count=0; if(num>W_PAGE)return1; last_count=W_addr%W_PAGE; //本頁的剩余空間字節(jié) if(num>last_count)return1; last_count=num; w25q64_write_enable(); //寫使能 SPI1_CS_L(); //拉低片選 spi1_send_rev(0x02); //發(fā)送指令0x02 spi1_send_rev((addr&0xff0000)>>16); spi1_send_rev((addr&0x00ff00)>>8); spi1_send_rev((addr&0x0000ff)>>0); //發(fā)送24位地址 for(i=0;i<last_count;i++) { spi1_send_rev(buff[i]); //發(fā)送字節(jié) } SPI1_CS_H(); //拉高片選 do { status=w25q64_read_status(); //讀狀態(tài)寄存器 }while(status&0x01); //判斷是否在忙 return0;}/*****************************************函數(shù)功能:W25Q64扇區(qū)擦除形參列表:要擦除的扇區(qū)地址返回值:無備注: 指令:0x20*****************************************/voidw25q64_sector_erase(u32addr){ u8status=0; w25q64_write_enable(); //寫使能 SPI1_CS_L(); //拉低片選 spi1_send_rev(0x20

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論