《基于STM32單片機的數字頻率計設計及仿真研究》8300字_第1頁
《基于STM32單片機的數字頻率計設計及仿真研究》8300字_第2頁
《基于STM32單片機的數字頻率計設計及仿真研究》8300字_第3頁
《基于STM32單片機的數字頻率計設計及仿真研究》8300字_第4頁
《基于STM32單片機的數字頻率計設計及仿真研究》8300字_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGE8基于STM32單片機的數字頻率計設計及仿真研究摘要:數字頻率計是一種用十進制數字顯示被測信號頻率的數字測量儀器。由集成芯片和一些外圍電路構成。各種自動控制電路遍及深入到電子產品和設備。并且頻率計已廣泛應用于各個領域。它的基本功能是測量正弦信號,方波信號,尖脈沖信號及其他各種單位時間內變化的物理量。頻率計的原理是用一個頻率穩定度高的頻率源作為基準時鐘,對比測量其他信號的頻率。頻率計測量與傳統的測量方式相比。運用了單片機頻率計有著體積更小,運算速度更快,測量范圍更寬,制作成本更低的優點。但是由于傳統的頻率計中有許多功能是依靠硬件來實現的。而采用單片機測量頻率之后,有許多以前需要用硬件才能實現的功能現在僅僅依靠軟件編程就能實現。而且不同的軟件代碼能夠實現不同的功能,從而大大降低了制作成本。數字頻率計主要實現方法有直接式、鎖相式、直接數字式和混合式四種。鎖相式和直接數字式都同時具有容易實現產品系列化、小型化、模塊化和工程化的特點。其中鎖相式更是以其容易實現相位同步的自動控制且低功耗的特點成為眾多業內人士的首選,應用最為廣泛。直接式的優點是速度快,但是結構復雜。一般只應用在地面雷達中。混合式就都可以應用于多種情況,且比較常見。關鍵詞:測量頻率;數字頻率計;單片機 1.1課題背景及研究意義 21.2課題的設計要求 21.3課題的研究內容 22系統概述 32.1方案選擇 32.1.1方案一 32.1.2方案二 32.2系統設計原理 32.3系統組成 33系統硬件設計 53.1STM32F103C8T6單片機核心板模塊 53.2脈沖收集模塊 63.3測量結果顯示模塊 73.4開關模塊 93.5蜂鳴器報警模塊 94系統軟件設計 114.1主程序設計 114.2開始測試流程 114.3LCD顯示 124.4程序仿真 134.4.1仿真軟件 134.4.2仿真結果 145結論 16參考文獻 17附錄A系統電路和相關附圖 18附錄B全部程序清單 20緒論1.1課題背景及研究意義主要研究用基于STM32單片機來設計的頻率計。因為在電子技術中,頻率測量十分重要,這就要求頻率計要不斷面提高其測量的精度和速度。我們在設計其電路時,都趨向于用盡可能少的硬件來實現,并且盡力把以前由硬件實現的功能部分,通過編程軟件來解決。因為軟件實現比硬件實現具有易修改的特點,例如簡單的修改幾行源代碼就比在印制電路板上改變幾條連線要容易的多,所以基于微處理器的電路往往比傳統的電路設計具有更大的靈活性。并且數字頻率計是計算機、通訊設備、音頻視頻等科研生產領域必不可少的測量儀器,所以頻率的測量就顯得更為重要。在數字電路中,頻率計屬于時序電路,它主要由具有記憶功能的觸發器構成。在計算機及各種數字儀表中,都得到了廣泛的應用。1.2課題的設計要求本課題的設計重點是設計一種基于STM32單片機的數字頻率計,利用十進制數字等數據去顯示測出各種信號源及其他各種單位時間內的變化量。可以測量周期性正弦/方波信號.測量范圍100Hz

~100kHz。

測量正弦信號、

方波信號,測量范圍100Hz

~100kHz

。且其板子的基本是基于一個單片機,并且用它進行各種邏輯算數運算,用另外的LCD液晶顯示屏顯示所測量出的頻率值。1.3課題的研究內容數字頻率計采用以單片機為基礎的硬件板塊,頻率計主要由四個部分構成:時基電路、輸入電路、計數顯示電路以及控制電路。信號每單位時間完成周期的個數,一般取一秒為基本單位時間,現在多半都是用電子計數器表示其頻率大小。當被測信號在特定時間段T內的周期個數為N時,則可得被測頻率F。利用輸入的信號波形也就是任意的周期信號和輸入的電壓,在一個測量周期過程中,被測周期信號在輸入的電路中經過放大、整形、微分等操作之后形成特定周期的窄脈沖,送到單片機控制的輸入端。特定周期的窄脈沖通過端口時,從而進入計數器進行計數,然后計數器的顯示電路則是通過LCD顯示屏來顯示被測信號的頻率值,內部控制電路則用來完成各種測量功能之間的切換并實現測量設置。頻率計也是一種基礎測量儀器,能夠測出各種規定信號的頻率值的大小。2系統概述2.1方案選擇本設計主要通過輸入電路和控制電路和時基電路和計數顯示電路四部分電路組成。可以有很多種方案進行實現功能,主要分為模擬法和數字法兩大類,而且由于這次的設計的實驗環境等要求,現在就有幾種電子計數式的數字法中的方案,下面就列舉兩種方案進行闡述。2.1.1方案一利用計數器去捕獲已經被放大或者縮小的被測信號得上升沿,在設定的時間內,通過定時器設定捕獲的上升沿即可用數碼管顯示出頻率的大小,方案一在低頻時精度較高,但是在其被測信號為高頻時會出現技術溢出的情況,即脈沖周期測頻法。2.1.2方案二計數器通過捕獲脈沖,在一定的設定時間內捕獲信號脈沖個數,高頻時可以利用信號分頻之后再進行捕獲,方案二對于高低頻都十分有效,而且具有很好的實用性與良好的精度性,所以采用方案二即脈沖數倍頻測頻法。2.2系統設計原理利用施密特觸發器將邊緣緩慢變化的周期性信號如正弦波、三角波或任意形狀的模擬信號變換成同頻率的矩形脈沖。通過單片機內部的兩個16位定時/計數器測量某段時間內的外加脈沖數,經過處理并通過數碼管直接顯示出所加信號的頻率。單片機內部T0用來定時,T1用來計數(下降沿觸發)。當來一個計數脈沖則計數1次。在T0開始定時的同時,T1開始計數,T0定時1s時間到時,T1停止計數。2.3系統組成本課題以STM32單片機為核心設計的一種數字頻率計,系統整體組成主要由脈沖收集電路,電源,STM32單片機,LCD顯示電路,控制電路組成。系統組成如圖2.3所示。系統基本組成圖2.3脈沖收集電路首先由于被測信號的幅度和頻率大小原因,以及信號波的類型未知,所以被測信號必須要進行放大和整形最好變成方波或者矩形波,利于正確測量頻率。LCD顯示電路接收來自上一部分經過計數的信號,將其數值在屏幕上顯示出來。液晶顯示控制用于點陣型液晶顯示驅動的控制,實現在點陣型液晶顯示器件上的各種顯示功能。單片機核心板塊內的計數電路當接收到脈沖收集電路所傳來的特定形式的信號時,開始計數被測信號中有多少個上升沿。在計數的時候LCD顯示電路不顯示數字。當計數完成后,此時要使LCD顯示屏顯示計數完成后的數字值。控制電路控制計數的開始和結束的,在等精度測頻中,控制電路可以根據被測信號的頻率調整計數時間寬度,使計數開始到結束這段時間一定是被測信號的整數個周期,提高了精度。3系統硬件設計3.1STM32F103C8T6單片機核心板模塊STM32系列處理器是意法半導體ST公司生產的一種基于ARM7架構的32位,支持實時仿真和跟蹤的微控制器。選擇此款控制芯片是因為本系統設計并非追求成本的最低或更小的功耗,而是在實現本設計功能的前提下能夠提供更豐富的接口和功能以便于設計實驗系統各實驗項目所需的外圍擴展電路。本設計使用的引腳有:PC13,PC14,PC15,PA0,PA1,PA9,PA10用于連接與控制按鍵和脈沖發生器以及蜂鳴器的正常工作。PB15,PB14,PB13,PB12,PB11,PB10,PB9,PB8,PB7,PB6,PB5則用于連接與控制LCD1602液晶顯示屏的正常工作。所用部分引腳功能如下:PC13:連接開關設置閾值的按鍵,且主控制輸入作用。PC14:外部晶振引腳進行輸入信號,作8MHZ使用,連接增加值的按鍵。PC15:外部晶振引腳進行輸出信號,也作8MHZ使用,連接減少值的按鍵。PA0:引腳喚醒作用。PA1:蜂鳴器模塊輸入端口,用于通知其是否可發送信息進行報警。PA9:脈沖收集串口一的發送脈沖。PA10:脈沖串口二的發送脈沖。PB15:令LCD進行主輸出從輸入。PB14:令LCD進行主輸入從輸出。PB13:同步時鐘信號。PB12:片選信號,低電平有效,選中模塊進行工作。PB11:在單片機和LCD顯示屏間傳輸串行數據。PB10:產生同步時鐘脈沖。PB9:單片機輸出至LCD的三通道口。PB8:單片機輸出至LCD的四通道口。PB7:傳輸串行數據。PB6:傳輸同步時鐘脈沖。PB5:標識通訊模式,增強模式等。單片機核心模塊如圖3.1所示。STM32F103C8T6單片機核心模板圖3.13.2脈沖收集模塊因為所輸入的被測信號是可能的正弦波,矩形波,三角波等等,然后后面的閘門和計數器的電路模板則需要要求被測信號的波形為矩形波,所以就要設計一個模塊在被測信號進入要求的所需模板塊時變成對應所需要的信號波形的類型,例如這個模板就是把正弦波和三角波等波形轉化為矩形波進行測量頻率大小。其必要性就是采用單片機計數的話,則它只能對脈沖波進行計數,而實際中需要測量的頻率的信號是各種各樣的,只有通過這個模塊將它們轉化為可以進行單片機計數的脈沖波。此模塊的整形電路有兩種情況說明,第一種為單穩態觸發器,而第二種是施密特觸發器。而且這兩種觸發器有共同的地方就是都可以有定時器或者門電路組成,又因為此次設計是基于STM32單片機的頻率計,所以單片機對于組成頻率計的脈沖采集模塊部分的要求很簡單,所以我們選擇由定時器組成的施密特觸發器去當做構成模塊的被測信號的電路脈沖收集部分。 施密特觸發器是脈沖收集電路里面的脈沖波形進行變化的過程中經常使用的一種電路,它的工作原理與輸出特性以及其輸入特性都是符合單片機計數的標準,所以可以進行被測信號的準確測量。、 另一方面,由于可能出現不清楚被測信號的強弱的情況,所以也要可以在信號整形之前進行放大或者衰減處理等操作。采用NE555脈沖發生器:1.可用作方波信號發生器,產生方波信號用作此設計使用測量。2.可以產生可調脈沖,用來控制相關的電路。此定時器是一種模擬和數字功能相結合的中規模集成器件。并且定時器成本低,性能可靠,只需要外接幾個電阻、電容,就可以實現多諧振蕩器、單穩態觸發器及施密特觸發器等脈沖產生與變換電路。它也作為定時器應用于電器、電子測量方面。它是單路信號輸出,可輸出方波信號,還帶有可調電阻,通過調節它的電阻值去控制它的輸出頻率,且它的基本工作電壓為5—12V左右。接口:VCC為外接5—12V的電源,OUT為頻率輸出端,GND為外接地。其原理圖如下圖3.2所示。脈沖收集原理圖3.23.3測量結果顯示模塊使用了LCD1602顯示模板:LCD顯示器分為字段顯示和字符顯示兩種。其中字段顯示與LED顯示相似,只要送對應的信號到相應的管腳就能顯示。字符顯示是根據需要顯示基本字符。本設計采用的是字符型顯示。系統中采用LCD1602作為顯示器件輸出信息。與傳統的LED數碼管顯示器件相比,液晶顯示模塊具有體積小、功耗低、顯示內容豐富等優點,而且不需要外加驅動電路等優點。此芯片的基本要求為:芯片工作電壓為4.5~5.5V,且工作電流大概為2.0mA(5.0V),模塊最佳工作電壓為5.0V所使用的部分引腳的說明如下:VSS:為地電源。VDD:接5V正電源。V0:為液晶顯示器對比度調整端。RS:為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。RW:為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。第7—14引腳為:D0~D7為8位雙向數據線。第15—16引腳為:分別接5V的電壓和接地。此系統中采用LCD1602作為顯示器件輸出被測頻率值。原理圖由圖3.3所示。LCD1602顯示屏原理圖3.33.4開關模塊此開關主要是用來設置閾值,并且可以對設定的頻率值進行相應的調整,以便去和實際測得的頻率值比較。還可以通過加減按鍵進行對值的增加或者減少。每當按下去一次,顯示的第一行值就發生一次變化,直到和開始設定的閾值大致相同。未按下時只有兩組引腳連接,按下之后,四個引腳連接在一起。3.5蜂鳴器報警模塊有源蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。本系統所采用的報警模塊為5V有源蜂鳴器模塊,電路中采用三極管9012來驅動,只要單片機控制引腳為高電平,蜂鳴器就會鳴叫報警,反之則不鳴叫,可以通過控制單片機引腳方波輸出形式控制蜂鳴器的鳴叫方式。電阻為限流電阻,保護作用。原理圖如3.6所示。蜂鳴報警器原理圖3.54系統軟件設計4.1主程序設計本系統大致流程包括先開始,先輸入被測信號,然后在進行脈沖采集,通過不同的按鍵設置閾值,增加或者減少設定頻率值,在經過STM32單片機的控制計數下,通過LCD顯示屏得出頻率的讀數。即單片機實時采集脈沖發送過來的脈沖數,在單位時間內的脈沖數也就是頻率值。通過液晶LCD1602液晶實時顯示當前頻率值以及設置值,如果當前頻率值超過設置閾值,蜂鳴器進行報警。當前頻率值顯示分兩種,低于1000hz時顯示單位為hz,高于1000hz時顯示單位kHz,自動切換,方便查看。按鍵有設置按鍵、設置+、設置-,在設置情況下可以對設置值進行加減運算,設置值同樣兩種自動切換顯示,低于1000時直接顯示,高于1000時顯示單位k,方便查看對比。過程由圖4.1所示主程序流程圖4.14.2開始測試流程開始測試的時候先將板子進行初始化,并將其連接到示波器和接地操作,判斷時間是否經過了1秒鐘,當其時間滿足條件時,即可通過單片機控制,然后在LCD顯示屏中顯示出來被測頻率的值。過程由圖4.2所示開始測試流程圖4.24.3LCD顯示 LCD1602芯片主要功能是顯示數值或者符號,實現功能是先接通電源,保持初始化狀態,即讓計數器清零且屏幕清空,并且設置芯片的模式。完成這些操作時候顯示屏開始顯示,但是并不顯示光標,第二步顯示文字且光標后移動一位。當初始化完成之后,單片機進行判斷按鍵是否按下,則即可從中讀取被測頻率值的大小,再顯示第一行數據,若顯示成功則相繼顯示第二行的數據。最后液晶顯示屏上顯示出兩行頻率值的大小。過程由下圖4.3所示、LCD顯示流程圖4.34.4程序仿真4.4.1仿真軟件Proteus軟件是英國Labcenterelectronics公司出版的EDA工具軟件。它是目前最好的仿真單片機及外圍器件的工具,從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。是目前世界上唯一將電路仿真軟件、PCB設計軟件和虛擬模型仿真軟件三合一的設計平臺。KeilC51是美國KeilSoftware公司出品的51系列兼容單片機C語言軟件開發系統,與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。應用Keil進行軟件仿真開發的主要步驟為:編寫源程序并保存—建立工程并添加源文件—設置工程—編譯/匯編、連接,產生目標文件—程序調試。4.4.2仿真結果5結論經過這次的設計,帶來了很多的收獲,數字頻率計在現在是很常用的設備,在通訊設備,音頻設備等科研領域中發揮了很重要的作用,它是一種采用十進制數字去顯示被測信號的大小的數字測量儀器,它的基本功能是將被測信號轉化成方波或者正弦信號以及其他各種單位時間內變化的物理量。而且,在設計數字電路和模擬電路的安裝調試的時候,他們采用十進制數去顯示,并且它的測量速度十分快,顯示的值更加直觀,所以這是種很常見的頻率測量儀器。然后在這次的設計中,熟練的學會了c語言和匯編語言的合理運用,加上仿真軟件等理解,加上基本單片機和各種元件的基本知識,加上對數字頻率計的各種相關文獻的采集與查詢,不斷改正自己對頻率計的錯誤理解,在最后的程序實現與仿真實現的過程中完成了數字頻率計的功能實現。在設計的過程中最重要的是,做設計的時候要保持清晰的思路,要有邏輯性,對程序的模塊進行每一步的推敲,也要自己動手去實現功能,才能完成最后的設計。參考文獻[1]孫菁主編.STM32實戰通關初級篇[M].北京:北京理工大學出版社,2018.05.[2]正點原子.STM32F1開發指南(精英版)-庫函數版本_V1.1[EB/OL]./thread13912-1-1.html,2019-11-20.[3]張洋等編著.原子教你玩STM32庫函數版[M].北京:北京航空航天大學出版社,2015.11.[4]林虹.突出雙創能力培養的應用型特色課程教學改革探索——以“單片機原理及應用”課程為例[J].工業和信息化教育,2019(10):33-38.[5]潘宇.基于FPGA和STM32的脈寬頻率測量方法[J].實驗室研究與探索,2017,36(2):83-86[6]王肖君.超高精度頻率計的研究與設計[碩士學位論文].華中師范大學,武漢,2018[7]沈亞鈞.基于單片機的數字頻率計設計.山西電子技術,2012(05):14-16[8]林建英,伍勇.數字頻率計在綜合設計實驗教學中的多方案實現.實驗科學與技術,2005(04):62-64,69附錄A系統電路和相關附圖系統電路圖系統PCB圖實物照片圖附錄B全部程序清單#ifndef__CM3_CORE_H__#define__CM3_CORE_H__#ifdef__cplusplusextern"C"{#endif#define__CM3_CMSIS_VERSION_MAIN(0x01)#define__CM3_CMSIS_VERSION_SUB(0x30)#define__CM3_CMSIS_VERSION((__CM3_CMSIS_VERSION_MAIN<<16)|__CM3_CMSIS_VERSION_SUB)#define__CORTEX_M(0x03)#include<stdint.h>#ifdefined(__ICCARM__)#include<intrinsics.h>#endif#ifndef__NVIC_PRIO_BITS#define__NVIC_PRIO_BITS#endif#ifdef__cplusplus#define__Ivolatile#else#define__Ivolatileconst#endif#define__Ovolatile#define__IOvolatiletypedefstruct{__IOuint32_tISER[8];uint32_tRESERVED0[24];__IOuint32_tICER[8];uint32_tRSERVED1[24];__IOuint32_tISPR[8];uint32_tRESERVED2[24];__IOuint32_tICPR[8];uint32_tRESERVED3[24];__IOuint32_tIABR[8];uint32_tRESERVED4[56];__IOuint8_tIP[240];uint32_tRESERVED5[644];__Ouint32_tSTIR;}NVIC_Type;typedefstruct{__Iuint32_tCPUID;__IOuint32_tICSR;__IOuint32_tVTOR;__IOuint32_tAIRCR;__IOuint32_tSCR;__IOuint32_tCCR;__IOuint8_tSHP[12];__IOuint32_tSHCSR;__IOuint32_tCFSR;__IOuint32_tHFSR;__IOuint32_tDFSR;__IOuint32_tMMFAR;__IOuint32_tBFAR;__IOuint32_tAFSR;__Iuint32_tPFR[2];__Iuint32_tDFR;__Iuint32_tADR;__Iuint32_tMMFR[4];__Iuint32_tISAR[5];}SCB_Type;#defineSCB_CPUID_IMPLEMENTER_Pos24#defineSCB_CPUID_IMPLEMENTER_Msk(0xFFul<<SCB_CPUID_IMPLEMENTER_Pos)#defineSCB_CPUID_VARIANT_Pos20#defineSCB_CPUID_VARIANT_Msk(0xFul<<SCB_CPUID_VARIANT_Pos)#defineSCB_CPUID_PARTNO_Pos4#defineSCB_CPUID_PARTNO_Msk(0xFFFul<<SCB_CPUID_PARTNO_Pos)#defineSCB_CPUID_REVISION_Pos0#defineSCB_CPUID_REVISION_Msk(0xFul<<SCB_CPUID_REVISION_Pos)#defineSCB_ICSR_NMIPENDSET_Pos31#defineSCB_ICSR_NMIPENDSET_Msk(1ul<<SCB_ICSR_NMIPENDSET_Pos)#defineSCB_ICSR_PENDSVSET_Pos28#defineSCB_ICSR_PENDSVSET_Msk(1ul<<SCB_ICSR_PENDSVSET_Pos)#defineSCB_ICSR_PENDSVCLR_Pos27#defineSCB_ICSR_PENDSVCLR_Msk(1ul<<SCB_ICSR_PENDSVCLR_Pos)#defineSCB_ICSR_PENDSTSET_Pos26#defineSCB_ICSR_PENDSTSET_Msk(1ul<<SCB_ICSR_PENDSTSET_Pos)#defineSCB_ICSR_PENDSTCLR_Pos25#defineSCB_ICSR_PENDSTCLR_Msk(1ul<<SCB_ICSR_PENDSTCLR_Pos)#defineSCB_ICSR_ISRPREEMPT_Pos23#defineSCB_ICSR_ISRPREEMPT_Msk(1ul<<SCB_ICSR_ISRPREEMPT_Pos)#defineSCB_ICSR_ISRPENDING_Pos22#defineSCB_ICSR_ISRPENDING_Msk(1ul<<SCB_ICSR_ISRPENDING_Pos)/#defineSCB_ICSR_VECTPENDING_Pos12#defineSCB_ICSR_VECTPENDING_Msk(0x1FFul<<SCB_ICSR_VECTPENDING_Pos)#defineSCB_ICSR_RETTOBASE_Pos11#defineSCB_ICSR_RETTOBASE_Msk(1ul<<SCB_ICSR_RETTOBASE_Pos)#defineSCB_ICSR_VECTACTIVE_Pos0#defineSCB_ICSR_VECTACTIVE_Msk(0x1FFul<<SCB_ICSR_VECTACTIVE_Pos)#defineSCB_VTOR_TBLBASE_Pos29#defineSCB_VTOR_TBLBASE_Msk(0x1FFul<<SCB_VTOR_TBLBASE_Pos)#defineSCB_VTOR_TBLOFF_Pos7#defineSCB_VTOR_TBLOFF_Msk(0x3FFFFFul<<SCB_VTOR_TBLOFF_Pos)#defineSCB_AIRCR_VECTKEY_Pos16#defineSCB_AIRCR_VECTKEY_Msk(0xFFFFul<<SCB_AIRCR_VECTKEY_Pos)#defineSCB_AIRCR_VECTKEYSTAT_Pos16#defineSCB_AIRCR_VECTKEYSTAT_Msk(0xFFFFul<<SCB_AIRCR_VECTKEYSTAT_Pos)#defineSCB_AIRCR_ENDIANESS_Pos15#defineSCB_AIRCR_ENDIANESS_Msk(1ul<<SCB_AIRCR_ENDIANESS_Pos)#defineSCB_AIRCR_PRIGROUP_Pos8#defineSCB_AIRCR_PRIGROUP_Msk(7ul<<SCB_AIRCR_PRIGROUP_Pos)#defineSCB_AIRCR_SYSRESETREQ_Pos2#defineSCB_AIRCR_SYSRESETREQ_Msk(1ul<<SCB_AIRCR_SYSRESETREQ_Pos)#defineSCB_AIRCR_VECTCLRACTIVE_Pos1#defineSCB_AIRCR_VECTCLRACTIVE_Msk(1ul<<SCB_AIRCR_VECTCLRACTIVE_Pos)#defineSCB_AIRCR_VECTRESET_Pos0#defineSCB_AIRCR_VECTRESET_Msk(1ul<<SCB_AIRCR_VECTRESET_Pos)#defineSCB_SCR_SEVONPEND_Pos4#defineSCB_SCR_SEVONPEND_Msk(1ul<<SCB_SCR_SEVONPEND_Pos)#defineSCB_SCR_SLEEPDEEP_Pos2#defineSCB_SCR_SLEEPDEEP_Msk(1ul<<SCB_SCR_SLEEPDEEP_Pos)#defineSCB_SCR_SLEEPONEXIT_Pos1#defineSCB_SCR_SLEEPONEXIT_Msk(1ul<<SCB_SCR_SLEEPONEXIT_Pos)#defineSCB_CCR_STKALIGN_Pos9#defineSCB_CCR_STKALIGN_Msk(1ul<<SCB_CCR_STKALIGN_Pos)#defineSCB_CCR_BFHFNMIGN_Pos8#defineSCB_CCR_BFHFNMIGN_Msk(1ul<<SCB_CCR_BFHFNMIGN_Pos)#defineSCB_CCR_DIV_0_TRP_Pos4#defineSCB_CCR_DIV_0_TRP_Msk(1ul<<SCB_CCR_DIV_0_TRP_Pos)#defineSCB_CCR_UNALIGN_TRP_Pos3#defineSCB_CCR_UNALIGN_TRP_Msk(1ul<<SCB_CCR_UNALIGN_TRP_Pos)#defineSCB_CCR_USERSETMPEND_Pos1#defineSCB_CCR_USERSETMPEND_Msk(1ul<<SCB_CCR_USERSETMPEND_Pos)#defineSCB_CCR_NONBASETHRDENA_Pos0#defineSCB_CCR_NONBASETHRDENA_Msk(1ul<<SCB_CCR_NONBASETHRDENA_Pos)#defineSCB_SHCSR_USGFAULTENA_Pos18#defineSCB_SHCSR_USGFAULTENA_Msk(1ul<<SCB_SHCSR_USGFAULTENA_Pos)#defineSCB_SHCSR_BUSFAULTENA_Pos17#defineSCB_SHCSR_BUSFAULTENA_Msk(1ul<<SCB_SHCSR_BUSFAULTENA_Pos)#defineSCB_SHCSR_MEMFAULTENA_Pos16#defineSCB_SHCSR_MEMFAULTENA_Msk(1ul<<SCB_SHCSR_MEMFAULTENA_Pos)#defineSCB_SHCSR_SVCALLPENDED_Pos15#defineSCB_SHCSR_SVCALLPENDED_Msk(1ul<<SCB_SHCSR_SVCALLPENDED_Pos)#defineSCB_SHCSR_BUSFAULTPENDED_Pos14#defineSCB_SHCSR_BUSFAULTPENDED_Msk(1ul<<SCB_SHCSR_BUSFAULTPENDED_Pos)/#defineSCB_SHCSR_MEMFAULTPENDED_Pos13#defineSCB_SHCSR_MEMFAULTPENDED_Msk(1ul<<SCB_SHCSR_MEMFAULTPENDED_Pos)#defineSCB_SHCSR_USGFAULTPENDED_Pos12#defineSCB_SHCSR_USGFAULTPENDED_Msk(1ul<<SCB_SHCSR_USGFAULTPENDED_Pos)#defineSCB_SHCSR_SYSTICKACT_Pos11#defineSCB_SHCSR_SYSTICKACT_Msk(1ul<<SCB_SHCSR_SYSTICKACT_Pos)#defineSCB_SHCSR_PENDSVACT_Pos10#defineSCB_SHCSR_PENDSVACT_Msk(1ul<<SCB_SHCSR_PENDSVACT_Pos)#defineSCB_SHCSR_MONITORACT_Pos8#defineSCB_SHCSR_MONITORACT_Msk(1ul<<SCB_SHCSR_MONITORACT_Pos)#defineSCB_SHCSR_SVCALLACT_Pos7#defineSCB_SHCSR_SVCALLACT_Msk(1ul<<SCB_SHCSR_SVCALLACT_Pos)#defineSCB_SHCSR_USGFAULTACT_Pos3/*!<SCBSHCSR:USGFAULTACTPosition*/#defineSCB_SHCSR_USGFAULTACT_Msk(1ul<<SCB_SHCSR_USGFAULTACT_Pos)#defineSCB_SHCSR_BUSFAULTACT_Pos1#defineSCB_SHCSR_BUSFAULTACT_Msk(1ul<<SCB_SHCSR_BUSFAULTACT_Pos)#defineSCB_SHCSR_MEMFAULTACT_Pos0#defineSCB_SHCSR_MEMFAULTACT_Msk(1ul<<SCB_SHCSR_MEMFAULTACT_Pos)#defineSCB_CFSR_USGFAULTSR_Pos16#defineSCB_CFSR_USGFAULTSR_Msk(0xFFFFul<<SCB_CFSR_USGFAULTSR_Pos)#defineSCB_CFSR_BUSFAULTSR_Pos8#defineSCB_CFSR_BUSFAULTSR_Msk(0xFFul<<SCB_CFSR_BUSFAULTSR_Pos)#defineSCB_CFSR_MEMFAULTSR_Pos0#defineSCB_CFSR_MEMFAULTSR_Msk(0xFFul<<SCB_CFSR_MEMFAULTSR_Pos)#defineSCB_HFSR_DEBUGEVT_Pos31#defineSCB_HFSR_DEBUGEVT_Msk(1ul<<SCB_HFSR_DEBUGEVT_Pos)#defineSCB_HFSR_FORCED_Pos30#defineSCB_HFSR_FORCED_Msk(1ul<<SCB_HFSR_FORCED_Pos)#defineSCB_HFSR_VECTTBL_Pos1#defineSCB_HFSR_VECTTBL_Msk(1ul<<SCB_HFSR_VECTTBL_Pos)#defineSCB_DFSR_EXTERNAL_Pos4#defineSCB_DFSR_EXTERNAL_Msk(1ul<<SCB_DFSR_EXTERNAL_Pos)#defineSCB_DFSR_VCATCH_Pos3#defineSCB_DFSR_VCATCH_Msk(1ul<<SCB_DFSR_VCATCH_Pos)#defineSCB_DFSR_DWTTRAP_Pos2#defineSCB_DFSR_DWTTRAP_Msk(1ul<<SCB_DFSR_DWTTRAP_Pos)#defineSCB_DFSR_BKPT_Pos1#defineSCB_DFSR_BKPT_Msk(1ul<<SCB_DFSR_BKPT_Pos)#defineSCB_DFSR_HALTED_Pos0#defineSCB_DFSR_HALTED_Msk(1ul<<SCB_DFSR_HALTED_Pos)typedefstruct{__IOuint32_tCTRL;__IOuint32_tLOAD;__IOuint32_tVAL;__Iuint32_tCALIB;}SysTick_Type;#defineSysTick_CTRL_COUNTFLAG_Pos16#defineSysTick_CTRL_COUNTFLAG_Msk(1ul<<SysTick_CTRL_COUNTFLAG_Pos)#defineSysTick_CTRL_CLKSOURCE_Pos2#defineSysTick_CTRL_CLKSOURCE_Msk(1ul<<SysTick_CTRL_CLKSOURCE_Pos)#defineSysTick_CTRL_TICKINT_Pos1#defineSysTick_CTRL_TICKINT_Msk(1ul<<SysTick_CTRL_TICKINT_Pos)#defineSysTick_CTRL_ENABLE_Pos0#defineSysTick_CTRL_ENABLE_Msk(1ul<<SysTick_CTRL_ENABLE_Pos)#defineSysTick_LOAD_RELOAD_Pos0#defineSysTick_LOAD_RELOAD_Msk(0xFFFFFFul<<SysTick_LOAD_RELOAD_Pos)#defineSysTick_VAL_CURRENT_Pos0#defineSysTick_VAL_CURRENT_Msk(0xFFFFFFul<<SysTick_VAL_CURRENT_Pos)#defineSysTick_CALIB_NOREF_Pos31#defineSysTick_CALIB_NOREF_Msk(1ul<<SysTick_CALIB_NOREF_Pos)#defineSysTick_CALIB_SKEW_Pos30#defineSysTick_CALIB_SKEW_Msk(1ul<<SysTick_CALIB_SKEW_Pos)#defineSysTick_CALIB_TENMS_Pos0#defineSysTick_CALIB_TENMS_Msk(0xFFFFFFul<<SysTick_VAL_CURRENT_Pos)typedefstruct{__Ounion{__Ouint8_tu8;__Ouint16_tu16;__Ouint32_tu32;}PORT[32];uint32_tRESERVED0[864];__IOuint32_tTER;uint32_tRESERVED1[15];__IOuint32_tTPR;uint32_tRESERVED2[15];__IOuint32_tTCR;uint32_tRESERVED3[29];__IOuint32_tIWR;__IOuint32_tIRR;__IOuint32_tIMCR;__IOuint32_tLAR;__IOuint32_tLSR;uint32_tRESERVED5[6];__Iuint32_tPID4;__Iuint32_tPID5;__Iuint32_tPID6;__Iuint32_tPID7;__Iuint32_tPID0;__Iuint32_tPID1;__Iuint32_tPID2;__Iuint32_tPID3;__Iuint32_tCID0;__Iuint32_tCID1;__Iuint32_tCID2;__Iuint32_tCID3;}ITM_Type;#defineITM_TPR_PRIVMASK_Pos0#defineITM_TPR_PRIVMASK_Msk(0xFul<<ITM_TPR_PRIVMASK_Pos)#defineITM_TCR_BUSY_Pos23#defineITM_TCR_BUSY_Msk(1ul<<ITM_TCR_BUSY_Pos)#defineITM_TCR_ATBID_Pos16#defineITM_TCR_ATBID_Msk(0x7Ful<<ITM_TCR_ATBID_Pos)#defineITM_TCR_TSPrescale_Msk(3ul<<ITM_TCR_TSPrescale_Pos)#defineITM_TCR_SWOENA_Pos4#defineITM_TCR_SWOENA_Msk(1ul<<ITM_TCR_SWOENA_Pos)#defineITM_TCR_DWTENA_Pos3#defineITM_TCR_DWTENA_Msk(1ul<<ITM_TCR_DWTENA_Pos)#defineITM_TCR_SYNCENA_Pos2#defineITM_TCR_SYNCENA_Msk(1ul<<ITM_TCR_SYNCENA_Pos)#defineITM_TCR_TSENA_Pos1#defineITM_TCR_TSENA_Msk(1ul<<ITM_TCR_TSENA_Pos)#defineITM_TCR_ITMENA_Pos0#defineITM_TCR_ITMENA_Msk(1ul<<ITM_TCR_ITMENA_Pos)#defineITM_IWR_ATVALIDM_Pos0#defineITM_IWR_ATVALIDM_Msk(1ul<<ITM_IWR_ATVALIDM_Pos)#defineITM_IRR_ATREADYM_Pos0#defineITM_IRR_ATREADYM_Msk(1ul<<ITM_IRR_ATREADYM_Pos)#defineITM_IMCR_INTEGRATION_Pos0#defineITM_IMCR_INTEGRATION_Msk(1ul<<ITM_IMCR_INTEGRATION_Pos)#defineITM_LSR_ByteAcc_Pos2#defineITM_LSR_ByteAcc_Msk(1ul<<ITM_LSR_ByteAcc_Pos)#defineITM_LSR_Access_Pos1#defineITM_LSR_Access_Msk(1ul<<ITM_LSR_Access_Pos)#defineITM_LSR_Present_Pos0#defineITM_LSR_Present_Msk(1ul<<ITM_LSR_Present_Pos)typedefstruct{uint32_tRESERVED0;__Iuint32_tICTR;#if((defined__CM3_REV)&&(__CM3_REV>=0x200))__IOuint32_tACTLR;#elseuint32_tRESERVED1;#endif}InterruptType_Type;#defineInterruptType_ICTR_INTLINESNUM_Pos0#defineInterruptType_ICTR_INTLINESNUM_Msk(0x1Ful<<InterruptType_ICTR_INTLINESNUM_Pos)#defineInterruptType_ACTLR_DISFOLD_Pos2#defineInterruptType_ACTLR_DISFOLD_Msk(1ul<<InterruptType_ACTLR_DISFOLD_Pos)#defineInterruptType_ACTLR_DISDEFWBUF_Pos1#defineInterruptType_ACTLR_DISDEFWBUF_Msk(1ul<<InterruptType_ACTLR_DISDEFWBUF_Pos)#defineInterruptType_ACTLR_DISMCYCINT_Pos0#defineInterruptType_ACTLR_DISMCYCINT_Msk(1ul<<InterruptType_ACTLR_DISMCYCINT_Pos)LCD1602實現代碼:軟件實現:#include<pic.h>#defineucharunsignedchar#defineuintunsignedint#defineDBPORTD//定義端口#definersRB0#defineeRB1_CONFIG(0x3B31);constu

溫馨提示

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

評論

0/150

提交評論