屆攝像頭四輪動(dòng)感小麥兜-三天入門_第1頁(yè)
屆攝像頭四輪動(dòng)感小麥兜-三天入門_第2頁(yè)
屆攝像頭四輪動(dòng)感小麥兜-三天入門_第3頁(yè)
屆攝像頭四輪動(dòng)感小麥兜-三天入門_第4頁(yè)
屆攝像頭四輪動(dòng)感小麥兜-三天入門_第5頁(yè)
已閱讀5頁(yè),還剩412頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

野火開2012-3- 三天入門Cortex-M4——Kinetis系 野 開 三天入門Cortex-M4——Kinetis系賽而沒時(shí)間學(xué)習(xí)深Kinetis單片機(jī)朋友,特意寫Kinetis開發(fā)板的。野火Kinetis開發(fā),主要有IAR的使用、Kinetis啟動(dòng)流程講解、野火K60庫(kù)的調(diào)用三個(gè)部分組成。不再詳細(xì)講解寄存器,而且直接調(diào)用我們的函數(shù)庫(kù)。K60函數(shù)庫(kù),函數(shù)會(huì)自動(dòng)計(jì)算頻率,設(shè)置分頻,直接調(diào)用,減少的后顧之憂,可以加快的開發(fā)速度。目前,單片機(jī)型號(hào)如此之多,而產(chǎn)品的開發(fā)所允許給的時(shí)間越來(lái)越少 自己重新建立自己的函數(shù)庫(kù)進(jìn)行開發(fā)。例如ST公司推出的ST庫(kù),讓你可以完全不需 要建立自己的野火Kinetis庫(kù)的原因。野火K60庫(kù)的函數(shù)接口,盡量追求簡(jiǎn)潔明了、通俗易懂,力求初學(xué)者見其名就會(huì)用。目前26個(gè)入門Kinetis板實(shí)含了目前智能車比想快速上手K60單片機(jī)嗎?野火KinetisK60庫(kù),是你最好的選擇~1 是:三天入門~1三天入門Cortex-M4——Kinetis系 野 開 喊出這樣 并不是吹的,已經(jīng)有兩位大三參加智能車的朋友(同一個(gè)隊(duì)在使用的k60庫(kù)三天時(shí)間內(nèi)就能xs128上的0v7725驅(qū)動(dòng)程序和舵機(jī)控制程序移植到Kinetis上跑起來(lái);一位大二的師弟,不到一天的時(shí)間就從入門到搞定頭ov7725和液晶LCD的移植??你會(huì)是下一位嗎?只 敢拼,一切皆有可能?。?!Nothingisimpossible由于個(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庫(kù)的使 前 快速開發(fā)指 快速入門:了解野火Kinetis工 中斷函數(shù)的編寫方 重要變量、函數(shù)、宏定義一覽 安全檢 GPIO模 快速入門:GPIO庫(kù)使用方 GPIO測(cè)試?yán)?~3LED模~3快速入門:LED庫(kù)使用方 LED綜合測(cè)試?yán)?三天入門Cortex-M4——Kinetis系 野 開 EXTI外部GPIO中斷例 快速入門:EXTI庫(kù)使用方 EXTI綜合測(cè)試?yán)?UART模 快速入門:UART庫(kù)使用方 UART綜合測(cè)試?yán)?ADC模 快速入門:ADC庫(kù)使用方 ADC綜合測(cè)試?yán)?DAC模 快速入門:DAC庫(kù)使用方 DAC綜合測(cè)試?yán)? 模 快速入門 庫(kù)使用方 綜合測(cè)試?yán)?FTM輸入捕捉模 快速入門:FTM輸入捕捉庫(kù)使用方 FTM輸入捕捉中斷測(cè) PIT定時(shí)中斷模 快速入門:PIT定時(shí)中斷庫(kù)使用方 PIT定時(shí)中斷測(cè)試?yán)?、輸入捕捉、PIT中斷綜合測(cè) I2C模 快速入門:I2C通信庫(kù)使用方 I2C通信實(shí)驗(yàn)測(cè) lptmr低功耗定時(shí)器模 快速入門:lptmr低功耗定時(shí)器庫(kù)使用方 lptmr低功耗定時(shí)器測(cè)試?yán)?DMA模 快速入門:DMA傳輸端口數(shù) DMA測(cè)試?yán)?MCG模塊超 快速入門:MCG庫(kù)使用方 快速入門:配置頻 DSP數(shù)字信號(hào)處理單 ~4CMSIS的介紹及其幫助文檔的查找方~4DSP常用函數(shù)列 三天入門Cortex-M4——Kinetis系 野 開 DSP測(cè)試?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里用匯編實(shí)現(xiàn)EXPORTReset_Handler;初始化 i關(guān)中import ;調(diào)用C語(yǔ)言start函

void{wdog_disable();//關(guān)閉看門 sysinit();//時(shí)鐘初始化 /**main}main④

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

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

這里就是的執(zhí)行函數(shù),在這里編}~6高頻率意味著高功率,為了獲取更高的頻率 這里pll_init就是把模式進(jìn)入PEE三天入門Cortex-M4——Kinetis系 野 開

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

清寄存

到 動(dòng)修改中斷向量表地 為RAM里的地 分初始化數(shù) 清除RAM中初始化0的數(shù)據(jù)段把以ramfunc 子函數(shù).textrw到RAM初始化鎖相環(huán)到的串口 用戶任注:common_startup函數(shù)并沒 RAM啟動(dòng),代碼會(huì)直接編譯進(jìn)去RAM,掉電就會(huì)丟失數(shù)據(jù)。如果是ROM啟動(dòng),就中斷中斷向量表到RAM,設(shè)置中斷向量表地址為RAM的地址,以加快中斷響應(yīng)速度~7 三天入門Cortex-M4——Kinetis系 野 開 逐步提高:ROM、RAM啟動(dòng)工作原理、ICF文件講都不知道單片機(jī)的內(nèi)存使用情況是如何分配ROM、RAM啟動(dòng),首先需要對(duì)器Linker如何分配內(nèi)存有一定的了解。中斷向量代碼數(shù)據(jù)堆中斷向量代碼數(shù)據(jù)堆棧命令行參未初始化變量段常量段程序運(yùn)行中由程序員調(diào)用malloc等函數(shù)來(lái)申局局部變?cè)诤?定義的非靜態(tài)的變量最高地inta=staticintchar

//全局未初始化區(qū).bssconstintA=volatileconstintB={intchar

//代碼區(qū)

注意區(qū)別

staticintc=0;chars[]=char*p3=

//全局(靜態(tài))初始化區(qū).data//123456\0在常量區(qū),p3

注意區(qū)別p1char*malloc(10//1020p2=(char*)17.

strcpy(p1,

地方。看后面IAR地方。看后面IAR設(shè)置工程選項(xiàng)中Linker的設(shè)

參考注容此野 開 ~參考注容此三天入門Cortex-M4——Kinetis系 野 開 參考原文那編譯到時(shí)候,編譯器是如何為這些變量數(shù)據(jù)分配地址的呢其實(shí),這就是器Linker在發(fā)揮它的作用,它會(huì)根據(jù)配置文件,來(lái)為這些變量數(shù)據(jù)分配合適的地址,這樣就可以不需要考慮這些內(nèi)存分布就能寫出可運(yùn)行的代編譯器對(duì)代碼進(jìn)行編譯,一般分為四預(yù)編

展開

編譯和編譯成匯

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

define define =define define

=define define /****EndofICFeditorsection./****上邊是由ICF編輯,下面是由 手動(dòng)配置****/ define 0x20000000;//SRAM是分成兩塊的,RAM2SRAM_URAM為define =0x20000000-

ICFEDIT_region_RAM_start;defineexported VECTOR_TABLE ICFEDIT_intvec_start

//代碼編譯進(jìn)ROM,則0x00000000;RAM, defineexported VECTORRAM ICFEDITregionRAM //RAMRAMUserVector VECTOR_TABLE的數(shù) defineexported BOOT_STACK_ADDRESS -/*決定代碼編譯的地址

0x410,是前面的留給中斷向三天入門Cortex-M4——Kinetis系 野如果要三天入門Cortex-M4——Kinetis系 野如果要RAM啟動(dòng)要把代碼編譯進(jìn)SRAM_L,定義中斷向量表的位火可以打開fire_RAM_K60N512.icf這個(gè)文件(用記事本打開就行),這個(gè)配置文//代碼編譯進(jìn)ROM, +0x410 +0x410,+0x410,是前面的留給VectorTabledefinememorymemwithsize=4G; //4G的虛擬尋址空間defineregionROM = ICFEDITregionROMICFEDIT_region_ROM_enddefineregion = ICFEDIT_region_RAM_end

~11 | ~11 三天入門Cortex-M4——Kinetis系 野 開 defineblockCSTACK withalignment=8,size=defineblock withalignment=8,size//common_startup

//堆,8//棧,8initializemanuallyreadwrite 未初始化數(shù)據(jù)initializemanuallysection initializemanually{section.textrw donotinitialize{section.noinit defineblockCodeRelocate{section.textrw_initdefineblockCodeRelocateRamsection.textrw placeataddressmem: {vec//vectors.c中設(shè)置#pragmalocation".intvec.noinit段放在代碼開placeataddressmem: {readonlysection.noinit//crt0.s中設(shè)置了復(fù)位中斷函數(shù)為SECTION.noinitCODE,即把代碼編譯進(jìn)去 編譯進(jìn)去RAMplacein {readonly,blockCodeRelocate//把代碼編譯進(jìn)去RAM(調(diào)試用,掉電丟失,非調(diào)試,則設(shè)為placein {readwrite,blockSP,把0x00000004內(nèi)容給PC。SP,把0x00000004內(nèi)容給PC。斷,用RAM的中斷向量表Linker根據(jù)icf配置文件來(lái)進(jìn)行分配內(nèi)存地址0x0007-0x1FFF-0x2001-

0x0000-中斷向量代中斷向量代碼數(shù)據(jù)堆棧命令行參ROMBootloader0x0000-RAMBootloaderRAMBootloaderRAM堆棧0x2000-0x2001-~12三天入門Cortex-M4——Kinetis系 野 開 如果是ROM啟動(dòng)(flash啟動(dòng)/*###ICF###SectionhandledbyICFeditor,don'ttouch!/*-Editorannotationfile-

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

VECTOR_TABLE的數(shù) defineexported BOOT_STACK_ADDRESS -//0x2000FFF8;/*決定代碼編譯的地址defineexported +//+0x410是前面的留給Vectordefinememorymemwithsize defineregion

ICFEDIT_region_ROM_enddefineregion +0x410 ICFEDIT_region_RAM_end|

region_RAM2_enddefineblock withalignment=8,sizedefineblockHEAP withalignment=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"~13placeataddressmem: {readonly~13火三天入門Cortex-M4——Kinetis系 野 開火//crt0.sReset_HandlerSECTIONnoinit//Reset_Handlercode_startplacein {readonly,blockCodeRelocate//把代碼編譯進(jìn)去ROM調(diào)試用,非調(diào)試,則設(shè)為placeinRAM {readwrite,blockblockCSTACK,blockHEAP

代碼編譯進(jìn)ROMLinker根據(jù)icf配置文件來(lái)進(jìn)行分配內(nèi)存地址0x0007-0x1FFF-0x2001-

0x0000- 到RAM,以 RAMROMBootloader中斷向量代碼數(shù)據(jù)堆棧命令行參0x0000-RAMBootloaderRAMBootloaderRAMCode.bss和堆棧0x1FFF-0x2000-0x2001-工程師所必備的。如果對(duì)單片機(jī)的內(nèi)存分配都不了解,那就算會(huì)寫單片機(jī)的程序,也難以保證程序的質(zhì)在工程選項(xiàng)里,設(shè)置生成mapfile就行:~14三天入門Cortex-M4——Kinetis系 野 開 設(shè)置好,編譯后,在fire_Kinetis\build\ 模式\List文件夾下就會(huì)有.map文件。 這里的內(nèi)容,就是ICF配置~15火 三天入門Cortex-M4——Kinetis系 野 開火 ICF編輯器呢呵呵,在工程名里右鍵——Options——

~16三天入門Cortex-M4——Kinetis系 野 開 ~17 三天入門Cortex-M4——Kinetis系 野 開 IAR 的是直接在野火提供的K60庫(kù)模版上添加 重建工程,但學(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系 野 開 包括#Next后,根據(jù)自己情況選擇安裝路徑設(shè)置「開始」菜單文件夾,還是繼續(xù)~23三天入門Cortex-M4——Kinetis系 野 開 經(jīng)過漫長(zhǎng)的等待噔噔噔噔??華麗麗地按個(gè)finish~24三天入門Cortex-M4——Kinetis系 野 開 IAR,語(yǔ)言選擇,按OKIAR~25三天入門Cortex-M4——Kinetis系 野 開 相對(duì)于KeilForARM、CodeWarrior而言,IAR forARM的編程界面是最簡(jiǎn)單的, ~26 三天入門Cortex-M4——Kinetis系 野 開 三 安裝仿真器驅(qū)又換會(huì)原來(lái)的安裝導(dǎo)航界面:選擇InstallKinetics開發(fā)板,選擇了用jlink作為仿真調(diào)試器,因此這里選擇jlink運(yùn)行安裝~27三天入門Cortex-M4——Kinetis系 野 開 運(yùn)行后,會(huì)自動(dòng)安裝驅(qū)動(dòng),不會(huì)有其另外另外,為了可以使等功能seggerj-~三天入門Cortex-M4——Kinetis系 野 開 地址:SetupJLinkARM安裝時(shí),一路狂Next就行安裝后,在開始菜單里找到J-FlashARM~29三天入門Cortex-M4——Kinetis系 野 開 建立IAR工創(chuàng)建工程文件一 準(zhǔn)備材在建立IAR工程前,需要 地址:KINETIS512解壓后,打 ,會(huì)看到兩個(gè)文件二 建立IAR工程過在這里 以GPIO為例子,點(diǎn)亮LED,一步步操作,講解建立工程的詳細(xì)程File——New——~30三天入門Cortex-M4——Kinetis系 野 開 建立工 里選擇Project——CreateNew~31三天入門Cortex-M4——Kinetis系 野 開 接著在彈出來(lái) 框里選擇空的工程,點(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ū)還沒有保存哦。在菜單欄里找到圖標(biāo) 點(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界面,在工程里創(chuàng)建分組~35三天入門Cortex-M4——Kinetis系 野 開 在彈出來(lái) 框里填入“app”,這樣就添加了一個(gè)app分組如此繼續(xù)添加其他分組:common、cpu、這些組有什么用呢?現(xiàn)在就往里面添加源代碼文件,添加后,你就開始明白的fire_Kinetis\src\common文件夾*.c文件全部添common分組~36三天入門Cortex-M4——Kinetis系 野 開 選中所有的*.c文件。如果你想把頭文件也放在工程里,也可以把*.h文件選中~37添加后

三天入門Cortex-M4——Kinetis系 野 開 common里的都 提供的通用庫(kù)再把 別漏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:::*//35.#ifndef#defineISR_H *先取消默認(rèn)的中斷向量元素宏定 #undef*在重新定義到自己編寫的中斷函 #define ~40*VECTOR_003VECTOR_003#undef

三天入門Cortex-M4——Kinetis系 野 開 *47.47.#endif//49/*isr.h"結(jié)尾

#defineVECTOR_003 #define#define 50#includevectors.h"http:// 51.#include 關(guān)于中斷函數(shù)的編程和isr.h的作用,可以看:中斷函數(shù)的編寫方最后,在fire_Kinetis\src\platforms文件夾下, 一份k60_tower.h文件出來(lái),命名為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注釋掉, #include"k60_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里的定/*/*Globaldefinestouseforallboards//#definefire_Kinetis\src\common\common.h添加數(shù)據(jù)類型的typedef. //無(wú)符號(hào)6. //有符號(hào)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)代碼/*****************(C)COPYRIGHT2011野 開 *文件 *描 :gpio驅(qū)動(dòng)函**實(shí)驗(yàn)平 :野火kinetis開發(fā)*庫(kù)版 *嵌入系 **作 :野 開*淘寶 *技術(shù)支 12.#include#includeE_PTR,PTD_BASE_PTR,PTE_BASE_PTR};//定義五個(gè)指針數(shù)組保存GPIOx的地址volatilestructPORT_MemMap21. 野 開**函數(shù)名稱*功能說(shuō)明:初始*參數(shù)說(shuō)明 引腳方向,0=輸入,1= 輸出初始狀態(tài),0=低電平,1=高電平(對(duì)輸入無(wú)效*函數(shù)返回:*修改時(shí)間:2012-1- 已測(cè)* 注voidgpio_init(PORTxportx,u8n,IOcfg,u8{ASSERT(n32u)&&data2u)使用斷言檢查輸入、電平是否為~43//選擇PORTx_PCRx,每個(gè)端口都有個(gè)//if//選擇PORTx_PCRx,每個(gè)端口都有個(gè)//if(cfg=={GPIO_PDDR_REG(GPIOx[portx])|= //端口方向?yàn)檩攊f(data=={GPIOPDORREG(GPIOx[portx])|=(1<<n)對(duì)端口輸出控制,輸出為 GPIOPDORREG(GPIOx[portx&=~(1<<n);//對(duì)端口輸出控制,輸出為 GPIOPDDRREG(GPIOx[portx&= //56.58. 野火開**函數(shù)名稱*功能說(shuō)明:設(shè)置引腳*參數(shù)說(shuō)明 端 輸出初始狀態(tài),0=低電平,1=高電*函數(shù)返回:*修改時(shí)間:2012-1- 已測(cè)* 注voidgpio_set(PORTxportx,u8n,u8{ASSERT(n32u)&&data2u)使用斷言檢查輸入、電平是否為if(data==GPIOPDORREG(GPIOx[portx|= //GPIOPDORREG(GPIOx[portx&= //78.在gpio.h里添加變量和函數(shù) #ifndef#define typedefenum //{ ~ ~44 11.

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

野 開實(shí)驗(yàn)說(shuō)明:野火GPIO實(shí)驗(yàn),利用LED來(lái)顯示電平高低實(shí)驗(yàn)操作:

實(shí)驗(yàn)效果:LED0每隔實(shí)驗(yàn)?zāi)康模好靼兹绾卧O(shè)置IO口電平 * 注:野火Kinetis開發(fā)板的LED0~3,分別接PTD15~PTD12,低電平點(diǎn)/{

gpioinit(PORTD,15,GPO,HIGH);//PTD15:輸出高電平,始化LED0,{

timedelayms(500);}

//設(shè)置PTD15輸出低電平即LED0////設(shè)置PTD15輸出高電平即LED0//~45O(∩_∩)o哈哈,添加好文件了,現(xiàn)在需要配置工程了,不~45三天入門Cortex-M4——Kinetis系 野 開 IAR工程這樣,在調(diào)試的時(shí)候 選擇Debug;發(fā)布產(chǎn)品或者比賽的時(shí)候 選Release,切換起來(lái)非常方便 有時(shí)會(huì)發(fā)現(xiàn)他們并沒有Debug模式和Release模式,取而代之的是ROM模式、RAM模式、flash模式等等,這些都是可以自行修改的:ProjectEditConfigurations彈出來(lái)的界面里選擇:new~46三天入門Cortex-M4——Kinetis系 野 開 運(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í)。 就用Debug模式來(lái)講解:在工作區(qū)上:右鍵——~47三天入門Cortex-M4——Kinetis系 野 開 然后就會(huì)~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—— 設(shè)置輸出~52三天入門Cortex-M4——Kinetis系 野 開 編譯工 到單片機(jī)上的,當(dāng)然選擇C/C++Compiler——Optimizations優(yōu)化等級(jí)Release模式里,可以選擇最大優(yōu)化,但在發(fā)布前,需要對(duì)優(yōu)化后的效果進(jìn)行~53三天入門Cortex-M4——Kinetis系 野 開 C/C++Compiler——Preprocessor預(yù)處理Additionalincludedirectories:(oneperline)文本編輯框里填80.在這里填入文件在的文件夾,預(yù)處理器編譯的時(shí)候,就會(huì)搜索這些文件夾, 表示上一Definedsymbols:(oneperline)文本編輯框里填入~54

三天入門Cortex-M4——Kinetis系 野 開 這里是用來(lái)宏定義變量,對(duì)整個(gè)工程有效,相當(dāng)于在頭#define#define#define#define注意:如果在Definedsymbols:(oneperline)這里填入了DEBUG,那就要注釋掉fire_Kinetis\src\common\common.h里面DEBUG的宏定義。OutputConverter——Output輸出格式轉(zhuǎn)這里可以設(shè)置編譯代碼后,把代碼轉(zhuǎn)化成其他格式 設(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,512KBFlash128KBSRAM啟動(dòng),可以選擇512KB_Pflash.icf256KB_Pflash_256KB_Dflash.icf,兩者的區(qū)別就在于,后512KBFlash分一半出來(lái),作為保存其他數(shù)據(jù)用,而不是全部用來(lái)保存程序~56火 三天入門Cortex-M4——Kinetis系 野 開火Release模式,肯定是從ROM啟動(dòng),即可選擇512KB_Pflash.icf或者256KB_Pflash_256KB_Dflash.icf。而Release模式因?yàn)闆]有調(diào)試信息,所以是不能使用jlink等調(diào)試器來(lái)Debug的。 表示IAR工程所在 表示上一Linker——Automaticruntimelibrary 自動(dòng)庫(kù)跟預(yù)處理時(shí)設(shè)置頭文件所在的文件夾一樣,這里是設(shè)置庫(kù)所在的~57三天入門Cortex-M4——Kinetis系 野 開 如果用到其他已經(jīng)編譯好的庫(kù),那就把庫(kù)所在的文件夾添加進(jìn)去Linker— 優(yōu)~58三天入門Cortex-M4——Kinetis系 野 開 在這里,我就不選擇優(yōu)化了Linker— 列可以生成關(guān)于內(nèi)存分布、編譯后生成文件的大小等各種信息的文~59三天入門Cortex-M4——Kinetis系 野 開 勾上Generainkermapfile,編譯后Debug模式為例,在工程的文件夾下生成:fire_Kinetis\build\gpio_demo\Debug\List\fire_gpio_demo.map文件,打開~60三天入門Cortex-M4——Kinetis系 野 開 里面有很多詳細(xì)的信息,方 了解工程編譯后內(nèi)存的使用情況等Debugger 仿真器設(shè)在Driver里有多種可供選擇的調(diào)試方式。野火Kinetis開發(fā)板配置了jlink 可供調(diào)試,因此可以在這里選擇J-Link/J-Trace;如果想 Simulator。即硬件調(diào)試,選擇J-Link/J-Trace ~61三天入門Cortex-M4——Kinetis系 野 開 仿真SimulatorDebugger 設(shè) ,需要勾上Useflashloader,不然 Jlink則不需要也可~62三天入門Cortex-M4——Kinetis系 野 開 J-Link/J-Trace 設(shè)~63三天入門Cortex-M4——Kinetis系 野 開 J-Link/J-Trace—— Jlink連接設(shè)野 開

~64火 三天入門Cortex-M4——Kinetis系 野 開火這里可以選擇Jlink 方式:JTAG和Warning[Pa082]:undefinedbehavior:theorderofvolatileaccessesisundefinedinthisstatement提示警告的代碼printf(printf("Flashparameterversion原因很簡(jiǎn)單,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工程文件夾,里面把gpio_demo工程文件夾 _demo,記得保留后綴。修改后~66三天入門Cortex-M4——Kinetis系 野 開 然后在IAR的工作區(qū)里添加工程就行(當(dāng)然,你也可以新建工作區(qū))這樣就可以不需要重新設(shè)置就建立好~67IAR使用

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

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

:打印:撤銷:恢查找替換功能為

:查找內(nèi)容,這里為查找fire:查找上:查找下:查:替跳轉(zhuǎn)功能:光標(biāo)跳到指定行列:設(shè)置書簽:調(diào)到下個(gè)書簽:跳回上個(gè)頁(yè)面:跳到下個(gè)頁(yè)面:編譯當(dāng)前文件:編譯整個(gè)工程:取消編譯~70~70:: ,直接調(diào)設(shè) 三天入門Cortex-M4——Kinetis系 野 開 工作區(qū)工程的選定在IAR里,一個(gè)工作區(qū)可以有多個(gè)工程。如下圖,選中的工程,會(huì)用粗體表

如果用上圖下面的選框來(lái)切換工程~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ǔ):全速運(yùn):退在菜單欄里選擇view,就可以看到很多的調(diào)~74三天入門Cortex-M4——Kinetis系 野 開 如果想看變量的值,可以直接光標(biāo)選中該變量,然后右鍵——addto調(diào)試功能跟其他編譯器類似用 進(jìn)入安全保護(hù)狀態(tài),就需要擦 就才能繼續(xù)燒寫程序,燒寫時(shí)會(huì)提示~75三天入門Cortex-M4——Kinetis系 野 開 在使用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接口來(lái)Jlink、BDM等器,容易出錯(cuò),甚至不了。使 仿真調(diào)要要使用仿真調(diào)試,首先就要在選項(xiàng)里設(shè)置調(diào)試器仿真~76三天入門Cortex-M4——Kinetis系 野 開 首先,在common.h里添 #define #define printf.h里修改printf函數(shù),即把下面代碼printf(constchar*fmt,{va_listintrvalue;info.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. *Initializethepointer.31. va_start(ap,rvalue=printk(&info,fmt,*Cleanupthevariablelengthargumentreturn28.這樣就可以使用仿真了。如果不是仿真 燒寫 上,記得注釋common.h里的Simulator定義方式跟jlink一樣,直接點(diǎn)擊 按鈕~78 三天入門Cortex-M4——Kinetis系 野 開 IAR界面在菜單欄——Tools—— ~79三天入門Cortex-M4——Kinetis系 野 開 ~80 三天入門Cortex-M4——Kinetis系 野 開 野火 模實(shí)驗(yàn)實(shí)151編程風(fēng)格的GPIO實(shí)驗(yàn)輸出251編程風(fēng)格的GPIO實(shí)驗(yàn)輸入輸出測(cè)3GPIO實(shí)驗(yàn)簡(jiǎn)單4GPIO實(shí)驗(yàn)并行讀寫測(cè)5GPIO實(shí)驗(yàn)綜合6LED綜合測(cè)試7EXTI綜合測(cè)試8串口發(fā)送例9串口查詢接收串口中斷接收ADC綜合測(cè)試DACLEDDAC實(shí)驗(yàn)萬(wàn)用表測(cè)DACADC測(cè)實(shí)驗(yàn)示波器簡(jiǎn)單LED測(cè)試FTM輸入捕捉中斷測(cè)PIT定時(shí)中斷測(cè)試?yán)?、輸入捕捉、PIT中斷綜合LPT脈沖計(jì)數(shù)中PIT定LPT脈沖計(jì)數(shù)實(shí)DMAGPIO數(shù)據(jù)實(shí)I2C通信實(shí)驗(yàn)~81 三天入門Cortex-M4——Kinetis系 野 開 配置系統(tǒng)頻 CMSIScos、sin~82 三天入門Cortex-M4——Kinetis系 野 開 K60前函數(shù)接口,良好的編程風(fēng)格,讓你可以不了解寄存器配置的情況下快Kinetis 快,寄存器越來(lái)越多,就算你能完全記住51的所有寄存器,但你能記得所有的Kinetis系列的寄存器嗎?現(xiàn)在的發(fā)展方向是單片機(jī)功能越來(lái)越強(qiáng)大,寄存器越來(lái)越復(fù) 野火KineticsK60庫(kù),盡可能地把底層的驅(qū)動(dòng)完 戶可以直接調(diào)用API接口,而不必慢慢對(duì)著datasheet來(lái)研究。例如UART、FTM、I2C等模塊,函數(shù) 當(dāng)然main函數(shù)里中途更改時(shí)鐘頻率,就需要重新初始化,以便重新計(jì)算和選野火KineticsK60庫(kù),部分功能的實(shí)現(xiàn),提供了兩種或兩種以上的實(shí)現(xiàn)方法,一在編寫庫(kù)的工程中,部分代碼參考了其他人例程,在野火KineticsK60庫(kù)代碼中都有備注。代碼會(huì)不斷更新,不一定更新到上,如果與代碼有相互不由于個(gè)人能力及時(shí)間所限,出錯(cuò)之處,在所難免,歡迎各位錯(cuò)誤及提出建議m淘寶地址~83快速開發(fā)指

三天入門Cortex-M4——Kinetis系 野 開 快速入門:了解野火Kinetis工程野火Kinetis工程文件講config

模版工程的app文

~84 三天入門Cortex-M4——Kinetis系 野 開 頭文件作通用配置同文件,與其他工程共用的工程頭文件,用于針對(duì)特定的工程的配置和包含底層動(dòng)頭文件工程的中斷配置頭野火整理出來(lái)的快速?gòu)?fù)用管腳設(shè)置頭配置時(shí)鐘和開發(fā)板打開fire_Kinetis文件夾下IAR工程文件源代碼文 工程模版工作區(qū) 工程例程工作區(qū)IAR~85三天入門Cortex-M4——Kinetis系 野 開 工作現(xiàn)在就是要把所有的工程文件都放在這個(gè)fire_Kinetis\build打工程保存了一些工程的設(shè)置信另外,fire_Kinetis\build文件夾里還有configfiles文件夾iar.h文件configfiles文件夾里放的就是linker配置文~86三天入門Cortex-M4——Kinetis系 野 開 iar.h是用來(lái)專門配置IAR編譯的頭文件,這里實(shí)際上沒用到所有的源代碼文件都放在這里 自帶的Kinetis例

如printf函數(shù)。野火編寫的Kinetis例 uC/OS相關(guān)的代碼這個(gè)工作區(qū)里,包含了多個(gè)工程,用IAR打開就可以看到~87三天入門Cortex-M4——Kinetis系 野 開 用戶應(yīng)用文件放在fire_Kinetis\src\app文件夾例程的應(yīng)用文件放在 ~88 三天入門Cortex-M4——Kinetis系 野 開 快速?gòu)?fù)野火K60庫(kù),本身已經(jīng)設(shè)置了默認(rèn)的各個(gè)模塊通道所對(duì)應(yīng)的管腳。其實(shí)就fire_Kinetis\src\drivers\fire_drivers_cfg.h文件里進(jìn)行設(shè)~89 三天入門Cortex-M4——Kinetis系 野 開 中斷飛思卡爾公司提供的模版里,已經(jīng)提供有中斷函數(shù)的參主要用到fire_Kinetis\sr u文件下的vectors.c和vectors.h文件,這兩個(gè)用來(lái)定義中斷向量表和定義了一個(gè)默認(rèn)的中斷服務(wù)函數(shù)。vectors.c里vectors.h文件里~90三天入門Cortex-M4——Kinetis系 野 開 默認(rèn)的定如果不重新中斷向量指針,中斷向量指針就會(huì)default_isr默認(rèn)的中斷向量服務(wù)函數(shù)里。有時(shí)候,的程序運(yùn)行異常,不妨打開串口助手,看看是不是跑到default_isr服務(wù)函數(shù)里,如果是,那往往都是代碼有bug。為了重 中斷到指 指定的中斷向量服務(wù)函數(shù)里 中斷向量指針和編寫中斷向量服務(wù)函數(shù)~91三天入門Cortex-M4——Kinetis系 野 開 在isr.h文件里,可以看到野火K60模版里已經(jīng)在注解上寫了參考模版,依葫畫瓢就可#ifndef#defineISR_H *先取消默認(rèn)的中斷向量元素宏定 #undef *在重新定義到自己編寫的中斷函 #define* #undef #define 12.13. extrenvoid14.17.#endif//19./*Endof"isr.h"具體例子,可參考以下例程FTM輸入捕捉中斷測(cè)PIT定時(shí)中斷測(cè)試、輸入捕捉、PIT中斷~92 三天入門Cortex-M4——Kinetis系 野 開 重要變量、函數(shù)、宏定義重要的全部變量名功能說(shuō)內(nèi)核時(shí)鐘內(nèi)核時(shí)鐘總線中斷向量表數(shù)重要的全局宏定義名功能說(shuō)Debug定義輸出調(diào)試信定義系統(tǒng)定仿重要的函數(shù)列表名功能說(shuō)串口輸設(shè)置鎖相環(huán)超全局宏定義詳在工程選項(xiàng)那里

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

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

voidsysinit{uart_init(FIRE_PORT,}//初始化printf(constchar*fmt,要使用printf,需要定義printf的輸出信息,在k60_fire.h里 ***功能說(shuō)明:定義printf***功能說(shuō)明:定義printf端口串口#define這里是定義了輸出的端口和波特率sysinit.c文件里的sysinit#define功能說(shuō)通過串口發(fā)送數(shù)重定向 rvalueprintk(&infofmtap);//數(shù)printf函數(shù)是可以 rvalueprintk(&infofmtap);//數(shù)intprintf(constchar*fmt,{PRINTK_INFOinfo.func&out ~95 9.

三天入門Cortex-M4——Kinetis系 野 開 intprintk(PRINTK_INFO*info,constchar*fmt,va_list{for(p=(char*)fmt;(c=*p)!=0;{printk_putc(c,&count,//c傳遞給}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ù),例如改為L(zhǎng)CD安全方便在調(diào)試階段就能檢查出錯(cuò)誤,消滅bug。斷相信現(xiàn)在還存在著很多連斷言是什么都不知道的工程師,更別說(shuō)是初學(xué)者了~96ASSERT(==ADC0)&&(ch>=AD8&&ch<=AD18))||==ASSERT(==ADC0)&&(ch>=AD8&&ch<=AD18))||==ADC1)&&(ch>=AD4a&&ch<=AD17)))//使用斷言_CHn是否正斷言,其實(shí)就是一個(gè)宏定義 /*注:野火修改過這里的代碼,提供例子是不一樣的#defineASSERT(expr)if(!(expr))assert_failed(FILE,LINE#define//如果斷言條件不成立,進(jìn)入了錯(cuò)誤狀態(tài),就會(huì)打印錯(cuò)誤信息和用LED{LEDwhile{#ifdefDEBUG); // 21.如果定義了DEBUG,就會(huì)對(duì)斷言里的條件進(jìn)行檢查,條件不成立就提示錯(cuò)誤信 例如傳遞給函數(shù)的變量取值范圍是否正確。例如在ADC模塊里,可以看到很多函數(shù)的如果傳遞錯(cuò)誤的參量,就會(huì)出錯(cuò),在串口里可以看到錯(cuò)誤的位置 段就解決bug。~97typedef{ 三天入門typedef{ 關(guān)于斷言的使用,從林銳的《高質(zhì)量C編程指南》里提取了一段斷言的使用則程序一般分為Debug版本和Release版本,Debug版本用 調(diào)試版 給用戶使用【規(guī)則6-5-1】使用斷言捕捉不應(yīng)該發(fā)生的情況。不要情況與錯(cuò)誤【規(guī)6-5-2】在函數(shù)的處,使用斷言檢查參數(shù)的有效性()【建議--】在編寫函數(shù)時(shí),要進(jìn)行反復(fù)的考查,并且自問:“我打算做哪些【建議6-5-2】一般教科書都鼓勵(lì)程序員們進(jìn)行防錯(cuò)設(shè)計(jì),但要記住這種編程風(fēng)要使用斷言進(jìn)行。枚滅bug。ADC.h文件如果打開其他網(wǎng)絡(luò)上共享的會(huì)發(fā)現(xiàn)他們往往都是使用宏定義義是僅僅進(jìn)行替換操如果打開其他網(wǎng)絡(luò)上共享的會(huì)發(fā)現(xiàn)他們往往都是使用宏定義~98 三天入門 師來(lái)說(shuō),對(duì)程序的安全性進(jìn)行檢測(cè),那是一個(gè)基本的要求,但可惜很多程序員都1.1.void ,ADC_Ch舉個(gè)例子~99GPIO模塊

三天入門Cortex-M4——Kinetis系 野 開 快速入門:GPIO庫(kù)使用形參變 名及其作形參變作取端口PORTA,PORTB,PORTC,PORTD,n引腳輸入輸出GPI,GPO,GPI_DOWN,GPI_UP,GPI_PF,GPI_DOWN_PF,GPI_UP_PF, GPO_HDS_SSR。數(shù)常用枚舉名功能說(shuō)端管腳輸入輸出配函數(shù)列函數(shù)名函數(shù)功初始化設(shè)置引腳反轉(zhuǎn)引腳獲取IO狀宏定義列宏定義功能說(shuō)設(shè)置引腳輸出電平(這里的x要替換成例如引腳輸入電平(這里的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ù),表示對(duì)應(yīng)的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_OUT表示PTA15~PTA0PTA_WORD1_OUT表示PTA31~PTA16換成A~E,n要替換為0~1的數(shù),表示應(yīng)的16位引腳號(hào)16位引腳輸入輸出方向(這里的要替A~E,n要替換為0~1的數(shù),示對(duì)16位引腳號(hào)設(shè)置引腳翻轉(zhuǎn)引腳獲取IO狀11224三天入門Cortex-M4——三天入門Cortex-M4——is系 野火~10148816位48816位數(shù)16位數(shù)枚舉詳枚舉定

枚舉作用來(lái)定義枚舉定typedefenum{

//定義管腳輸入方//定義管腳輸出方

常用的就GPI

//////輸入,帶無(wú)源濾波

GPIDOWNPF=GPIDOWN|GPIPF, |GPI_PF

//輸入下拉,帶無(wú)源濾波//輸入上拉,帶無(wú)源濾波

//輸出高驅(qū)動(dòng)能//輸出慢enumenum{16.

//輸出高驅(qū)動(dòng)能力、慢變枚舉作用來(lái)定義GPIO管腳輸入輸出的配置~102三天入門Cortex-M4——Kinetis系 野 開 常用的就前面五種,例如輸入濾波,可用著按鍵上,可以設(shè)置為上拉下拉,省外部電阻函數(shù)詳解函數(shù)原

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

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

gpiogpio//PTA27//初始化PTA266. gpio_turn(PORTx,u8 功能說(shuō)IO口電傳遞參參參考形參變名及其作用~103函數(shù)返無(wú)調(diào)用例

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

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

設(shè)置電平輸出。這個(gè)是通用顯示名字而已,實(shí)際上這里的x要替換成A~E的,n要替換為0~31的數(shù),表示對(duì)應(yīng)的引腳號(hào),例如調(diào)用例子舉10.PTA0=11.=12.=~104 三天入門Cortex-M4——Kinetis系 野 開 功能說(shuō)電平輸入。這個(gè)是通用顯示名字而已,實(shí)際上這里的x要替換成A~E的,n要替換為0~31的數(shù),表示對(duì)應(yīng)的引腳號(hào),例如調(diào)用例子舉13.data=PTA014.15.功能說(shuō)

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

應(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位輸出功能說(shuō)

設(shè)置8位引腳輸入電平(這里的x要替換成A~E,n要替換為0~3的數(shù),表示應(yīng)的8位引腳號(hào)~105三天入門三天入門Cortex-M4——Kinetis系 野火調(diào)用例子舉data=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變功能說(shuō)

示對(duì)應(yīng)的8位引腳號(hào))DDRA_BYTE0=0xFF;//DDRA_BYTE0=0xFF;//表示PTA7~ 8位設(shè)置輸入輸出方向?yàn)檩擠DRA_BYTE1=0xFF;//表示PTA15~ 8位設(shè)置輸入輸出方向?yàn)檩擠DRA_BYTE2=0xFF;//表示PTA23~PTA168DDRA_BYTE3=0xFF;//表示PTA31~PTA248功能說(shuō)

應(yīng)的16位引腳號(hào))調(diào)用例子舉1.2.功能說(shuō)

應(yīng)的16位引腳號(hào))調(diào)用例子舉1.u16data=PTA15~輸入數(shù)據(jù)到data2.u16data=PTA31~輸入數(shù)據(jù)到data~10623.//展開后:(GPIO_PDOR_REG(GPIOx[PORTA^=(1 三天23.//展開后:(GPIO_PDOR_REG(GPIOx[PORTA^=(1功能說(shuō)示對(duì)應(yīng)的16位引腳號(hào))調(diào)用例子舉1.DDRAPTA15~2.PTA31~19.#define19.#define 功能說(shuō)設(shè)置輸出電平為傳遞參 01。注意,不能為變量或(如果需要傳遞變量,可以用GPIO_SET_1bit或者gpio_get展開舉GPIOGPIOSET(PORTA,27,1);//PA27GPIOSETGPIO_SET(PORTA,26,0);//PA26定22.22.#define (GPIO_PDOR_REG(GPIOx[PORTx])^=功能說(shuō)翻轉(zhuǎn)指定管

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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)論