三天入門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),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

中斷向量表在vectors.c里定義,在vectors.h文件里前兩BOOT_STACK_ADDRESSReset_Handler(自帶例程startup),第一個為起始SP棧指針、第二個為復(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();//時鐘初始化 /**main函數(shù)**/while(1);//避免停止運(yùn)行}main④

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

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

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

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

清寄存

制中斷向量表到 動修改中斷向量表地 為RAM里的地 分初始化數(shù) 清除RAM中初始化0的數(shù)據(jù)段把以ramfunc 子函數(shù).textrw到RAM初始化鎖相環(huán)到的串口 用戶任注:common_startup函數(shù)并沒 常量數(shù)據(jù).rodata、代碼.text。如果RAM啟動,代碼會直接編譯進(jìn)去RAM,掉電就會丟失數(shù)據(jù)。如果是ROM啟動,就會中斷向量表到RAM,設(shè)置中斷向量表地址為RAM的地址,以加快中斷響應(yīng)速度。~7 三天入門Cortex-M4——Kinetis系 逐步提高:ROM、RAM啟動工作原理、ICF文件講ROM、RAM啟動,首先需要對器Ler如何分配內(nèi)存有一定的了解。最低內(nèi)存地址中斷向量代碼數(shù)據(jù)堆棧命令中斷向量代碼數(shù)據(jù)堆棧命令行參未初始化變量段常量段已初始化全局變量和靜態(tài)變量段.data程序運(yùn)行中由程序員調(diào)用malloc等函數(shù)來申請局部變局部變在函數(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ù)據(jù)分配地址的呢其實(shí),這就是器Lir數(shù)據(jù)分配合適的地址,這樣我們就可以不需要考慮這些內(nèi)存分布就能寫出可運(yùn)行的代編譯器對代碼進(jìn)行編譯,一般分為四個

編譯和

匯 匯編成

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

define =define define = define define

= define define /****EndofICFeditorsection./****上邊是由ICF編輯,下面是由我們手動配置****/ 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//手動初始common_startup完

//堆,8字節(jié)對//棧,8字節(jié)對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,告訴編譯器,這個是中斷向量表,編譯進(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啟動(flash啟動/*###ICF###SectionhandledbyICFeditor,don'ttouch!/*-Editorannotationfile-

/* _0.xml"define = define =define = :P-flashk256kD-flash :P-flashkdefine =//前面0x410RAM留給RAMUserVectorTabledefine ICFEDITregionRAM = define define =/****EndofICFeditorsection.###ICF###*/19./****ICF編輯,下面是由我們手動配置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(對flash操作的函數(shù)必須這樣)placeataddressmem: {vec//vectors.c中設(shè)置#pragmalocationintvec",告訴編譯器,這個是中斷向量表,編譯進(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,以 斷就會RAM的中斷向量ROMBootloader中斷向量中斷向量代碼數(shù)據(jù)命令行參RAMBootloaderRAMBootloader中斷向量RAM配置寄存Code.bss和堆棧0x1FFF-前面的內(nèi)容,不知道大家是否都看懂呢?熟悉單片機(jī)的內(nèi)存分配,是每一個電子軟件工程師所必備的。如果對單片機(jī)的內(nèi)存分配都不了解,那就算會寫單片機(jī)的驅(qū)動程序,也難以保證程序的質(zhì)量。那在IAR里,怎么知道編譯生成的文件的內(nèi)存圖?在工程選項(xiàng)里,設(shè)置生成mapfile就行:~14三天入門Cortex-M4——Kinetis系 設(shè)置好,編譯后,在fire_Kinetis\build\xxx_demo\xxx模式\List文件夾下就會有.map文件。 這里的內(nèi)容,就是ICF配置~15火 三天入門Cortex-M4——Kinetis系 火那什么是ICF編輯器呢呵呵,在工程名里右鍵——Options——

ICF編輯器,可以在里面設(shè)~16三天入門Cortex-M4——Kinetis系 ~17 三天入門Cortex-M4——Kinetis系 IAR的使野火推薦的是直接在野火提供的K60庫模版上添加 重建工程,但學(xué)會自己建立工程是必須的,這里給大家詳解建立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)行它按下任意鍵,會自動打開license.txt文件,并提示:搜索"EWARM",找到所行的key~21三天入門Cortex-M4——Kinetis系 key上一行的Installserial即為我們這里所需要的Next后,填入key所在License~22三天入門Cortex-M4——Kinetis系 包括#號哦Next后,根據(jù)自己情況選擇安裝路徑設(shè)置「開始」菜單文件夾,還是繼續(xù)~23三天入門Cortex-M4——Kinetis系 經(jīng)過漫長的等待噔噔噔噔??華麗麗地按個finish結(jié)束安裝~24三天入門Cortex-M4——Kinetis系 運(yùn)行IAR,語言選擇,按OK結(jié)IAR的編程界面~25三天入門Cortex-M4——Kinetis系 相對于KeilForARM、CodeWarrior而言,IAR forARM的編程界面是最簡單的,~26 三天入門Cortex-M4——Kinetis系 三 安裝仿真器驅(qū)又換會原來的安裝導(dǎo)航界面:選擇Install野火Kinetics開發(fā)板,選擇了用jlink作為仿真調(diào)試器,因此這里選擇jlink運(yùn)行安裝文~27三天入門Cortex-M4——Kinetis系 運(yùn)行后,會自動安裝驅(qū)動,不會有其他另外,為了可以使用擦 等功能,我們可以選擇用segger公司的j-~28三天入門Cortex-M4——Kinetis系 地址:SetupJLinkARM安裝時,一路狂Next就行安裝后,在開始菜單里找到J-FlashARM,運(yùn)行它即~29三天入門Cortex-M4——Kinetis系 建立IAR工程創(chuàng)建工程文件一 準(zhǔn)備材在建立IAR工程前,需要 的Kinetis例程,提取里面的配置文件和地址:KINETIS512解壓后,打 ,會看到兩個文件二 建立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文件夾,再建一個build文件夾,build文件里再建一個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系 這樣,一個空的IAR工程骨架就建立完畢…往工程添加 自帶函數(shù)例程文件夾下的srcfire_Kinetis文件夾下 例程文件夾KINETIS512_SC\build\iar下的文件iar.h和文件夾configfiles 到fire_Kinetis\build文件夾下。呵呵,怎么會多了個settings呢?這個是保存IAR自動創(chuàng)建的設(shè)置文件,添加分組,方便管理代返回IAR~35三天入門Cortex-M4——Kinetis系 在彈出來 框里填入“app”,這樣就添加了一個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是啟動文件,單片機(jī)上電復(fù)位后,就會執(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里寫個空的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ù)。注意:這個頭文件只能在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ū)動和點(diǎn)亮Kinetis的編程步驟:開啟時鐘、復(fù)用管腳、設(shè)置頻率、設(shè)置功能fire_Kinetis\src\drivers文件夾下建立gpio文件夾,再在gpio文件夾建gpio.cgpio.c添加進(jìn)工程分組的drivers里,在gpio.c里添加如下gpio的驅(qū)動代碼1./*****************CCOPYRIGHT2011*文件 *描 **實(shí)驗(yàn)平 *庫版 *嵌入系 * *作 10.*淘寶 11.* /bbs/bbslist.jsp?bbs12.#include#includeE_PTR,PTD_BASE_PTR,PTE_BASE_PTR};//定義五個指針數(shù)組保存GPIOx的地址volatilestructPORT_MemMap21.22 ***26.*參數(shù)說明 輸出初始狀態(tài),0=低電平,1=(對輸入無效**修改時間:2012-1- * 注33.voidgpio_init(PORTxportx,u8n,IOcfg,u8{ASSERTn32u)&&data2u~43

三天入門Cortex-M4——Kinetis系 //PORTx_PCRx,每個端口都有個寄存器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ù)說明 **修改時間: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)分成兩個:Debug模式Release模式,一個是調(diào)試模式,一這樣,在調(diào)試的時候,我們選擇Debug;發(fā)布產(chǎn)品或者比賽的時候,我們選擇Release,切換起來非常方便。 有時會發(fā)現(xiàn)他們并沒有Debug模式和Release模式,取而代之的是ROM模式、RAM模式、flash模式等等,這些都是可以自行修改的:ProjectEditConfigurations來的界面里選擇:new后~46三天入門Cortex-M4——Kinetis系 注意,從Debug模式切換到Release模式,會經(jīng)常出現(xiàn)各種異常的編譯錯誤或者運(yùn)行異常,這是因?yàn)镽elease有更嚴(yán)格的檢查,詳細(xì)情況,可看:在IAR的Workspace窗口頂部的下拉菜單中有兩個選項(xiàng).pdf網(wǎng)上共享的工程模版,改名字后的,他們大部分都是基于Debug模式的,就是怕用戶編Debug模式的優(yōu)化效果不如Release模式,如果我們的程序編程是沒Debug,就不怕把模式調(diào)到Release模式,只不過是在Debug模式下,會隱藏了一些錯誤而讓我們覺得編譯通過了。也有時,debug模式里會添加一些延時,所以有時候在Release模式下延時。就用ebug模式來講解:在工作區(qū)程名上:右鍵——~47三天入門Cortex-M4——Kinetis系 然后就會看到選項(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)化等級在Debug模式里,這里設(shè)為不優(yōu)化,便于調(diào)試方便。事實(shí)上,在調(diào)試的時候,如Release模式里,可以選擇最大優(yōu)化,但在發(fā)布前,需要對優(yōu)化后的效果進(jìn)行~53三天入門Cortex-M4——Kinetis系 C/C++Compiler——PreprocessorAdditionalincludedirectories:(oneperline)文本編輯框里填在這里在的文件夾,預(yù)處理器編譯的時候,就會搜索這些文件夾, 表示Definedsymbols:(oneperline)文本編輯框里填入~54

三天入門Cortex-M4——Kinetis系 這里是用來宏定義變量,對整個工程有效,相當(dāng)于在頭文件#define#define#define#define注意:如果在Definedsymbolsoneperline這里填入了DEBUG,那就要注釋掉fire_Kinetis\src\common\common.h里面DEBUG的宏定義。OutputConverter——Output這里可以設(shè)置編譯代碼后,把代碼轉(zhuǎn)化成其他格式,我們設(shè)置轉(zhuǎn)換為hex格~55三天入門Cortex-M4——Kinetis系 Linker—— 器配置Linkerconfigurationfile里勾中Overridedefault,重新打開Linker配置文件,在fire_Kinetis\build\configfiles文件里就有多個Linker配置文件。Linker配置文件,里面設(shè)置了Kinetis 是從ROM啟動還是從RAM啟動,堆棧野火Kinetis開發(fā)板選擇的默 為K60N512LQV100,512KBFlash128KBSRAMDebug模式,如果你想從RAM啟動,則選擇128KB_Ram.icf;如果先從ROM啟動,可以選擇512KB_Pflash.icf或者256KB_Pflash_256KB_Dflash.icf,兩者的區(qū)別就在于,后512KBFlash分一半出來,作為保存其他數(shù)據(jù)用,而不是全部用來保存程序代碼~56火 三天入門Cortex-M4——Kinetis系 火Release模式,肯定是從ROM啟動,即可512KB_Pflash.icf或者256KB_Pflash_256KB_Dflash.icf。而Release模式因?yàn)闆]有調(diào)試信息,所以是不能使用jlink等調(diào)試器來Debug的。運(yùn)行,建議還是修改成相對地址: 表示IAR工程所在 表示Linker——Automaticruntimelibrary 庫跟預(yù)處理時設(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è)置就介紹得差不多了,相信各位會配置了吧?o(∩_∩)o哈哈Warning[Pa082]:undefinedbehavior:theorderofvolatileaccessesisundefinedinthisstatement提示警告的代碼為printf(printf("Flashparameterversion原因很簡單,F(xiàn)TFL_FCCOB4,FTFL_FCCOB5,FTFL_FCCOB6,FTFL_FCCOB7這些量都定義為volatile,這樣調(diào)用, 舉個例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軟件的時候,已經(jīng)彈出了IAR使 界面給你IAR入門 用戶指

飛思卡爾Kinetis系列的例程~68三天入門Cortex-M4——Kinetis系 提供的都是英文版的,提 英語水平的時候有到了野火就來個中文版的簡單介紹吧,當(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)到下個書簽:跳回上個頁面:跳到下個頁面編譯功能為譯當(dāng)前文件編譯整個工程

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

如果用上圖下面的選框來切換工程~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ù)燒寫程序,燒寫時會提示~75三天入門Cortex-M4——Kinetis系 由于野火在使用Kinetis過程中,還沒出現(xiàn)過這問題。為此,特意網(wǎng)上找到一個 在使用JLINK給K60燒寫程序時,如果 被鎖如何處理?用J-LinkCommander看看能不能找到M4內(nèi)核,如果能找到,在運(yùn)行的J-LinkCommander里面,敲入以下命令:UnlockKinetis。然后回車,就能 原文出處 Q群中,野火與其他人交流時,發(fā)現(xiàn)鎖住的比較多是用CW編譯器的,較少是IAR,而野火用的是IAR,當(dāng)然也有可能是用CW的人比較多吧。另外,也不要用帶USB3.0USB接口來Jlink、BDM等器,容易出錯,甚至不了。使用軟件仿真調(diào)要使用仿真調(diào)試,首先就要在選項(xiàng)里設(shè)置調(diào)試器為軟件仿真~76三天入門Cortex-M4——Kinetis系 另外還要 鎖相環(huán)時鐘設(shè)置和串送,不然仿真的時候,會卡在死循不能繼續(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定時中斷測試?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ū)動完善,用戶可API接口,而不必慢慢對著datasheet來研究。例如UART、FTM、I2C等模塊,函數(shù)內(nèi)部會根據(jù)當(dāng)然main函數(shù)里中途更改時鐘頻率,就需要重新初始化,以便重新計(jì)算和選野火KineticsK60庫,部分功能的實(shí)現(xiàn),提供了兩種或兩種以上的實(shí)現(xiàn)方法,一在編寫庫的工程中,部分代碼參考了其他人例程,在KineticsK60庫代碼中都有備注。代碼會不斷更新,不一定更新到上,如果與代碼有相互不由于個人能力及時間所限,出錯之處,在所難免,歡迎各位錯誤及提出建議m——野火嵌入式開——野火嵌入式開~83快速開發(fā)指南

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

模版工程的app文

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

如printf函數(shù)。野火編寫的Kinetis例 這個工作區(qū)里,包含了多個工程,用IAR~87三天入門Cortex-M4——Kinetis系 里面有包含多個工程,按照工程的上下順序?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)的各個模塊通道所對應(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文件,這兩個用來定義中斷向量表和定義了一個默認(rèn)的中斷服務(wù)函數(shù)。vectors.c里vectors.h文件里~90三天入門Cortex-M4——Kinetis系 默認(rèn)的定def_r默認(rèn)的中斷向量服務(wù)函數(shù)里。有時候,我們的程序運(yùn)行異常,不妨打開串口助手,看看是不是跑到defa_r服務(wù)函數(shù)里,如果是,那往往都是代碼有bu。為了重新映射中斷到指向我們指定的中斷向量服務(wù)函數(shù)里,我們建立isr.hisr.c兩個文件來重映射中斷向量指針和編寫中斷向量服務(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定時中斷測試?yán)?、輸入捕捉、PIT中斷綜合~92 三天入門Cortex-M4——Kinetis系 重要變量、函數(shù)、宏定義一覽表重要的全部變量列名功能說內(nèi)核時鐘內(nèi)核時鐘總線時中斷向重要的全局宏定義列名功能說定義Debug模定義輸出調(diào)試信定義系統(tǒng)頻定義軟件仿重要的函數(shù)列表名功能說串口輸設(shè)置鎖在工程選項(xiàng)那里定

~93三天入門Cortex-M4——Kinetis系 功能說用來定義進(jìn)入DEBUG如果定義了,則會輸出一些調(diào)試信息,執(zhí)行一些防錯誤的檢測,否則取消這些動例如:使用斷言,可以幫助我們在調(diào)試的時候檢查函數(shù)傳遞的參數(shù)是否正當(dāng)我們發(fā)布的時候,就需要取消這些檢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)試階段就能檢查出錯誤,消滅bug。斷言相信現(xiàn)在還存在著很多連斷言是什么都不知道的軟件工程師,更別說是初學(xué)者了~96 三天入門Cortex-M4——Kinetis系 斷言,其實(shí)就是一個宏定提供例子是不一樣的/*注:野提供例子是不一樣的////如果斷言條件不成立,進(jìn)入了錯誤狀態(tài),就會打印錯誤信息和用LED來顯示////用流水燈來指示進(jìn)入錯誤狀EG例如傳遞給函數(shù)的變量取值范圍是否正確。例如在AC模塊里,可以看到很多函數(shù)的開頭都有這樣一個語句:////使用斷言檢 _CHn是否正如果傳遞錯誤的參量,就會出錯,在串口里可以看到錯誤的位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ā)生的情況。不要情況與錯誤【規(guī)6-5-2】在函數(shù)的處,使用斷言檢查參數(shù)的有效性()【建議651】在編寫函數(shù)時,要進(jìn)行反復(fù)的考查,并且自問:“我打算做哪些【建議652】一般教科書都鼓勵程序員們進(jìn)行防錯設(shè)計(jì),但要記住這種編程風(fēng)要使用斷言進(jìn)行。枚舉序員可以及時發(fā)現(xiàn)錯誤和修正錯誤。滅b。ADC.h文件如果打開其他如果打開其他網(wǎng)絡(luò)上共享的工程會發(fā)現(xiàn)他們往往都是使用宏定義,但宏~98三天入門Cortex-M4——Kinetis系 師來說,對程序的安全性進(jìn)行檢測,那是一1.1.void ,ADC_Ch舉個例子告告~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ù),表示對應(yīng)的例如引腳輸入電平(這里的x要替換A~E,n要替換為0~31的數(shù),表示對~100引腳號例如設(shè)置引腳輸入輸出方(x例如設(shè)置8位引腳輸出電平(這里的x要替換A~E,n要替換0~3的數(shù),表示對應(yīng)的8位引腳號)例如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位引腳號設(shè)置8位引腳輸入輸出方向(這里的x替換成A~E,n要替換為0~3的數(shù),表示對應(yīng)的8位引腳號)應(yīng)的16位引腳號)例如PTA_WORD0_OUTPTA15~PTA_WORD1_OUT表示PTA31~設(shè)置16位引腳輸入電平(這里的x要替換成A~E,n要替換為0~1的數(shù),表示應(yīng)的16位引腳號設(shè)置16位引腳輸入輸出方向(這里的要替A~E,n要替換為0~1的數(shù),示對16位引腳號設(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ù)。初始化后,才能對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è)置電平輸出。這個是通用顯示名字而已,實(shí)際上這里的x要替換成A~E的,n要替換為0~31的數(shù),表示對應(yīng)的引腳號,例如調(diào)用例子舉PTA0PTA0 PTB16_OUT1;//PTB16PTE28_OUT0;//PTE28~104 三天入門Cortex-M4——Kinetis系 功能說電平輸入。這個是通用顯示名字而已,實(shí)際上這里的x要替換成A~E的端n要替換為0~31的數(shù),表示對應(yīng)的引腳號,例如PTA0_IN調(diào)用例子舉 data=PTB16_IN;data=PTE28_IN;功能說

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

設(shè)置8位引腳輸出電平(這里的x要替換成A~E,n要替換為0~3的數(shù),表示對應(yīng)的8位引腳號)調(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ù),表示對應(yīng)的8位引腳號)~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ù),表示對應(yīng)的8位引腳號)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ù),表示對應(yīng)的16位引腳號)調(diào)用例子舉1.2.功能說

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

溫馨提示

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

最新文檔

評論

0/150

提交評論