【正文】
務(wù)程序在附錄A中給出,這里給主線程服務(wù)程序的流程圖:圖54 主線程運(yùn)行流程 本章小結(jié)本章針對(duì)上位機(jī)的編寫采用了新的方法,應(yīng)用了先進(jìn)的多線程技術(shù),克服了平時(shí)流水線式的程序風(fēng)格,注重了算法的引入。同時(shí)還介紹了基本的開(kāi)發(fā)軟件,簡(jiǎn)單的使用方法等,本章只給出核心程序及界面的編寫過(guò)程,具體的各個(gè)模塊請(qǐng)見(jiàn)附錄A。第六章系統(tǒng)調(diào)試系統(tǒng)調(diào)試分兩階段進(jìn)行,第一階段對(duì)各個(gè)模塊進(jìn)行單獨(dú)調(diào)試,第二階段時(shí)行系統(tǒng)聯(lián)合調(diào)試。 第一階段調(diào)試先測(cè)試電源模塊是否工作正常,分為空載測(cè)試和負(fù)載測(cè)試??蛰d測(cè)試:此時(shí)斷掉其它的接線,保留電源電路,以免出現(xiàn)不必要的損失。通電后電源指示燈正常,用萬(wàn)用表測(cè)試,達(dá)到要求。負(fù)載測(cè)試:在正極和地之間接上10Ω水泥電阻,此時(shí)再測(cè)量電壓,達(dá)到要求,電源電路合格。接下來(lái)測(cè)試最小系統(tǒng)板模塊是否工作正常。CPU管腳測(cè)試:由于芯片是自行焊接,先確定各個(gè)管腳是否焊接完好,是否有短路。方法是用萬(wàn)用表逐個(gè)測(cè)試,將萬(wàn)用調(diào)到到二極管測(cè)試檔,先將萬(wàn)用表的黑白兩個(gè)表筆接觸,聽(tīng)到響聲,萬(wàn)用表工作正常。再用萬(wàn)用表逐個(gè)測(cè)量管腳。由于管腳比較多,應(yīng)耐心聽(tīng)。測(cè)試完畢,發(fā)現(xiàn)有個(gè)別管腳短路,發(fā)現(xiàn)在原理圖中這些管腳是接在一起的,說(shuō)明CPU管腳與PCB接觸良好。緊接著上電,最小系統(tǒng)板電源顯示燈工作正常,測(cè)量最小系統(tǒng)板電源模塊電壓。將萬(wàn)用表調(diào)到20V電壓檔,符合要求。插上JLink,打開(kāi)電腦的Keil μVision4,打開(kāi)任意STM32工程,點(diǎn)擊“build”,無(wú)錯(cuò)誤,點(diǎn)擊“l(fā)oad”,此時(shí)下載程序正常,代碼成功燒入芯片,最小系統(tǒng)板工作正常。對(duì)于上位機(jī)和STM32則要測(cè)試其是否能正確發(fā)送與接收數(shù)據(jù),此時(shí)需要借助串口調(diào)試助手。將RS232轉(zhuǎn)USB線插入電腦USB口后,連好控制電路,通電,各個(gè)指示燈已亮,工作正常。按正常步驟打開(kāi)上位機(jī),設(shè)置串口,點(diǎn)擊“走紙”,此時(shí)串口調(diào)試助手窗口顯示“0A 0A”,點(diǎn)擊“打印中文”,此時(shí)串口調(diào)試用手窗口顯示“1C 26”,工作正常。經(jīng)過(guò)這些測(cè)試說(shuō)明各個(gè)模塊工作正常,第一階段調(diào)試成功。 第二階段調(diào)試第二階段調(diào)試主要進(jìn)行聯(lián)合調(diào)試,打開(kāi)電腦上位機(jī),連好線路,接通電源,先讓打印機(jī)自檢,出現(xiàn)在如下圖中數(shù)據(jù),打印機(jī)工作正常。圖61 打印機(jī)初始化打印數(shù)據(jù)按圖53流程打開(kāi)串口之后,在輸入窗口輸入“南京郵電大學(xué)”字樣后出現(xiàn)如下情況:圖62 亂碼再打印下也出現(xiàn)這種情況,仔細(xì)觀察下不難發(fā)再兩次的亂碼容量差不多,可能是哪些命令沒(méi)輸入。經(jīng)查表發(fā)再漢字設(shè)置指令沒(méi)有發(fā)送,于是增加如下代碼,工作正常。Private Sub 打印中文ToolStripMenuItem_Click(ByVal sender As , ByVal e As ) Handles bytCmd(0) = 28 bytCmd(1) = 38 (bytCmd, 0, 2)End Sub最終打印效果如下圖所示:圖63 最終打印效果整個(gè)系統(tǒng)實(shí)物圖如下:圖64系統(tǒng)實(shí)物圖 本章小結(jié)本章是本課題的最后階段,針對(duì)各個(gè)模塊單獨(dú)進(jìn)行了測(cè)試與調(diào)整,期間主要對(duì)電源模塊進(jìn)行了散熱性能的優(yōu)化。其次則是對(duì)上位機(jī)程序的修改,在這個(gè)過(guò)程中要注重?cái)?shù)據(jù)分析與整理,及時(shí)發(fā)現(xiàn)問(wèn)題并解決問(wèn)題。在多次調(diào)試之后系統(tǒng)穩(wěn)定性達(dá)到了設(shè)計(jì)要求,實(shí)現(xiàn)了基本功能。結(jié)束語(yǔ)本文主要介紹了基于CortexM3單片機(jī)進(jìn)行微型熱敏打印機(jī)控制電路的開(kāi)發(fā)流程。、ARM嵌入式和串口通信協(xié)議及PCB的設(shè)計(jì)。在畢業(yè)設(shè)計(jì)的這段時(shí)間內(nèi),通過(guò)不斷地嘗試、不斷地探索,嘗試了很多新的想法: 采用Visual Studio 2010開(kāi)發(fā)上位機(jī),這使得在功能及界面上變得更加靈活多變。 使用CortexM3單片機(jī)進(jìn)行開(kāi)發(fā),而不是MSP430單片機(jī),緊跟時(shí)代的潮流,不能老使用以往的方案,而且運(yùn)行速度大大提高 自行開(kāi)發(fā)最小系統(tǒng)板,此次采用的是STM32F103VCT6,LQFP100腳封裝,焊接難度很大。由于受到了能力、時(shí)間等方面的制約,本系統(tǒng)在硬件、安全性和可靠性方面還有待進(jìn)一步改善。由于編程水平有限,只實(shí)現(xiàn)了漢字、字母和數(shù)字的打印,而沒(méi)有實(shí)現(xiàn)特定符號(hào)及表格的打印。此外由于缺乏無(wú)線傳輸方面的開(kāi)發(fā)經(jīng)驗(yàn),沒(méi)有實(shí)現(xiàn)微型熱敏打印機(jī)的組網(wǎng)打印。另外當(dāng)系統(tǒng)輸入的字符不正常時(shí),可能會(huì)輸出亂碼。總結(jié)整個(gè)畢業(yè)設(shè)計(jì)過(guò)程,使得自己從軟件到硬件都有了一次提升,同時(shí)大大拓寬了知識(shí)面,同時(shí)也讓我充分感受到了ARM芯片的強(qiáng)大之處,也讓我認(rèn)識(shí)到了做電子開(kāi)發(fā)這一行必須緊跟時(shí)代前沿。致 謝經(jīng)過(guò)為期三個(gè)月的畢業(yè)設(shè)計(jì),微型打印機(jī)控制電路從最初的上位機(jī)開(kāi)發(fā),再到硬件模塊的制作成功,整個(gè)系統(tǒng)的設(shè)計(jì)就全部完成了。在這段時(shí)間里,我的學(xué)習(xí)能力、動(dòng)手能力和溝通能力都有了很大程度的提高。這不僅是我個(gè)人努力的成果,也歸功于老師的悉心指導(dǎo)和同學(xué)的無(wú)私幫助。通過(guò)設(shè)計(jì)微型打印機(jī)控制電路的開(kāi)發(fā),我從中學(xué)到了關(guān)于人機(jī)界面軟件開(kāi)發(fā)、串口通信、嵌入式程序設(shè)計(jì)等許多方面的知識(shí)。為了深入了解熱敏打印機(jī),我向北京思普瑞特科技發(fā)展有限公司的工程師虛心求教;,我和我院的學(xué)長(zhǎng)做了多次的交流;為了完成嵌入式程序的設(shè)計(jì),我從圖書館查閱了大量的資料。我從中體會(huì)到了合作精神的重要,提升了人際交往的能力,也學(xué)到了寶貴的學(xué)習(xí)方法。特別要感謝指導(dǎo)我的張騰飛老師和自動(dòng)化學(xué)院的研究生戴曉罡學(xué)長(zhǎng),正是你們負(fù)責(zé)的督促和耐心的指導(dǎo),給了我不斷克服困難的勇氣。同時(shí)也要感謝ST公司STM32論壇的熱心網(wǎng)友和南郵自動(dòng)化學(xué)院實(shí)驗(yàn)室的負(fù)責(zé)同學(xué)。最后,向從百忙之中抽出時(shí)間審閱我論文和參加論文答辯的各位老師致以衷心的感謝!參考文獻(xiàn)[1] 李寧,基于MDK的SAM3處理器開(kāi)發(fā)應(yīng)用[M]. 北京:北京航空航天大學(xué)出版社,.[2] (英) Joseph Yiu著,ARM CorterxM3權(quán)威指南[M] 宋巖譯. 北京:北京航空航天大學(xué)出版社,2009.[3] 劉同法, 肖志剛, 彭繼衛(wèi). ARM CortexM3內(nèi)核微控制器快速入門與應(yīng)用[M]. 北京:北京航空航天大學(xué)出版社,2009.[4] 張綺文, 解書鋼. ARM嵌入式常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講[M]. 北京:電子工業(yè)出版社,2008.[5] 韓山,郭云,付海艷. ARM微處理器應(yīng)用開(kāi)發(fā)技術(shù)詳解與實(shí)例分析[M]. 北京:清華大學(xué)出版社,2007.[6] 侯殿有,才華. ARM嵌入式C編程標(biāo)準(zhǔn)教程[M].北京:人民郵電出版社, 2010 .[7] 王幸之,鐘愛(ài)琴,王雷,王閃. AT89 系列單片機(jī)原理與接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,.[8] 鄧紅等, 用字位顯示接口驅(qū)動(dòng)步進(jìn)電機(jī)的設(shè)計(jì)方法[J],微計(jì)算機(jī)信息 2005 年第81 期.[9] 的高速行式熱敏打印機(jī)控制板的研制[J].電子技術(shù)應(yīng)用,2004.[10] Jason Buxton,Thermal Printer FTP628MCL101 Production Specification [D]. FUJITSU .[11] Thearon Willis. Visual Basic 2005數(shù)據(jù)庫(kù)入門經(jīng)典[M]. 楊浩 譯. 北京:清華大學(xué)出版社. 2007.[12] STMicroelectronics,STM32F103XX USER39。S MANUAL[D]. [出版者不詳], 2008.[13] Bill Evjen , Billy Hollis , Professional 2003[M] , John Wiley amp。 Sons , Inc . 2004.附錄A 上位機(jī)軟件部分代碼主線程服務(wù)程序 Sub MyThread1() Dim count As Integer Dim strRece As String While 39。bytTab(0) = () 39。 += (bytTab) If 0 Then count = ReDim buff(count) (buff, 0, count) If = 16進(jìn)制 Then strRece = For i As Integer = 0 To count 1 strRece += Hex(buff(i)) strRece += Next += strRece Else += (buff) End If () = Len() () 39。自動(dòng)滾動(dòng)到底 End If End While End Sub串口設(shè)置 Private Sub Button1_Click(ByVal sender As , ByVal e As ) Handles Dim strBaud As String If Then () End If strBaud = If ( And strBaud ) Then = = CInt(strBaud) Else MsgBox(對(duì)不起,輸入錯(cuò)誤,設(shè)定未改變!, , 警告) End If 39。設(shè)置串口 End Sub打開(kāi)串口 Private Sub Button2_Click(ByVal sender As , ByVal e As ) Handles If = False Then Try () = 設(shè)備已連接 Catch ex As Exception MsgBox(, , 警告) Exit Sub End Try () End If 39。打開(kāi)串口 End Sub開(kāi)始接收 Private Sub Button3_Click(ByVal sender As , ByVal e As ) Handles Strt = New (AddressOf MyThread1) () bolSp = True 39。啟動(dòng)串口線程 End Sub關(guān)閉串口 Private Sub Button5_Click(ByVal sender As , ByVal e As ) Handles If Then () Try () = 設(shè)備斷開(kāi) Catch ex As Exception MsgBox(, , 警告) End Try End If 39。關(guān)閉串口 End Sub串口暫停 Private Sub Button4_Click(ByVal sender As , ByVal e As ) Handles If bolSp Then 39。() () bolSp = False Else () () bolSp = True End If 39。暫停串口線程 End Sub Sub SPinit() Dim i As Integer獲取串口號(hào) () i = 0 If 0 Then While i ((i)) i += 1 End While End If End Sub退出程序 Private Sub Button8_Click(ByVal sender As , ByVal e As ) Handles If Then ()