三天入門m4kinetisv最適合初學(xué)者Kinetis教程_第1頁
三天入門m4kinetisv最適合初學(xué)者Kinetis教程_第2頁
三天入門m4kinetisv最適合初學(xué)者Kinetis教程_第3頁
三天入門m4kinetisv最適合初學(xué)者Kinetis教程_第4頁
三天入門m4kinetisv最適合初學(xué)者Kinetis教程_第5頁
已閱讀5頁,還剩405頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

三天入門Cortex-M4——Kinetis系 三天入門Cortex-M4——Kinetis系隨著技術(shù)的發(fā)展,單片機(jī)型號(hào)越來越繁多,入門的難度也逐漸加多,學(xué)習(xí)周期自然不斷延長。為了讓初學(xué)者快速入門,減少學(xué)習(xí)時(shí)間,尤其是為了那些參加智能車比KetsKets開發(fā)板的。力求大大減少初學(xué)者的學(xué)習(xí)時(shí)間。野火Kinetis開發(fā),主要有IAR的使用、Kinetis啟動(dòng)流程講解、野火K60庫的調(diào)用三個(gè)部分組成。我們不再詳細(xì)講解寄存器,而且推薦直接調(diào)用我少的后顧之憂,可以加快的開發(fā)速度。目前,單片機(jī)型號(hào)如此之多,而產(chǎn)品的開發(fā)所允許給我們的時(shí)間越來越少,我們完全沒有必要深入研究寄存器設(shè)置,就算你能把寄存器背得滾瓜爛熟,過段時(shí)間不去接觸,還是沒法記住的?,F(xiàn)在的單片機(jī)開發(fā),工程師往往都用 的固件庫來進(jìn)行開發(fā),而不靠自己重新建立自己的函數(shù)庫進(jìn)行開發(fā)。例如T公司推出的ST庫,讓你可以完全不需要考慮底層開發(fā)而直接開發(fā)自己的。飛思卡爾公司,在這方便確實(shí)讓到失望這也是野火嵌入式 要建立自己的野火Kies庫的原因。野火K60庫的函數(shù)接口,盡量追求簡潔明了、通俗易懂,力求初學(xué)者見其名就會(huì)用。目前提供了6Kes板實(shí)驗(yàn)例程想快速上手K60單片機(jī)嗎?野火KinetisK60庫,是你最好的選我們 是:三天入門~1三天入門Cortex-M4——Kinetis系 我們喊出這樣 并不是吹的,已經(jīng)有兩位大三參加智能車的朋友(同一個(gè)隊(duì)在使用我們的與k60庫三天時(shí)間內(nèi)就能xs128上的0v7725驅(qū)動(dòng)程序和舵機(jī)控制程序移植到Kinetis上跑起來;一位大二的師弟,不到一天的時(shí)間就從入門到搞定頭ov7725和液晶LCD的移植??你會(huì)是下一位嗎?只要我們敢拼,一切皆有可能!?。othingisimpossible?。。∮捎趥€(gè)人能力及時(shí)間所限,出錯(cuò)之處,在所難免,歡迎各 錯(cuò)誤及提出建議m——野火嵌入式開2012-3-們Technical~2 三天入門Cortex-M4——Kinetis系 三天入門Cortex-M4——Kinetis系 前 Kinetis的啟動(dòng)分析(初學(xué)者大概瀏覽一下即可 初步入門:初始化函數(shù)啟動(dòng)執(zhí)行順 逐步提高:ROM、RAM啟動(dòng)工作原理、ICF文件講 IAR的使 安裝 建立IAR工 創(chuàng)建工程文 添加GPIO驅(qū)動(dòng)和點(diǎn)亮 IAR工程選項(xiàng)設(shè) 快速建IAR工 IAR使 功能介 工作區(qū)工程的選定與切 通過 并調(diào) 使用軟件仿真調(diào) IAR界面風(fēng)格設(shè) 野火 板實(shí)驗(yàn)例程列 野火K60庫的使 前 快速開發(fā)指 快速入門:了解野火Kinetis工 中斷函數(shù)的編寫方 重要變量、函數(shù)、宏定義一覽 安全檢 GPIO模 快速入門:GPIO庫使用方 GPIO測試?yán)?LED模 快速入門:LED庫使用方 LED綜合測試?yán)?~3三天入門Cortex-M4——Kinetis系 EXTI外部GPIO中斷例 快速入門:EXTI庫使用方 EXTI綜合測試?yán)?UART模 快速入門:UART庫使用方 UART綜合測試?yán)?ADC模 快速入門:ADC庫使用方 ADC綜合測試?yán)?DAC模 快速入門:DAC庫使用方 DAC綜合測試?yán)? 模 快速入門 庫使用方 綜合測試?yán)?FTM輸入捕捉模 快速入門:FTM輸入捕捉庫使用方 FTM輸入捕捉中斷測 PIT定時(shí)中斷模 快速入門:PIT定時(shí)中斷庫使用方 PIT定時(shí)中斷測試?yán)?、輸入捕捉、PIT中斷綜合測 I2C模 快速入門:I2C通信庫使用方 I2C通信實(shí)驗(yàn)測 lptmr低功耗定時(shí)器模 快速入門:lptmr低功耗定時(shí)器庫使用方 lptmr低功耗定時(shí)器測試?yán)?DMA模 快速入門:DMA傳輸端口數(shù) DMA測試?yán)?MCG模塊超 快速入門:MCG庫使用方 快速入門:配置頻 DSP數(shù)字信號(hào)處理單 CMSIS的介紹及其幫助文檔的查找方 DSP常用函數(shù)列 ~4三天入門Cortex-M4——Kinetis系 DSP測試?yán)?野火Kinetis開發(fā)板問題 資料在哪里可 到?(IAR、Jlink驅(qū)動(dòng) jlink供電到開發(fā)板 關(guān)于Kinetis時(shí) IAR報(bào)錯(cuò)找不到頭文 問 printf使用方 Kinetis單片機(jī)的IO口支不支持5V耐壓 Kinetis最多可以輸出多少個(gè)頻率不同 脈沖波 kinetis捕捉 脈沖計(jì)數(shù)方 ADC引腳中帶a、b表示的意 不帶有浮點(diǎn)單元能進(jìn)行浮點(diǎn)運(yùn)算嗎 ~5 三天入門Cortex-M4——Kinetis系 Kinetis的啟動(dòng)分析(初學(xué)者大概瀏覽一下即可初步入門:初始化函數(shù)啟動(dòng)執(zhí)行順序上電復(fù) 中斷向量①

中斷向量表在vectors.c里定義,在vectors.h文件里前兩BOOT_STACK_ADDRESSReset_Handler(自帶例程startup),第一個(gè)為起始SP棧指針、第二個(gè)為復(fù)位中斷Reset_Handler函數(shù)。

crt0.s里用匯SECTION.noinit:EXPORTReset_Handler;初始化寄存 iimport ;調(diào)用C語言編寫的start函

start.c文件里定義,精簡后的void{wdog_disable();//關(guān)閉看門 數(shù)據(jù)段、中斷向量表到sysinit();//時(shí)鐘初始化 /**main函數(shù)**/while(1);//避免停止運(yùn)行}main④

段、以ramfunc 到RAM區(qū)(對(duì)flash操作的函數(shù)

voidsysinit{core_clk_mhz=pll_init(MCG_CLK_MHZ);trace_clk_init();//使能時(shí)鐘,用于調(diào)試fb_clk_init();//FlexBus時(shí)鐘初始化uart_init(FIRE_PORT,//printf函數(shù)所用到

}~6三天入門Cortex-M4——Kinetis系

初始化的整體 關(guān)閉看

清寄存

制中斷向量表到 動(dòng)修改中斷向量表地 為RAM里的地 分初始化數(shù) 清除RAM中初始化0的數(shù)據(jù)段把以ramfunc 子函數(shù).textrw到RAM初始化鎖相環(huán)到的串口 用戶任注:common_startup函數(shù)并沒 常量數(shù)據(jù).rodata、代碼.text。如果RAM啟動(dòng),代碼會(huì)直接編譯進(jìn)去RAM,掉電就會(huì)丟失數(shù)據(jù)。如果是ROM啟動(dòng),就會(huì)中斷向量表到RAM,設(shè)置中斷向量表地址為RAM的地址,以加快中斷響應(yīng)速度。~7 三天入門Cortex-M4——Kinetis系 逐步提高:ROM、RAM啟動(dòng)工作原理、ICF文件講ROM、RAM啟動(dòng),首先需要對(duì)器Ler如何分配內(nèi)存有一定的了解。最低內(nèi)存地址中斷向量代碼數(shù)據(jù)堆棧命令中斷向量代碼數(shù)據(jù)堆棧命令行參未初始化變量段常量段已初始化全局變量和靜態(tài)變量段.data程序運(yùn)行中由程序員調(diào)用malloc等函數(shù)來申請(qǐng)局部變局部變?cè)诤瘮?shù)內(nèi)部定義的非靜態(tài)的變量最高地inta=0;staticintb=20;char*p1;constintA=volatileconstintB={intb;staticintc=chars[]=char*p3=//.bss//代碼區(qū)//全局(靜態(tài)).datap1char*malloc(10//1020p2=(char*)strcpy(p1,17.~8火 三天入門Cortex-M4——Kinetis系 火參考原文出處 -id-那編譯到時(shí)候,編譯器是如何為這些變量數(shù)據(jù)分配地址的呢其實(shí),這就是器Lir數(shù)據(jù)分配合適的地址,這樣我們就可以不需要考慮這些內(nèi)存分布就能寫出可運(yùn)行的代編譯器對(duì)代碼進(jìn)行編譯,一般分為四個(gè)

編譯和

匯 匯編成

器Linker的配置文件都是由 在fire_Kinetis\build\configfiles文件夾下,你可以看到有很多的linker配置文件這里的文件是用來分配數(shù)據(jù)在內(nèi)存中的位置,配置ROM、RAM啟動(dòng),linker根據(jù)這些文件來為Kinetics4G的虛擬尋址空間地址。如果把代碼部分編譯進(jìn)RAM,那就是RAM啟動(dòng);如果把代碼數(shù)據(jù)編譯進(jìn)去ROM,那就是ROM啟動(dòng)(flash啟動(dòng))。不同的型號(hào),flash內(nèi)存大小不一樣,所以配置Linker文件也會(huì)不一樣,以為例~9三天入門Cortex-M4——Kinetis系 野火Kinetis 板自帶為MK60DN512,512KB的Programflash大小,128KB的SRAM大小,沒有FlexNVM和FlexRAM。K60的4G虛擬尋址空間就是按照內(nèi)存空間的映射圖來進(jìn)行配~10三天入門Cortex-M4——Kinetis系 如果要RAM啟動(dòng),我們要把代碼編譯進(jìn)SRAM_L,定義中斷向量表可以打開fire_RAM_K60N512.icf這個(gè)文件(用記事本打開就行),這個(gè)配置文件是參考128KB_Ram.icf來重新修改和添加了注釋。的配置文件寫得真的思路太亂了,如果你僅僅用ICF編輯軟件來配置的配置文件,是非常容易出錯(cuò)的!你必須要用ICF配置好后,還要打開配置文件來修改。野火已經(jīng)對(duì)配置文件進(jìn)行修改,在里面添加了很多注/*###ICF###SectionhandledbyICFeditor,don'ttouch!/*-Editorannotationfile-/*

define =define define = define define

= define define /****EndofICFeditorsection./****上邊是由ICF編輯,下面是由我們手動(dòng)配置****/ Kinetis的SRAM是分成兩塊的。define ;//SRAM是分成兩塊的,RAM2SRAM_U,RAM為define = -

ICFEDIT_region_RAM_start;defineexported VECTOR_TABLE ICFEDIT_intvec_start

//代碼編譯進(jìn)ROM,則 ;RAM, defineexported VECTORRAM ICFEDITregionRAM //前面RAMRAMUserVector VECTOR_TABLE的數(shù) defineexported BOOT_STACK_ADDRESS -/*決定代碼編譯的地址 defineexported code ICFEDITintvec +//代碼編譯進(jìn)ROM, +0x410 +0x410,+0x410,是前面的留給Vectordefinememorymemwithsize defineregionROM = ICFEDITregionROM ICFEDIT_region_ROM_enddefineregion = ICFEDIT_region_RAM_end

| region_RAM2_end~11三天入門Cortex-M4——Kinetis系 defineblockCSTACK withalignment=8,size=defineblock withalignment=8,size//手動(dòng)初始common_startup完

//堆,8字節(jié)對(duì)//棧,8字節(jié)對(duì)initializemanually{readwrite}; //未初始化數(shù)據(jù).bssinitializemanually{section.data}; //已初始化數(shù)據(jù)initializemanually{section.textrw donotinitialize{section.noinit defineblockCodeRelocate{section.textrw_initdefineblockCodeRelocateRamsectiontextrw placeataddressmem: {vec//vectors.c中設(shè)置#pragmalocationintvec,告訴編譯器,這個(gè)是中斷向量表,編譯進(jìn)去.noinit段放在代碼開placeataddressmem: {readonlysection.noinit//crt0.s中設(shè)置了復(fù)位中斷函數(shù)為SECTIONnoinitCODE,即把代碼編譯編譯進(jìn)去RAMplacein {readonly,blockCodeRelocate//把代碼編譯進(jìn)去RAM(調(diào)試用,掉電丟失,非調(diào)試,則設(shè)為placein {readwrite,block SP,把0x 內(nèi)容給PC。斷,用RAM的中斷向量表Linker根據(jù)icf配置文件來進(jìn)行分配內(nèi)

中斷向量代中斷向量代碼數(shù)據(jù)堆棧命令行參ROMBootloader中斷向量RAMBootloaderRAMBootloader中斷向量RAM配置寄存堆棧~12三天入門Cortex-M4——Kinetis系 如果是ROM啟動(dòng)(flash啟動(dòng)/*###ICF###SectionhandledbyICFeditor,don'ttouch!/*-Editorannotationfile-

/* _0.xml"define = define =define = :P-flashk256kD-flash :P-flashkdefine =//前面0x410RAM留給RAMUserVectorTabledefine ICFEDITregionRAM = define define =/****EndofICFeditorsection.###ICF###*/19./****ICF編輯,下面是由我們手動(dòng)配置define = define = ICFEDIT_region_RAM_startdefineexported VECTOR_TABLE ICFEDIT_intvec_start//代碼編譯進(jìn)ROM,則 ;RAM, defineexported VECTOR_RAM ICFEDIT_region_RAM_start//RAM留給RAMUserVectorTable,即這里的設(shè)置。所以減

VECTOR_TABLE的數(shù)據(jù) defineexported BOOT_STACK_ADDRESS -//0x2000FFF8;/*決定代碼編譯的地址defineexported +//+0x410,是前面的留給Vectormemorymemwithsize=region ICFEDIT_region_ROM_enddefineregion +0x410 ICFEDIT_region_RAM_end|

region_RAM2_enddefineblock withalignment=8,size 51. blockwithalignment=8,size=//common_startup完

initializemanuallyreadwrite //未初始化數(shù)據(jù)initializemanuallysection

initializemanually{section.textrw};

58.donotinitializesectionnoinit defineblockCodeRelocate{section.textrwinitdefineblockCodeRelocateRam{section.textrw//把CodeRelocate代碼 到RAM中的CodeRelocateRam(對(duì)flash操作的函數(shù)必須這樣)placeataddressmem: {vec//vectors.c中設(shè)置#pragmalocationintvec",告訴編譯器,這個(gè)是中斷向量表,編譯進(jìn)去.intvecplaceataddressmem: {readonlysection.noinit野火嵌入式開發(fā)工作 ~13火三天入門Cortex-M4——Kinetis系 火//crt0.sReset_Handler為SECTIONnoinit//Reset_Handler編譯進(jìn)code_startplacein {readonly,blockCodeRelocate//把代碼編譯進(jìn)去ROM調(diào)試用,非調(diào)試,則設(shè)為placeinRAM {readwrite,blockblockCSTACK,blockHEAP

代碼編譯進(jìn)ROMLinker根據(jù)icf配置文件來進(jìn)行分配內(nèi)

到RAM,以 斷就會(huì)RAM的中斷向量ROMBootloader中斷向量中斷向量代碼數(shù)據(jù)命令行參RAMBootloaderRAMBootloader中斷向量RAM配置寄存Code.bss和堆棧0x1FFF-前面的內(nèi)容,不知道大家是否都看懂呢?熟悉單片機(jī)的內(nèi)存分配,是每一個(gè)電子軟件工程師所必備的。如果對(duì)單片機(jī)的內(nèi)存分配都不了解,那就算會(huì)寫單片機(jī)的驅(qū)動(dòng)程序,也難以保證程序的質(zhì)量。那在IAR里,怎么知道編譯生成的文件的內(nèi)存圖?在工程選項(xiàng)里,設(shè)置生成mapfile就行:~14三天入門Cortex-M4——Kinetis系 設(shè)置好,編譯后,在fire_Kinetis\build\xxx_demo\xxx模式\List文件夾下就會(huì)有.map文件。 這里的內(nèi)容,就是ICF配置~15火 三天入門Cortex-M4——Kinetis系 火那什么是ICF編輯器呢呵呵,在工程名里右鍵——Options——

ICF編輯器,可以在里面設(shè)~16三天入門Cortex-M4——Kinetis系 ~17 三天入門Cortex-M4——Kinetis系 IAR的使野火推薦的是直接在野火提供的K60庫模版上添加 重建工程,但學(xué)會(huì)自己建立工程是必須的,這里給大家詳解建立IAR工程的步驟。一 安裝軟 的IARforARM為v6.30,支持 的Kinetics系列 地址 /folder/fautzfbt里的CD-EWARM-6301-二 安裝IAR詳細(xì)過后解壓文件,打 ,運(yùn)行安裝文件~18三天入門Cortex-M4——Kinetis系 選擇安裝IAREmbedded~19三天入門Cortex-M4——Kinetis系 選擇同意,然后點(diǎn)擊~20三天入門Cortex-M4——Kinetis系 需要打開軟 ,找 機(jī)文件,并運(yùn)行它按下任意鍵,會(huì)自動(dòng)打開license.txt文件,并提示:搜索"EWARM",找到所行的key~21三天入門Cortex-M4——Kinetis系 key上一行的Installserial即為我們這里所需要的Next后,填入key所在License~22三天入門Cortex-M4——Kinetis系 包括#號(hào)哦Next后,根據(jù)自己情況選擇安裝路徑設(shè)置「開始」菜單文件夾,還是繼續(xù)~23三天入門Cortex-M4——Kinetis系 經(jīng)過漫長的等待噔噔噔噔??華麗麗地按個(gè)finish結(jié)束安裝~24三天入門Cortex-M4——Kinetis系 運(yùn)行IAR,語言選擇,按OK結(jié)IAR的編程界面~25三天入門Cortex-M4——Kinetis系 相對(duì)于KeilForARM、CodeWarrior而言,IAR forARM的編程界面是最簡單的,~26 三天入門Cortex-M4——Kinetis系 三 安裝仿真器驅(qū)又換會(huì)原來的安裝導(dǎo)航界面:選擇Install野火Kinetics開發(fā)板,選擇了用jlink作為仿真調(diào)試器,因此這里選擇jlink運(yùn)行安裝文~27三天入門Cortex-M4——Kinetis系 運(yùn)行后,會(huì)自動(dòng)安裝驅(qū)動(dòng),不會(huì)有其他另外,為了可以使用擦 等功能,我們可以選擇用segger公司的j-~28三天入門Cortex-M4——Kinetis系 地址:SetupJLinkARM安裝時(shí),一路狂Next就行安裝后,在開始菜單里找到J-FlashARM,運(yùn)行它即~29三天入門Cortex-M4——Kinetis系 建立IAR工程創(chuàng)建工程文件一 準(zhǔn)備材在建立IAR工程前,需要 的Kinetis例程,提取里面的配置文件和地址:KINETIS512解壓后,打 ,會(huì)看到兩個(gè)文件二 建立IAR工程過在這里,我們以GPIO為例子,點(diǎn)亮LED,一步步操作,講解建立工程的詳細(xì)程建立工作空File——New——~30三天入門Cortex-M4——Kinetis系 建立工 里選擇Project——CreateNew~31三天入門Cortex-M4——Kinetis系 接著在彈出來 框里選擇空的工程,點(diǎn)擊確~32三天入門Cortex-M4——Kinetis系 接著彈出選擇保存工程 框。由于我們還沒建保存工程的文件夾,我們就接 框里新建:右鍵——新建——文件夾——重命名為打開新建的fire_Kinetis文件夾,再建一個(gè)build文件夾,build文件里再建一個(gè)gpio_demo文件夾,把工程文件保存在gpio_demo文件夾里面,工程文件名為:fire_gpio_demo,文件結(jié)構(gòu)如下圖:~33三天入門Cortex-M4——Kinetis系 保存后,進(jìn)入IAR界面,別忘了工作區(qū)還沒有保存哦。在菜單欄里找到圖 點(diǎn)擊保存全部文件,把工作區(qū)文件保存在fire_Kinetis文件夾下,名字為fire_Kinetis~34三天入門Cortex-M4——Kinetis系 這樣,一個(gè)空的IAR工程骨架就建立完畢…往工程添加 自帶函數(shù)例程文件夾下的srcfire_Kinetis文件夾下 例程文件夾KINETIS512_SC\build\iar下的文件iar.h和文件夾configfiles 到fire_Kinetis\build文件夾下。呵呵,怎么會(huì)多了個(gè)settings呢?這個(gè)是保存IAR自動(dòng)創(chuàng)建的設(shè)置文件,添加分組,方便管理代返回IAR~35三天入門Cortex-M4——Kinetis系 在彈出來 框里填入“app”,這樣就添加了一個(gè)app分組如此繼續(xù)添加其他分組:common、cpu、這些組有什么用呢?現(xiàn)在就往里面添加源代碼文件,添加后,你就開始明把代碼文件放進(jìn)分fire_Kinetis\src\common文件夾下的*.c文件全部添加到common分組里~36三天入門Cortex-M4——Kinetis系 選中所有的*.c文件。如果你想把頭文件也放在工程里,也可以把*.h文件選中~37添加后

三天入門Cortex-M4——Kinetis系 common里的都 提供的通用庫再把fire_Kinetis\src\cpu文件夾*.ccrt0.s文件添加到cpu分組里別漏了還有crt0.s哦。crt0.s是啟動(dòng)文件,單片機(jī)上電復(fù)位后,就會(huì)執(zhí)行里面的再把fire_Kinetis\src\drivers文件夾下的lptmrmcg、uart、wdog子文件*.c文件添加進(jìn)工程了~38三天入門Cortex-M4——Kinetis系 添加后再在fire_Kinetis\src\projects下創(chuàng)建fire_gpio_demo文件夾,在fire_gpio_demo文件下繼續(xù)創(chuàng)建main.c、isr.cisr.h文件,往app分組添加main.c、isr.c~39三天入門Cortex-M4——Kinetis系 然后在main.c里寫個(gè)空的main函數(shù)voidvoid{21.在isr.h文件里添加一下代2222/*******************CCOPYRIGHT2011:::*#ifndef#defineISR_H *先取消默認(rèn)的中斷向量元素宏定 #undef*在重新定義到自己編寫的中斷函 #define ~40*

三天入門Cortex-M4——Kinetis系 #defineVECTOR_00344.#defineVECTOR_00344.45.#define#defineVECTOR_00347.#endif//49/*isr.h結(jié)尾中斷服務(wù)函數(shù)。注意:這個(gè)頭文件只能在c.ceco.eco.c"#include#includevectors.h//關(guān)于中斷函數(shù)的編程和isr.h的作用,可以看:中斷函數(shù)的編寫方最后,在fire_Kinetis\src\platforms文件夾下, 一份k60_tower.h文件出來,命名為k60_fire.h:在fire_Kinetis\src\common\common.h里找到下面的代52.52.~41三天入門Cortex-M4——Kinetis系 *Includetheplatformspecificheader#if#include#elif#include#include#elif#include#error"Novalidplatform注釋掉,并插入#includek60_fire.h",*Includetheplatformspecificheader#if#include"k40#elif(defined(TWR#elif#include#error"Novalidplatform//#include#include另外,DEBUG_PRINT在fire_Kinetis\src\common\common.hfire_Kinetis\src\platforms\k60_fire.h里都有定義,應(yīng)該注釋掉k60_fire.h里的定/*/*Globaldefinestouseforallboardsfire_Kinetis\src\common\common.h添加數(shù)據(jù)類型的typedef2. 3. 4. 6. 7.short8.long~42 三天入門Cortex-M4——Kinetis系 添加GPIO驅(qū)動(dòng)和點(diǎn)亮Kinetis的編程步驟:開啟時(shí)鐘、復(fù)用管腳、設(shè)置頻率、設(shè)置功能fire_Kinetis\src\drivers文件夾下建立gpio文件夾,再在gpio文件夾建gpio.cgpio.c添加進(jìn)工程分組的drivers里,在gpio.c里添加如下gpio的驅(qū)動(dòng)代碼1./*****************CCOPYRIGHT2011*文件 *描 **實(shí)驗(yàn)平 *庫版 *嵌入系 * *作 10.*淘寶 11.* /bbs/bbslist.jsp?bbs12.#include#includeE_PTR,PTD_BASE_PTR,PTE_BASE_PTR};//定義五個(gè)指針數(shù)組保存GPIOx的地址volatilestructPORT_MemMap21.22 ***26.*參數(shù)說明 輸出初始狀態(tài),0=低電平,1=(對(duì)輸入無效**修改時(shí)間:2012-1- * 注33.voidgpio_init(PORTxportx,u8n,IOcfg,u8{ASSERTn32u)&&data2u~43

三天入門Cortex-M4——Kinetis系 //PORTx_PCRx,每個(gè)端口都有個(gè)寄存器if(cfg=={GPIO_PDDR_REG(GPIOx[portx| if(data=={GPIOPDORREG(GPIOx[portx|1<<n {GPIOPDORREG(GPIOx[portx&~(1<<n);//}} GPIOPDDRREG(GPIOx[portx])& 56.58. ****參數(shù)說明 **修改時(shí)間:2012-1- * 注voidgpio_set(PORTxportx,u8n,u8{ASSERTn32u)&&data2uif(data==GPIOPDORREG(GPIOx[portx])| GPIOPDORREG(GPIOx[portx])& 78.在gpio.h里添加變量和函數(shù) #ifndefGPIO_H#defineGPIO_Htypedefenum ~4411.

三天入門Cortex-M4——Kinetis系 typedefenum { #defineHIGH#define externvolatilestructGPIO_MemMapexternvolatilestructPORT_MemMap*PORTX[5];25 gpio_init(PORTxu8n,IO,u8 26.void (PORTx,u8n, u8data); 28.然后main#include#includelptmr.h"http://GPIOLED

* 注:野火Kinetis開發(fā)板的LED0~3,分別接PTD15~PTD12,低電平點(diǎn)voidgpioinit(PORTD,15,GPO,HIGH);//PTD15,LED0timedelayms(500);

//設(shè)置PTD15輸出低電平即LED0//設(shè)置PTD15輸出高電平即LED0~45O(∩_∩)o哈哈,添加好文件了,現(xiàn)在需要配置工程了,不然編~45三天入門Cortex-M4——Kinetis系 IAR工程選項(xiàng)設(shè)IAR的工程選項(xiàng)分成兩個(gè):Debug模式Release模式,一個(gè)是調(diào)試模式,一這樣,在調(diào)試的時(shí)候,我們選擇Debug;發(fā)布產(chǎn)品或者比賽的時(shí)候,我們選擇Release,切換起來非常方便。 有時(shí)會(huì)發(fā)現(xiàn)他們并沒有Debug模式和Release模式,取而代之的是ROM模式、RAM模式、flash模式等等,這些都是可以自行修改的:ProjectEditConfigurations來的界面里選擇:new后~46三天入門Cortex-M4——Kinetis系 注意,從Debug模式切換到Release模式,會(huì)經(jīng)常出現(xiàn)各種異常的編譯錯(cuò)誤或者運(yùn)行異常,這是因?yàn)镽elease有更嚴(yán)格的檢查,詳細(xì)情況,可看:在IAR的Workspace窗口頂部的下拉菜單中有兩個(gè)選項(xiàng).pdf網(wǎng)上共享的工程模版,改名字后的,他們大部分都是基于Debug模式的,就是怕用戶編Debug模式的優(yōu)化效果不如Release模式,如果我們的程序編程是沒Debug,就不怕把模式調(diào)到Release模式,只不過是在Debug模式下,會(huì)隱藏了一些錯(cuò)誤而讓我們覺得編譯通過了。也有時(shí),debug模式里會(huì)添加一些延時(shí),所以有時(shí)候在Release模式下延時(shí)。就用ebug模式來講解:在工作區(qū)程名上:右鍵——~47三天入門Cortex-M4——Kinetis系 然后就會(huì)看到選項(xiàng)框~48三天入門Cortex-M4——Kinetis系 記住,是在工程名里右鍵,不要在分組名里右鍵哦,不然彈出 框不是設(shè)工程的如果選擇了分組里的選項(xiàng),則顯~49三天入門Cortex-M4——Kinetis系 好了,現(xiàn)在言歸正傳,開始配置工程選項(xiàng)了GeneralOptions—— 設(shè) 型~50三天入門Cortex-M4——Kinetis系 野火Kinetis開發(fā)板選擇的默 為在這里,我們選擇~51三天入門Cortex-M4——Kinetis系 GeneralOptions—— ~52三天入門Cortex-M4——Kinetis系 我們編譯工 到單片機(jī)上的,當(dāng)然選擇C/C++Compiler——Optimizations優(yōu)化等級(jí)在Debug模式里,這里設(shè)為不優(yōu)化,便于調(diào)試方便。事實(shí)上,在調(diào)試的時(shí)候,如Release模式里,可以選擇最大優(yōu)化,但在發(fā)布前,需要對(duì)優(yōu)化后的效果進(jìn)行~53三天入門Cortex-M4——Kinetis系 C/C++Compiler——PreprocessorAdditionalincludedirectories:(oneperline)文本編輯框里填在這里在的文件夾,預(yù)處理器編譯的時(shí)候,就會(huì)搜索這些文件夾, 表示Definedsymbols:(oneperline)文本編輯框里填入~54

三天入門Cortex-M4——Kinetis系 這里是用來宏定義變量,對(duì)整個(gè)工程有效,相當(dāng)于在頭文件#define#define#define#define注意:如果在Definedsymbolsoneperline這里填入了DEBUG,那就要注釋掉fire_Kinetis\src\common\common.h里面DEBUG的宏定義。OutputConverter——Output這里可以設(shè)置編譯代碼后,把代碼轉(zhuǎn)化成其他格式,我們?cè)O(shè)置轉(zhuǎn)換為hex格~55三天入門Cortex-M4——Kinetis系 Linker—— 器配置Linkerconfigurationfile里勾中Overridedefault,重新打開Linker配置文件,在fire_Kinetis\build\configfiles文件里就有多個(gè)Linker配置文件。Linker配置文件,里面設(shè)置了Kinetis 是從ROM啟動(dòng)還是從RAM啟動(dòng),堆棧野火Kinetis開發(fā)板選擇的默 為K60N512LQV100,512KBFlash128KBSRAMDebug模式,如果你想從RAM啟動(dòng),則選擇128KB_Ram.icf;如果先從ROM啟動(dòng),可以選擇512KB_Pflash.icf或者256KB_Pflash_256KB_Dflash.icf,兩者的區(qū)別就在于,后512KBFlash分一半出來,作為保存其他數(shù)據(jù)用,而不是全部用來保存程序代碼~56火 三天入門Cortex-M4——Kinetis系 火Release模式,肯定是從ROM啟動(dòng),即可512KB_Pflash.icf或者256KB_Pflash_256KB_Dflash.icf。而Release模式因?yàn)闆]有調(diào)試信息,所以是不能使用jlink等調(diào)試器來Debug的。運(yùn)行,建議還是修改成相對(duì)地址: 表示IAR工程所在 表示Linker——Automaticruntimelibrary 庫跟預(yù)處理時(shí)設(shè)置頭文件所在的文件夾一樣,這里是設(shè)置庫所在的文件~57三天入門Cortex-M4——Kinetis系 如果用到其他已經(jīng)編譯好的庫,那就把庫所在的文件夾添加進(jìn)Linker 優(yōu)化~58三天入門Cortex-M4——Kinetis系 在這里,我就不選擇優(yōu)化Linker 可以生成關(guān)于內(nèi)存分布、編譯后生成文件的大小等各種信息的文~59三天入門Cortex-M4——Kinetis系 勾上Geerelermpfieebg模式為例,在工程的文件夾下生成:fe_Kiesbdgpo_demoebgList\fe_gpo_demo.mp文件,打開~60三天入門Cortex-M4——Kinetis系 里面有很多詳細(xì)的信息,方便我們了解工程編譯后內(nèi)存的使用情況Debugger 在Driver里有多種可供選擇的調(diào)試方式。野火Kinetis開發(fā)板配置了jlink 可供調(diào)試,因此可以在這里選擇J-Link/J-Trace;如果想軟件仿真,那可以選擇Simulator。即硬件調(diào)試,選擇J-Link/J-Trace;軟件仿真,選擇Simulator~61三天入門Cortex-M4——Kinetis系 如果是在Release模式,那就不要選擇軟件仿真SimulatorDebugger ,需要勾上Useflashloader,不然 Jlink則不需要也~62三天入門Cortex-M4——Kinetis系 J-Link/J-Trace ~63三天入門Cortex-M4——Kinetis系 J-Link/J-Trace—— Jlink連接設(shè)~64火 三天入門Cortex-M4——Kinetis系 火這里可以選擇Jlink 方式:JTAG和IAR重要的設(shè)置就介紹得差不多了,相信各位會(huì)配置了吧?o(∩_∩)o哈哈Warning[Pa082]:undefinedbehavior:theorderofvolatileaccessesisundefinedinthisstatement提示警告的代碼為printf(printf("Flashparameterversion原因很簡單,F(xiàn)TFL_FCCOB4,FTFL_FCCOB5,FTFL_FCCOB6,FTFL_FCCOB7這些量都定義為volatile,這樣調(diào)用, 舉個(gè)例intsquare(volatileint{return*ptr* 編譯器將產(chǎn)生類似下面的代碼intsquare(volatileint{inta=b=returna*

正確的代碼應(yīng)該是longsquare(volatileint{inta=}}returna*~65這三天入門Cortex-M4——Kinetis系 快速建IAR工程IAR的工程,只需要建立一次之后,保存好設(shè)置,下次建立工程,僅僅需要修改在fire_Kinetis\build文件下,找到我們已經(jīng)建好的gpio_demo工程文件夾,里面把gpo_demo工程文件夾 一份在原來的文件夾下,改名為自己喜歡的工程字如xxx_demo:打開xxx_demo,刪掉里面的文件夾,把其他文件改名為自己喜歡的名字,例~66fire_xxx_demo,記得保留后綴。~66三天入門Cortex-M4——Kinetis系 然后在IAR的工作區(qū)里添加工程就行(當(dāng)然,你也可以新建工作區(qū))這樣就可以不需要重新設(shè)置就建立好新~67IAR使用

三天入門Cortex-M4——Kinetis系 其實(shí)在打開IAR軟件的時(shí)候,已經(jīng)彈出了IAR使 界面給你IAR入門 用戶指

飛思卡爾Kinetis系列的例程~68三天入門Cortex-M4——Kinetis系 提供的都是英文版的,提 英語水平的時(shí)候有到了野火就來個(gè)中文版的簡單介紹吧,當(dāng)然遠(yuǎn)不 的介紹那么詳細(xì)功能介IAR 包含新建保 功能、查找替換功能、跳轉(zhuǎn)功能、編 功能與其他編譯器項(xiàng)目,IAR 功能簡單,容易上新建保存功能為~69三天入門Cortex-M4——Kinetis系 :新建空白文:打開文:保存文件 :保存所有文件 :剪切

:粘:打:撤:恢查找替換功能為

:查找內(nèi)容,這里為查找fire文:查找上一:查找下一:查:替跳轉(zhuǎn)功能為:光標(biāo)跳到指定行列:設(shè)置書簽:調(diào)到下個(gè)書簽:跳回上個(gè)頁面:跳到下個(gè)頁面編譯功能為譯當(dāng)前文件編譯整個(gè)工程

:取消編~70置~70 載并調(diào) : ,直接調(diào) 三天入門Cortex-M4——Kinetis系 工作區(qū)工程的選定與切換在IAR里,一個(gè)工作區(qū)可以有多個(gè)工程。如

如果用上圖下面的選框來切換工程~71三天入門Cortex-M4——Kinetis系 通過 并調(diào)設(shè)置工程選 方式為:J-Link/J-Jlink有兩 方式:JTAG和~72三天入門Cortex-M4——Kinetis系 并調(diào)試或者 然后就進(jìn)入調(diào)試界面~73三天入門Cortex-M4——Kinetis系 調(diào)試 :復(fù):暫:步過,執(zhí)行函數(shù),不進(jìn)入函數(shù):步進(jìn),跳進(jìn)函數(shù):步出,跳出

:下一條語:跳到光標(biāo)所指向的:全速運(yùn):退出調(diào)在菜單欄里選擇view,就可以看到很多的調(diào)試工~74三天入門Cortex-M4——Kinetis系 如果想看變量的值,可以直接光標(biāo)選中該變量,然后右鍵——addto調(diào)試功能跟其他編譯器類用 進(jìn)入安全保護(hù)狀態(tài),就需要擦 就才能繼續(xù)燒寫程序,燒寫時(shí)會(huì)提示~75三天入門Cortex-M4——Kinetis系 由于野火在使用Kinetis過程中,還沒出現(xiàn)過這問題。為此,特意網(wǎng)上找到一個(gè) 在使用JLINK給K60燒寫程序時(shí),如果 被鎖如何處理?用J-LinkCommander看看能不能找到M4內(nèi)核,如果能找到,在運(yùn)行的J-LinkCommander里面,敲入以下命令:UnlockKinetis。然后回車,就能 原文出處 Q群中,野火與其他人交流時(shí),發(fā)現(xiàn)鎖住的比較多是用CW編譯器的,較少是IAR,而野火用的是IAR,當(dāng)然也有可能是用CW的人比較多吧。另外,也不要用帶USB3.0USB接口來Jlink、BDM等器,容易出錯(cuò),甚至不了。使用軟件仿真調(diào)要使用仿真調(diào)試,首先就要在選項(xiàng)里設(shè)置調(diào)試器為軟件仿真~76三天入門Cortex-M4——Kinetis系 另外還要 鎖相環(huán)時(shí)鐘設(shè)置和串送,不然仿真的時(shí)候,會(huì)卡在死循不能繼續(xù)調(diào)試。首先,在common.h里添2. 3. #define#defineprintf.h里修改printf函數(shù),即把下面代碼printf(constchar*fmt,{va_listintinfo.dest=DEST_CONSOLE;info.func=&out_char;~77三天入門Cortex-M4——Kinetis系 *Initializethepointertothevariablelengthargumentva_start(ap,rvalue=printk(&info,fmt,*Cleanupthevariablelengthargumentreturn21.修改為#ifdef //禁用printf(constchar*fmt,{return6.printf(constchar*fmt,{va_listintPRINTK_INFOinfo.dest=DESTinfo.func=

即添加31. *Initializethepointertothevariablelengthargumentva_start(ap,rvalue=printk(&info,fmt,*Cleanupthevariablelengthargument#endifreturn#endif這樣就可以使用仿真了。如果不是仿真 燒寫 上,記得注釋common.h里的Simulator定義方方式跟jlink一樣,直接點(diǎn)擊的按鈕~78 三天入門Cortex-M4——Kinetis系 IAR界面風(fēng)格設(shè)計(jì)在菜單欄——Tools——~79三天入門Cortex-M4——Kinetis系 ~80 三天入門Cortex-M4——Kinetis系 野火 模 實(shí)驗(yàn) 實(shí)51編程風(fēng)格的GPIO51編程風(fēng)格的GPIO實(shí)驗(yàn)輸入輸出測

GPIO實(shí)驗(yàn)簡單測GPIO實(shí)驗(yàn)并行讀寫測GPIO實(shí)驗(yàn)綜合測 LED綜合測 EXTI綜合 串口發(fā)送例 串口 ADC綜合 DACLED DAC實(shí)驗(yàn)萬用表測DAC實(shí)驗(yàn)ADC

LEDFTM輸入捕捉中斷測PIT定時(shí)中斷測試?yán)?、輸入捕捉、PITLPTPIT定 LPT脈沖計(jì)數(shù)實(shí)DMAGPIO數(shù)據(jù)實(shí)I2C通信實(shí)~81 三天入門Cortex-M4——Kinetis系 配置系統(tǒng)頻 CMSIS庫cos、sin測試實(shí)~82 三天入門Cortex-M4——Kinetis系 K60前想快速上手K60單片機(jī)嗎?野火KinetisK60庫,是你最好的選擇:簡單的調(diào)用函數(shù)接口,良好的編程風(fēng)格,讓你可以不了解寄存器配置的情況下Kinetis 快,寄存器越來越多,就算你能完全記住51的所有寄存器,但你能記得所有的Kinetis系列的寄存器嗎?現(xiàn)在的發(fā)展方向是單片機(jī)功能越來越強(qiáng)大,寄存器越來越復(fù) 野火KineticsK60庫,盡可能地把底層的驅(qū)動(dòng)完善,用戶可API接口,而不必慢慢對(duì)著datasheet來研究。例如UART、FTM、I2C等模塊,函數(shù)內(nèi)部會(huì)根據(jù)當(dāng)然main函數(shù)里中途更改時(shí)鐘頻率,就需要重新初始化,以便重新計(jì)算和選野火KineticsK60庫,部分功能的實(shí)現(xiàn),提供了兩種或兩種以上的實(shí)現(xiàn)方法,一在編寫庫的工程中,部分代碼參考了其他人例程,在KineticsK60庫代碼中都有備注。代碼會(huì)不斷更新,不一定更新到上,如果與代碼有相互不由于個(gè)人能力及時(shí)間所限,出錯(cuò)之處,在所難免,歡迎各位錯(cuò)誤及提出建議m——野火嵌入式開——野火嵌入式開~83快速開發(fā)指南

三天入門Cortex-M4——Kinetis系 快速入門:了解野火Kinetis工程Kinetisconfig

模版工程的app文

~84 三天入門Cortex-M4——Kinetis系 頭文件作通用配置同文件,與其他工程共用的通工程頭文件,用于針對(duì)特定的工程的配置和包含底層動(dòng)頭文件工程的中斷配置頭文野火整理出來的快速復(fù)用管腳設(shè)置配置時(shí)鐘和開發(fā)板選打開fire_Kinetis文件夾下IAR工程文件源代碼文件 工程模版工作區(qū)文 工程例程工作區(qū)IARfire_Kinetis\buildIAR工程文件夾。使用過IAR的應(yīng)該知道IAR里可以建立一~85三天入門Cortex-M4——Kinetis系 工作我們現(xiàn)在就是要把所有的工程文件都放在這個(gè)fire_Kinetis\build文件夾里打開另外,fire_Kinetis\build文件夾里還有configfiles文件夾iar.h文件configfiles文件夾里放的就是linker配置文件~86三天入門Cortex-M4——Kinetis系 iar.h是用來專門配置IAR編譯的頭文件,這里實(shí)際上沒用到所有的源代碼文件都放在這里 Kinetis

如printf函數(shù)。野火編寫的Kinetis例 這個(gè)工作區(qū)里,包含了多個(gè)工程,用IAR~87三天入門Cortex-M4——Kinetis系 里面有包含多個(gè)工程,按照工程的上下順序?qū)W習(xí),就可以容易熟悉野火K60庫用戶應(yīng)用文件放在fire_Kinetis\src\app文件夾例程的應(yīng)用文件放在fire_Kinetis\src\projects\fire_xxx_demo文件夾~88 三天入門Cortex-M4——Kinetis系 野火K60庫,本身已經(jīng)設(shè)置了默認(rèn)的各個(gè)模塊通道所對(duì)應(yīng)的管腳。其實(shí)就fire_Kinetis\src\drivers\fire_drivers_cfg.h文件里進(jìn)行設(shè)腳,不需要修改函數(shù)。~89 三天入門Cortex-M4——Kinetis系 中斷函數(shù)的編寫飛思卡爾公司提供的模版里,已經(jīng)提供有中斷函數(shù)的參考注主要用到fire_Kinetis\src\cpuvectors.cvectors.h文件,這兩個(gè)用來定義中斷向量表和定義了一個(gè)默認(rèn)的中斷服務(wù)函數(shù)。vectors.c里vectors.h文件里~90三天入門Cortex-M4——Kinetis系 默認(rèn)的定def_r默認(rèn)的中斷向量服務(wù)函數(shù)里。有時(shí)候,我們的程序運(yùn)行異常,不妨打開串口助手,看看是不是跑到defa_r服務(wù)函數(shù)里,如果是,那往往都是代碼有bu。為了重新映射中斷到指向我們指定的中斷向量服務(wù)函數(shù)里,我們建立isr.hisr.c兩個(gè)文件來重映射中斷向量指針和編寫中斷向量服務(wù)函~91三天入門Cortex-M4——Kinetis系 在isr.h文件里,可以看到野火K60模版里已經(jīng)在注解上寫了參考模版,依葫12.#define11.12.#define11.****#define#ifndefISR_H#define#ifndefISR_H#defineISR_H1*extrenvoid17.17.#endif//19./*Endof"isr.h"具體例子,可參考以下例FTM輸入捕捉中斷測PIT定時(shí)中斷測試?yán)?、輸入捕捉、PIT中斷綜合~92 三天入門Cortex-M4——Kinetis系 重要變量、函數(shù)、宏定義一覽表重要的全部變量列名功能說內(nèi)核時(shí)鐘內(nèi)核時(shí)鐘總線時(shí)中斷向重要的全局宏定義列名功能說定義Debug模定義輸出調(diào)試信定義系統(tǒng)頻定義軟件仿重要的函數(shù)列表名功能說串口輸設(shè)置鎖在工程選項(xiàng)那里定

~93三天入門Cortex-M4——Kinetis系 功能說用來定義進(jìn)入DEBUG如果定義了,則會(huì)輸出一些調(diào)試信息,執(zhí)行一些防錯(cuò)誤的檢測,否則取消這些動(dòng)例如:使用斷言,可以幫助我們?cè)谡{(diào)試的時(shí)候檢查函數(shù)傳遞的參數(shù)是否正當(dāng)我們發(fā)布的時(shí)候,就需要取消這些檢common.h里定定1.1.#define~94功能

三天入門Cortex-M4——Kinetis系 用來定義是否通過串口顯示調(diào)試信息printf.c里定函數(shù)原

voidsysinit{uart_init(FIRE_PORT,}//printf(constchar*fmt,要使用printf,需要定義printf的輸出信息,在k60_fire.h里注注 野火嵌入式開這里是定義了輸出的端口和波特率,然后在sysinit.c文件里的sysinit函數(shù)里調(diào)用功能說通過串口發(fā)送數(shù)據(jù)重定printf函數(shù)是可以重映射輸出的,在printf.c里有printf函數(shù)intprintf(constchar*fmt,{PRINTK_INFOinfo.func=&outrvalue=printk(&info,fmt,~959.

三天入門Cortex-M4——Kinetis系 intprintk(PRINTK_INFO*info,constchar*fmt,va_list{for(p=(char*)fmt;(c=*p)!=0;{printk_putc(c,&count,}11.voidout_char(char{}printk里printk_putc里staticvoidprintk_putc(intc,int*count,PRINTK_INFO{7.out_char函數(shù)在io.c里定義綜上所述,要重映射輸出,有兩種printf函數(shù)里把info.func改為其他函數(shù)地址 info.func 修改out_char函數(shù)里的輸出函數(shù),例如改為LCD輸出為了加強(qiáng)程序的健壯性,減少bug,野火為此而在程序里添加了一些安全措施,方便在調(diào)試階段就能檢查出錯(cuò)誤,消滅bug。斷言相信現(xiàn)在還存在著很多連斷言是什么都不知道的軟件工程師,更別說是初學(xué)者了~96 三天入門Cortex-M4——Kinetis系 斷言,其實(shí)就是一個(gè)宏定提供例子是不一樣的/*注:野提供例子是不一樣的////如果斷言條件不成立,進(jìn)入了錯(cuò)誤狀態(tài),就會(huì)打印錯(cuò)誤信息和用LED來顯示////用流水燈來指示進(jìn)入錯(cuò)誤狀EG例如傳遞給函數(shù)的變量取值范圍是否正確。例如在AC模塊里,可以看到很多函數(shù)的開頭都有這樣一個(gè)語句:////使用斷言檢 _CHn是否正如果傳遞錯(cuò)誤的參量,就會(huì)出錯(cuò),在串口里可以看到錯(cuò)誤的位bu。~97typedef{ 三天入門Cortex-M4——Kinettypedef{ 關(guān)于斷言的使用, 的《高質(zhì)量C編程指南》里提取了一段斷言的使用則程序一般分為Debug版本和Release版本,Debug版本用于內(nèi)部調(diào)試版 給用戶使用斷言assertDebug版本起作用的宏,它用于檢查“不應(yīng)該”發(fā)生的情況【規(guī)則6-5-1】使用斷言捕捉不應(yīng)該發(fā)生的情況。不要情況與錯(cuò)誤【規(guī)6-5-2】在函數(shù)的處,使用斷言檢查參數(shù)的有效性()【建議651】在編寫函數(shù)時(shí),要進(jìn)行反復(fù)的考查,并且自問:“我打算做哪些【建議652】一般教科書都鼓勵(lì)程序員們進(jìn)行防錯(cuò)設(shè)計(jì),但要記住這種編程風(fēng)要使用斷言進(jìn)行。枚舉序員可以及時(shí)發(fā)現(xiàn)錯(cuò)誤和修正錯(cuò)誤。滅b。ADC.h文件如果打開其他如果打開其他網(wǎng)絡(luò)上共享的工程會(huì)發(fā)現(xiàn)他們往往都是使用宏定義,但宏~98三天入門Cortex-M4——Kinetis系 師來說,對(duì)程序的安全性進(jìn)行檢測,那是一1.1.void ,ADC_Ch舉個(gè)例子告告~99GPIO模塊

三天入門Cortex-M4——Kinetis系 快速入門:GPIO庫使用方形參變 名及其作形參變作取端口PORTA,PORTB,PORTC,PORTD,n引腳輸入輸出配GPI,GPO,GPI_DOWN,GPI_UP,GPI_PF,GPI_DOWN_PF,GPI_UP_PF, GPO_HDS_SSR。數(shù)常用枚舉列名功能說端管腳輸入輸出配函數(shù)列函數(shù)名函數(shù)功初始化設(shè)置引腳狀反轉(zhuǎn)引腳狀獲取IO宏定義列宏定功能說設(shè)置引腳輸出電平(這里的x要替換成A~E,n要替換為0~31的數(shù),表示對(duì)應(yīng)的例如引腳輸入電平(這里的x要替換A~E,n要替換為0~31的數(shù),表示對(duì)~100引腳號(hào)例如設(shè)置引腳輸入輸出方(x例如設(shè)置8位引腳輸出電平(這里的x要替換A~E,n要替換0~3的數(shù),表示對(duì)應(yīng)的8位引腳號(hào))例如PTA_BYTE0_OUT表示PTA7~PTA0PTA_BYTE1_OUT表示PTA15~PTA8PTA_BYTE2_OUT表示PTA23~PTA_BYTE3_OUT表示PTA31~設(shè)置8位引腳輸入電平(這里的x要替換A~E,n要替換0~3的數(shù)8位引腳號(hào)設(shè)置8位引腳輸入輸出方向(這里的x替換成A~E,n要替換為0~3的數(shù),表示對(duì)應(yīng)的8位引腳號(hào))應(yīng)的16位引腳號(hào))例如PTA_WORD0_OUTPTA15~PTA_WORD1_OUT表示PTA31~設(shè)置16位引腳輸入電平(這里的x要替換成A~E,n要替換為0~1的數(shù),表示應(yīng)的16位引腳號(hào)設(shè)置16位引腳輸入輸出方向(這里的要替A~E,n要替換為0~1的數(shù),示對(duì)16位引腳號(hào)設(shè)置引腳狀翻轉(zhuǎn)引腳狀獲取IO1位數(shù)1位數(shù)2位數(shù)2位數(shù)4位數(shù)三天入門三天入門Cortex-M4——is系 火~1014位數(shù)8位數(shù)8位數(shù)164位數(shù)8位數(shù)8位數(shù)16位數(shù)16位數(shù)枚舉定

enum{枚舉作用來定義端枚舉定

typedefenumGPIGPIDOWNPF=GPIDOWN|GPIPF|GPI_PF16.GPO_HDS_SSR=GPO_HDS|枚舉作用來定義GPIO管腳輸入輸出的配置~102三天入門Cortex-M4——Kinetis系 常用的就前面五種,例如輸入濾波,可用著按鍵上,可以設(shè)置為上拉下拉外部電阻函數(shù)詳解函數(shù)原

1.1. gpio_init(PORTxu8nGPIO_CFG,u8 功能說初始化gpio,設(shè)置端口的輸入輸出方向,輸出數(shù)據(jù)。初始化后,才能對(duì)IO口進(jìn) 調(diào)用例函數(shù)原

4.4. gpio_set(PORTx,u8n,u8 功能說設(shè)置IO口電平,需要先初始化GPIO端口為輸出方向5. //PTA275. //PTA27=函數(shù)原

gpiogpio//PTA27//PTA266.6. gpio_turn(PORTx,u8 功能說翻轉(zhuǎn)IO口電傳遞參參考形參變 名及其作用~103函數(shù)無調(diào)用

三天入門Cortex-M4——Kinetis系 7.7. 函數(shù)原

8. (PORTx,u8 功能說引腳狀傳遞參參考形參變 名及其作用函數(shù)返返回1bit的端口電平狀態(tài)調(diào)用例9.9. //PTA27=宏定義功能說

設(shè)置電平輸出。這個(gè)是通用顯示名字而已,實(shí)際上這里的x要替換成A~E的,n要替換為0~31的數(shù),表示對(duì)應(yīng)的引腳號(hào),例如調(diào)用例子舉PTA0PTA0 PTB16_OUT1;//PTB16PTE28_OUT0;//PTE28~104 三天入門Cortex-M4——Kinetis系 功能說電平輸入。這個(gè)是通用顯示名字而已,實(shí)際上這里的x要替換成A~E的端n要替換為0~31的數(shù),表示對(duì)應(yīng)的引腳號(hào),例如PTA0_IN調(diào)用例子舉 data=PTB16_IN;data=PTE28_IN;功能說

設(shè)置引腳輸入輸出方向。這個(gè)是通用顯示名字而已,實(shí)際上這里的x要替換A~E,n要替換為0~31的數(shù),表示對(duì)應(yīng)的引腳號(hào)。例如調(diào)用例子舉功能說

設(shè)置8位引腳輸出電平(這里的x要替換成A~E,n要替換為0~3的數(shù),表示對(duì)應(yīng)的8位引腳號(hào))調(diào)用例子舉PTAPTABYTE0OUT=0x12//表示PTA7~ 8位輸出PTA_BYTE1_OUT=0x12//表示PTA15~ 8位輸出PTABYTE2OUT=0x12//表示PTA23~PTA168位輸出PTA_BYTE3_OUT=0x12//表示PTA31~PTA248位輸出功能說

設(shè)置8位引腳輸入電平(這里的x要替換成A~E,n要替換為0~3的數(shù),表示對(duì)應(yīng)的8位引腳號(hào))~105 三天入門Cortex-M4三天入門Cortex-M4——Kinetis系 火chardata=PTA_BYTE0_IN//表示PTA7~ 8位數(shù)據(jù)輸入到data變data=PTA_BYTE1_IN//表示PTA15~ 8位數(shù)據(jù)輸入到data變dataPTA_BYTE2_IN//表示PTA23~PTA168位數(shù)據(jù)輸入到data變dataPTA_BYTE3_IN//表示PTA31~PTA248位數(shù)據(jù)輸入到data變功能說

設(shè)置8位引腳輸入輸出方向(這里的x要替換成A~E,n要替換為0~3的數(shù),表示對(duì)應(yīng)的8位引腳號(hào))DDRA_BYTE0=0xFF;//表示DDRA_BYTE0=0xFF;//表示PTA7~ DDRA_BYTE1=0xFF;//表示PTA15~ DDRA_BYTE2=0xFF;//表示PTA23~PTA168DDRA_BYTE3=0xFF;//表示PTA31~PTA248功能說

設(shè)置16位引腳輸出電平(這里的x要替換成A~E,n要替換為0~1的數(shù),表示對(duì)應(yīng)的16位引腳號(hào))調(diào)用例子舉1.2.功能說

設(shè)置16位引腳輸入電平(這里的x要替換成A~E,n要替換為0~1的數(shù),表示對(duì)應(yīng)的16位引腳號(hào))調(diào)用例子舉1.u16data=PTA15~輸入數(shù)據(jù)到data2.u16data=PTA31~輸入數(shù)據(jù)到data~106 三天入門Cor

溫馨提示

  • 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. 人人文庫網(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)論