版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、EXTERNAL USE熊宇,梁紹忠,李珂 CAS資深工程師2016年5月KINETIS SDK V2KINETIS SDK V2培訓(xùn)教程EXTERNAL USE1KSDK V2 初探初探EXTERNAL USE2Kinetis SDK v2 Kinetis SDK v2 - - 全全貌貌KSDKKSDKKinetis SDK v2是新的支持軟件開(kāi)發(fā)包,與 v1.x 不完全兼容架構(gòu):CMSIS-CORE兼容扁平化外設(shè)驅(qū)動(dòng)層針對(duì)通訊外設(shè),支持可選DMA功能的高級(jí)API集成嵌入式操作系統(tǒng):FreeRTOS, Micrium uC/OS-II & III原生操作系統(tǒng)級(jí)API集成協(xié)議棧 &am
2、p; 中間件USB Host, Device and OTG協(xié)議棧LwIP開(kāi)源TCP/IP協(xié)議棧, FatFS開(kāi)源FAT文件系統(tǒng)wolfSSL & mbedTLS 傳輸層安全協(xié)議與加密算法SD and eMMC軟件框架示例代碼:外設(shè)驅(qū)動(dòng)用法高階應(yīng)用demos基于操作系統(tǒng)demos授權(quán)許可:BSD 3開(kāi)源協(xié)議針對(duì)startup, drivers, USB stack開(kāi)發(fā)環(huán)境支持:KDS, IAR, Keil, Atollic, GCC w/CMake可靠的代碼質(zhì)量量產(chǎn)級(jí)代碼兼容MISRA 2004標(biāo)準(zhǔn)通過(guò)靜態(tài)分析統(tǒng)計(jì)工具測(cè)試FreeRTOSuC/OS-II/IIIEXTERNAL USE
3、3Kinetis SDK Kinetis SDK v2 -v2 - 符合CMSIS CortexCMSIS Cortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS-CORECMSIS-CORE 提供了一層對(duì)于Cortex-M內(nèi)核的標(biāo)準(zhǔn)訪問(wèn)接口和定義:支持SysTick, NVIC, FPU等內(nèi)核通用屬性的配置標(biāo)準(zhǔn)化的Cortex-M MCU頭文件定義格式標(biāo)準(zhǔn)化的系統(tǒng)初始化實(shí)現(xiàn) SystemInit()、內(nèi)聯(lián)函數(shù)以支持嵌入特殊指令的操作CMSIS-DSPCMSIS-DSP 為Cortex-M家族量身定制的一套通用數(shù)字信號(hào)處理和數(shù)學(xué)運(yùn)算的函數(shù)庫(kù)。特別在Cortex-M4內(nèi)核上通過(guò)其專(zhuān)用的數(shù)字信號(hào)處理指令集進(jìn)行
4、了優(yōu)化。CMSIS-CORE and CMSIS-DSPMicrocontroller HardwareStacks / MiddlewareBoard SupportApplication CodeRTOSPeripheral DriversEXTERNAL USE4Kinetis SDK Kinetis SDK v2 - v2 - 高效率的外設(shè)驅(qū)動(dòng)層方便裁剪所有外設(shè)擁有一對(duì)獨(dú)立的 IP.c 和 IP.h 驅(qū)動(dòng)文件容易移植針對(duì)所有Kinetis家族使用統(tǒng)一的API風(fēng)格不用看數(shù)據(jù)手冊(cè)所有驅(qū)動(dòng)實(shí)現(xiàn)了簡(jiǎn)易API (Functional API) 以全面覆蓋外設(shè)的功能無(wú)需了解協(xié)議針對(duì)通訊接口外設(shè) (
5、UART, SPI, I2C, CAN等) 提供了更容易上手的高階API (Transactional API)支持查詢(xún)方式和非阻塞方式,非阻塞方式通過(guò)中斷實(shí)現(xiàn)無(wú)需用戶(hù)編寫(xiě)中斷服務(wù)內(nèi)容,無(wú)需用戶(hù)配置中斷提高效率為通訊接口外設(shè)提供了結(jié)合DMA獨(dú)立的驅(qū)動(dòng)實(shí)現(xiàn)IP_DMA.c 和 IP_DMA.h支持多任務(wù)為通訊接口外設(shè)提供了基于原生RTOS API獨(dú)立的驅(qū)動(dòng)實(shí)現(xiàn)IP_FreeRTOS.c 和 IP_FreeRTOS.hCMSIS-CORE and CMSIS-DSPMicrocontroller HardwareStacks / MiddlewareBoard SupportApplication
6、 CodeRTOSPeripheral DriversEXTERNAL USE5Kinetis SDK Kinetis SDK v2 v2 操作系統(tǒng)支持SDK包含了FreeRTOS, uC/OS-II和uC/OS-III操作系統(tǒng)的源碼和移植文件通訊接口外設(shè)針對(duì)每個(gè)RTOS有單獨(dú)的驅(qū)動(dòng)實(shí)現(xiàn):fsl_dspi_freertos.c / fsl_dspi_ucosii.c / fsl_dspi_ucosiii.c針對(duì)FreeRTOS提供了豐富的例程:freertos_dspifreertos_eventfreertos_genericfreertos_hellofreertos_i2cfreerto
7、s_mutexfreertos_queuefreertos_semfreertos_swtimerfreertos_ticklesfreertos_uartCMSIS-CORE and CMSIS-DSPMicrocontroller HardwareStacks / MiddlewareBoard SupportApplication CodeRTOSPeripheral DriversEXTERNAL USE6Kinetis SDK Kinetis SDK v2 v2 全新USBUSB協(xié)議棧全新KSDK USBKSDK USB協(xié)議棧 提供了一個(gè)完整的、開(kāi)源的USB設(shè)備和主機(jī)協(xié)議棧。可以無(wú)縫
8、運(yùn)行于裸跑環(huán)境或基于操作系統(tǒng)的多任務(wù)環(huán)境,并且提供了豐富的設(shè)備類(lèi)驅(qū)動(dòng)和應(yīng)用示例。 總共超過(guò)7070個(gè)應(yīng)用示例 支持7種USB設(shè)備類(lèi)型提供了3個(gè)復(fù)合設(shè)備的示例支持5種USB主機(jī)類(lèi)型包括對(duì)于USB hub的支持支持USB 2.0全速和高速控制器高質(zhì)量協(xié)議棧,協(xié)議棧通過(guò)USB-IF認(rèn)證代碼優(yōu)化 最小僅占用 6K Flash 和 2K RAM部分設(shè)備示例提供了 “Lite” 輕量級(jí)的代碼CMSIS-CORE and CMSIS-DSPMicrocontroller HardwareStacks / MiddlewareBoard SupportApplication CodeRTOSPeriphera
9、l DriversEXTERNAL USE7Kinetis SDK v2 Kinetis SDK v2 FatFsFatFs嵌入式FATFAT文件系統(tǒng)FatFS是專(zhuān)為小型嵌入式系統(tǒng)設(shè)計(jì)的開(kāi)源FAT文件系統(tǒng):完全兼容ANSI C標(biāo)準(zhǔn)的代碼分離的I/O接口層支持FAT12, FAT16和FAT32文件系統(tǒng)緊湊的代碼體積靈活的配置選項(xiàng)支持:支持多個(gè)卷和分區(qū)支持長(zhǎng)文件名支持只讀模式配置支持裸機(jī)或者多任務(wù)環(huán)境運(yùn)行SDK中提供了相應(yīng)的應(yīng)用示例:sdcard_fatfsusb_host_msd_fatfsCMSIS-CORE and CMSIS-DSPMicrocontroller HardwareStac
10、ks / MiddlewareBoard SupportApplication CodeRTOSPeripheral DriversFatFs是第三方提供的軟件, 詳情訪問(wèn) /fsw/ff/00index_e.htmlEXTERNAL USE8Kinetis SDK v2 Kinetis SDK v2 lwIPlwIP嵌入式網(wǎng)絡(luò)協(xié)議棧lwIP是針對(duì)嵌入式系統(tǒng)的輕量級(jí)、全功能的TCP/IP協(xié)議棧,支持以下子協(xié)議: 示例程序包括:lwip_httpsrvlwip_pinglwip_tcpecholwip_udpechoCMSIS-CORE and CMSIS-D
11、SPMicrocontroller HardwareStacks / MiddlewareBoard SupportApplication CodeRTOSPeripheral DriverslwIP是第三方提供的軟件, 詳情訪問(wèn) /projects/lwip/ARPIGMPIPv4DNSIPv6DHCPTCPSNMPUDPPPPICMPPPPoEEXTERNAL USE9Kinetis SDK v2 Kinetis SDK v2 BSPBSP板級(jí)支持包SDK 2.0 針對(duì)每一個(gè)示例工程都提供了相應(yīng)的BSP文件,以提供對(duì)硬件環(huán)境(時(shí)鐘、I/O資
12、源等)標(biāo)準(zhǔn)化的的配置流程board.cboard.hclock_config.cclock_config.hpin_mux.cpin_mux.hCMSIS-CORE and CMSIS-DSPMicrocontroller HardwareStacks / MiddlewareBoard SupportApplication CodeRTOSPeripheral DriversEXTERNAL USE10Kinetis SDK v2 Kinetis SDK v2 豐富的應(yīng)用層示例代碼SDK 2.0 提供了非常豐富的應(yīng)用層示例代碼,簡(jiǎn)化了用戶(hù)對(duì)于一個(gè)新MCU平臺(tái)的上手難度demo_apps 目錄
13、下提供了數(shù)十個(gè)常見(jiàn)的應(yīng)用示例driver_examples 目錄下針對(duì)每一個(gè)外設(shè)都有1個(gè)或者多個(gè)示例,用戶(hù)通過(guò)學(xué)習(xí)這些示例代碼便可以快速掌握相應(yīng)API的使用方法和模塊的功能rtos_examples 中提供了多個(gè)基于FreeRTOS的多個(gè)示例以及2個(gè)uC/OS的基本示例usb_examples 中提供了各種USB設(shè)備和主機(jī)類(lèi)的示例代碼CMSIS-CORE and CMSIS-DSPMicrocontroller HardwareStacks / MiddlewareBoard SupportApplication CodeRTOSPeripheral DriversEXTERNAL USE11
14、Kinetis SDK Kinetis SDK v2v2 - - 開(kāi)發(fā)環(huán)境支持EXTERNAL USE12Kinetis SDK v2 Kinetis SDK v2 - - 20162016發(fā)布計(jì)劃Release 1 2016Release 1 2016年1 1月2727日支持Kinetis K & L系列中的熱點(diǎn)產(chǎn)品FRDM-K22F, TWR-K22F120MTWR-K21F120MAFRDM-K64F, TWR-K64F120MTWR-K65F180MTWR-K81F150M, FRDM-K82FFRDM-KL43Z, TWR-KL43Z48MFRDM-KL27ZRelease
15、2 Release 2 20162016年5 5月底支持其他 Kinetis K & L產(chǎn)品和Kinetis M系列FRDM-KL02ZFRDM-KL03ZFRDM-KL25ZFRDM-KL26ZFRDM-KL46ZTWR-K60D100MTWR-K21D50MTWR-K24F120MTWR-KL82Z72M, FRDM-KL82ZTWR-KM34Z75MRelease 3 Release 3 20162016年5 5月底Kinetis W系列Release 4 2016Release 4 2016年6 6月底Kinetis V系列EXTERNAL USE13KSDK V2 下載下載E
16、XTERNAL USE14Kinetis Expert Kinetis Expert 在線工具平臺(tái)介紹KSDK v2通過(guò)Kinetis Expert 在線工具平臺(tái)中的SDK Builder進(jìn)行構(gòu)建和下載僅包含所需要的MCU或指定開(kāi)發(fā)板的內(nèi)容,不再提供單一的包形式來(lái)支持所有Kinetis家族產(chǎn)品可選擇僅包含指定的開(kāi)發(fā)環(huán)境(IAR, MDK, KDS, GCC, TrueSTUDIO)下的示例代碼可選擇僅包含指定的實(shí)時(shí)操作系統(tǒng)(FreeRTOS, uC/OS-II, uC/OS-III)的源碼, 移植與范例KSDK v1.3同樣可以通過(guò)SDK Builder進(jìn)行構(gòu)建和下載。SDK v2通過(guò)Kine
17、tis Expert的SDK Builder工具進(jìn)行下載, EXTERNAL USE15使用 SDK Builder SDK Builder 入口點(diǎn)擊“Build an SDK”啟動(dòng)SDK builder工具EXTERNAL USE16使用 SDK Builder SDK Builder 選擇型號(hào)完成登錄后, 可以根據(jù)需要用到的MCU型號(hào)或者某一款開(kāi)發(fā)板來(lái)選擇所需的配置選擇以MCU型號(hào)的配置將包含支持該型號(hào)所有開(kāi)發(fā)板的工程EXTERNAL USE17使用 SDK Builder SDK Builder 配置12341)選擇SDK版本2)選擇開(kāi)發(fā)環(huán)境3)選擇主機(jī)操作系統(tǒng)4)選擇實(shí)時(shí)操作系統(tǒng)5)開(kāi)
18、始構(gòu)建SDK包根據(jù)復(fù)雜程度和服務(wù)器的負(fù)載不同,可能需要幾分鐘時(shí)間完成5EXTERNAL USE18使用 SDK Builder SDK Builder 下載1)當(dāng)構(gòu)建完成后,在Software Vault上會(huì)出現(xiàn)一個(gè)提示圖案,點(diǎn)擊進(jìn)入下載頁(yè)面2)點(diǎn)擊 圖標(biāo)啟動(dòng)下載任務(wù)當(dāng) 圖標(biāo)為灰色未激活狀態(tài)時(shí),用戶(hù)需要進(jìn)入右上角 User Preference 下填寫(xiě)完整的信息后才能繼續(xù)下載12EXTERNAL USE19使用 SDK Builder SDK Builder 新建配置如果需要下載另外一顆芯片或者另外一塊板卡對(duì)應(yīng)的SDK,則可以通過(guò)下面下拉菜單新增一個(gè)配置EXTERNAL USE20 解壓縮SD
19、K V2SDK V2包到本地目錄SDK V2以.zip的壓縮包形式下載到客戶(hù)的本地。完成下載后用戶(hù)需解壓縮后使用建議將SDK v2的壓縮包拷貝到c:/nxp目錄下,KDS和KSDK Projector Generator會(huì)首先搜索這個(gè)目錄下的文件EXTERNAL USE21KSDK V2 目錄與文件結(jié)構(gòu)目錄與文件結(jié)構(gòu)EXTERNAL USE22SDK v2SDK v2頂層目錄子目錄boards包含對(duì)應(yīng)開(kāi)發(fā)板的所有例程CMSISCMSIS頭文件及DSP庫(kù)devices針對(duì)芯片的驅(qū)動(dòng)源碼以和各IDE下鏈接啟動(dòng)代碼docs參考文檔middleware中間件源碼rtos操作系統(tǒng)源碼tools輔助工具E
20、XTERNAL USE23boardsboards目錄下的豐富例程EXTERNAL USE24探索hello worldhello world例程目錄構(gòu)成BSPBSP文件(每個(gè)例程獨(dú)立)board.c/h板卡配置代碼clock_config.c/h時(shí)鐘初始化代碼pin_mux.c/h引腳復(fù)用代碼應(yīng)用源碼: :hello_word.cHello world應(yīng)用其他: :hello_world.bin預(yù)編譯二進(jìn)制文件readme.txt例程操作說(shuō)明IAR工程文件KDS工程文件Keil MDK工程文件EXTERNAL USE25探索uartuart驅(qū)動(dòng)示例工程目錄構(gòu)成示例名稱(chēng)emda_transfe
21、r基于Transactional API的uart + edma組合示例interrupt基于Functional API的uart中斷示例Interrupt_ring_buffer_transfer基于Transactional API的uart環(huán)形緩沖示例Interrupt_transfer基于Transactional API的uart中斷示例polling_transfer基于Transactional API的uart查詢(xún)示例_transfer代表為基于Transactional APITransactional API的示例IAR工程文件KDS工程文件Keil MDK工程文件EXT
22、ERNAL USE26devicesdevices目錄下的驅(qū)動(dòng)代碼與啟動(dòng)文件針對(duì)具體器件的頭文件fsl_device_register.h全局通用的頭文件(包含下面2個(gè)文件)M64F12.hMK64 120MHz器件寄存器描述頭文件MK64F12_features.hMK64 120MHz器件特征宏描述頭文件CMSISCMSIS針對(duì)具體器件的啟動(dòng)與可視化描述文件(.svd)(.svd)system_M64F12.c/hsystemInit()實(shí)現(xiàn)和聲明 (SDK v2未使用)MK64F12.svdCMSIS器件可視化描述文件ARM編譯器啟動(dòng)文件與鏈接文件GCC編譯器啟動(dòng)文件與鏈接文件IAR編譯
23、器啟動(dòng)文件與鏈接文件所有驅(qū)動(dòng)代碼包含在此目錄下EXTERNAL USE27middleware middleware 與 RTOS RTOS 源碼目錄概覽中間件dma_manager提供給應(yīng)用程序動(dòng)態(tài)管理DMA資源的接口fatfs移植支持ram disk, mmc, SD(sdio or spi)和usb媒介lwipLwip源碼與移植mmcau針對(duì)M0+, M4和M7指令優(yōu)化的mmCAU加密庫(kù)sdmmc支持SD與mmc卡的驅(qū)動(dòng)包裝usb全新BSD-3 License usb驅(qū)動(dòng)庫(kù)源碼EXTERNAL USE28從Hello WorldHello World看SDK v2SDK v2工程文件構(gòu)成
24、僅包含當(dāng)前工程用到的驅(qū)動(dòng) 代碼體積優(yōu)化的PrintfEXTERNAL USE29KSDK V2 動(dòng)手實(shí)驗(yàn)動(dòng)手實(shí)驗(yàn)EXTERNAL USE30KSDK V2 KSDK V2 實(shí)驗(yàn)簡(jiǎn)介本實(shí)驗(yàn)同樣基于FRDM-K64開(kāi)發(fā)板,共包含3個(gè)小實(shí)驗(yàn)通過(guò)如下動(dòng)手實(shí)驗(yàn),您將掌握以下基本內(nèi)容:利用Project Generator工具產(chǎn)生新的IAR工程如何使用KSDK V2的簡(jiǎn)易functional API如何使用KSDK V2提供的高階Transactional APIEXTERNAL USE31動(dòng)手實(shí)驗(yàn)動(dòng)手實(shí)驗(yàn) 1PROJECT GENERATOR工具的使用工具的使用EXTERNAL USE32Project
25、 GeneratorProject Generator介紹Project Generator簡(jiǎn)介Project Generator是Kinetis SDK最新的輔助工具,用來(lái)幫助用戶(hù)在SDK代碼庫(kù)中,方便地新建自己的空工程用戶(hù)可以通過(guò)快速和高級(jí)兩種方式,簡(jiǎn)單的建立空工程支持最新的SDK V2和以前的SDK1.3版本,無(wú)縫銜接EXTERNAL USE33Project GeneratorProject Generator工具下載通過(guò)NXP官網(wǎng)KSDK的頁(yè)面,可以下載Project Generator工具:下載鏈接:http:/ USE34Project Project GeneratorGene
26、rator使用參照下圖的步驟:12選擇SDK V2代碼包的解壓縮目錄建議通過(guò)Advanced進(jìn)入高級(jí)配置EXTERNAL USE35Project Project GeneratorGenerator使用按照下圖的設(shè)置:選擇產(chǎn)生的代碼是基于開(kāi)發(fā)板還是芯片選擇生成代碼的放置路徑選擇芯片型號(hào)或者開(kāi)發(fā)板名稱(chēng)最后點(diǎn)這里產(chǎn)生代碼,done!EXTERNAL USE36查看查看運(yùn)行生成的代碼運(yùn)行生成的代碼在剛才的路徑中,找到IAR工程并打開(kāi):打開(kāi)空的工程,可以添加自己的代碼KSDK包含的API,直接調(diào)用EXTERNAL USE37瀏覽瀏覽SDK V2的的API以ADC為例,打開(kāi)fsl_adc16.h/.c
27、文件,提供了大量的functional可供調(diào)用初始化:void ADC16_Init(ADC_Type *base, const adc16_config_t *config)獲取默認(rèn)配置:void ADC16_GetDefaultConfig(adc16_config_t *config);校準(zhǔn):status_t ADC16_DoAutoCalibration(ADC_Type *base);配置采樣:void ADC16_SetChannelConfig(ADC_Type *base, uint32_t channelGroup, const adc16_channel_config_t
28、*config);讀取采樣結(jié)果:static inline uint32_t ADC16_GetChannelConversionValue(ADC_Type *base, uint32_t channelGroup)優(yōu)點(diǎn)更簡(jiǎn)單,用戶(hù)大多數(shù)時(shí)候可以不用關(guān)心底層的寄存器設(shè)置更靈活,每個(gè)外設(shè)的.c和.h文件各自獨(dú)立,可以直接拷貝并添加到用戶(hù)工程中更優(yōu)化,抽象級(jí)較低,沒(méi)有層層調(diào)用,代碼容量更小EXTERNAL USE38動(dòng)手實(shí)驗(yàn)動(dòng)手實(shí)驗(yàn)2簡(jiǎn)易簡(jiǎn)易API開(kāi)發(fā)實(shí)例開(kāi)發(fā)實(shí)例EXTERNAL USE39實(shí)驗(yàn)簡(jiǎn)介使用functional API開(kāi)發(fā)GPIO閃燈程序使用functional API開(kāi)發(fā)串口回顯程
29、序本實(shí)驗(yàn)已經(jīng)提供了源代碼,可以從提供的txt文件中拷貝EXTERNAL USE40添加必要的頭文件打開(kāi)實(shí)驗(yàn)1生成的空工程:添加如下的Include代碼(可以從提供的txt文件中拷貝)在SDK V2中,每個(gè)模塊只對(duì)應(yīng)一個(gè).c和.h文件,用戶(hù)需要使用哪些模塊,只需要包含對(duì)應(yīng)的.h文件,即可直接調(diào)用對(duì)應(yīng)的API,本實(shí)驗(yàn)共使用了:Port: 設(shè)置管腳的pinmuxClock:設(shè)置與獲取芯片的時(shí)鐘Lptmr:定時(shí)器Gpio:GPIO操作APIUart:串口操作APIEXTERNAL USE41添加GPIOGPIO代碼在main函數(shù)中,添加如下GPIO代碼:通過(guò)FRDM-K64的原理圖,可以看到紅色LED
30、燈對(duì)應(yīng)PTB22引腳將PTB22引腳的pinmux設(shè)置為GPIO將該引腳的GPIO設(shè)置為輸出調(diào)用初始化functional API初始化GPIO輸出高低電平的示例代碼Toggle輸出的電平EXTERNAL USE42添加低功耗定時(shí)器(添加低功耗定時(shí)器(lptmr)代碼)代碼該實(shí)驗(yàn)通過(guò)一個(gè)低功耗定時(shí)器來(lái)控制LED閃爍在main函數(shù)中,添加如下低功耗定時(shí)器代碼所有的外設(shè)模塊functional API,都需要定義一個(gè)簡(jiǎn)單的配置結(jié)構(gòu)體定義lptmr配置結(jié)構(gòu)體使用一個(gè)缺省配置用缺省配置初始化lptmr開(kāi)始計(jì)時(shí)設(shè)置定期,單位us,本例程為500000us使能lptmr模塊的中斷使能ARM內(nèi)核NVIC的中
31、斷,lptmr觸發(fā)NVIC產(chǎn)生中斷EXTERNAL USE43添加低功耗定時(shí)器(添加低功耗定時(shí)器(lptmr)的中斷處理函數(shù))的中斷處理函數(shù)在SDK V2中,中斷向量表定義在startup目錄下的startup_MK64F12.s文件中添加lptmr的中斷函數(shù)上一步初始化了lptmr,并且設(shè)置周期為500000us,每次計(jì)時(shí)器時(shí)間到,都會(huì)進(jìn)入lptmr的中斷在main.c中,定義中斷函數(shù),并添加如下閃燈代碼至此,便實(shí)現(xiàn)了每500000us的閃燈找到lptmr的中斷所有的中斷函數(shù)都定義在這里清除lptmr的標(biāo)志位反相紅色LED對(duì)應(yīng)的GPIOEXTERNAL USE44閃燈實(shí)驗(yàn)結(jié)果查看閃燈實(shí)驗(yàn)結(jié)果
32、查看至此,簡(jiǎn)單的閃燈程序已經(jīng)完成編譯并下載程序,可以看到紅燈閃爍在IAR中通過(guò)斷點(diǎn),可以看到lptmr的中斷被觸發(fā)擴(kuò)展實(shí)驗(yàn)嘗試修改代碼,實(shí)現(xiàn)綠燈每隔1s的閃爍添加代碼,實(shí)現(xiàn)紅綠燈交替閃爍完成后續(xù)UART實(shí)驗(yàn)紅燈閃爍EXTERNAL USE45添加添加UART代碼初始化代碼初始化與lptmr一樣,uart的functional API也需要一個(gè)配置結(jié)構(gòu)體在main函數(shù)中,添加如下代碼配置結(jié)構(gòu)體定義使用默認(rèn)配置設(shè)置波特率,并使能收發(fā)獲取uart時(shí)鐘源的頻率初始化串口使能ARM內(nèi)核NVIC中斷使能uart模塊的接收寄存器滿(mǎn),以及溢出中斷發(fā)送測(cè)試字符串EXTERNAL USE46添加添加UART中斷處
33、理函數(shù)中斷處理函數(shù)上面的代碼啟用了uart接收中斷,因此每次收到數(shù)據(jù),都會(huì)進(jìn)入中斷仿照l(shuí)ptmr的用法,在uart中斷函數(shù)中,添加回顯代碼判斷中斷的標(biāo)志位,并且確實(shí)是接收中斷讀取收到的數(shù)據(jù)將收到的數(shù)據(jù)回發(fā)EXTERNAL USE47實(shí)驗(yàn)結(jié)果與總結(jié)實(shí)驗(yàn)結(jié)果與總結(jié)實(shí)驗(yàn)結(jié)果說(shuō)明觀察開(kāi)發(fā)板,可以看到紅色LED燈每隔500000us閃爍一次打開(kāi)一個(gè)串口工具,調(diào)整波特率為115200,可以看到顯示測(cè)試字符串,并且回顯輸入的數(shù)據(jù)實(shí)驗(yàn)總結(jié)理解SDK V2中API的調(diào)用方式掌握基本的外設(shè)使用方法(gpio,lptmr,uart)掌握如何編寫(xiě)中斷處理函數(shù)擴(kuò)展實(shí)驗(yàn)代碼修改為綠色LED,每隔1s閃爍一次修改串口波特率
34、為19200,并回顯數(shù)據(jù)EXTERNAL USE48動(dòng)手實(shí)驗(yàn)動(dòng)手實(shí)驗(yàn)3(可選可選)高階高階TRANSACTIONAL API的使用的使用EXTERNAL USE49實(shí)驗(yàn)簡(jiǎn)介使用高階transactional API開(kāi)發(fā)uart程序EXTERNAL USE50Transactional APITransactional API簡(jiǎn)單講解和Functional API相比,高階的Transactional API抽象級(jí)別更高,能實(shí)現(xiàn)更為復(fù)雜的功能Transactional API接口簡(jiǎn)單,使用方便,甚至中斷都無(wú)需用戶(hù)關(guān)心復(fù)雜的機(jī)制在函數(shù)內(nèi)部實(shí)現(xiàn),用戶(hù)無(wú)需關(guān)注細(xì)節(jié)SDK V2針對(duì)Transaction
35、al API都提供了callback函數(shù),可以實(shí)現(xiàn)用戶(hù)的中斷回調(diào)函數(shù)名中有Transfer的,都是Transactional API(以UART為例)functional API: void UART_WriteBlocking(UART_Type *base, const uint8_t *data, size_t length)Transactioanl API: status_t UART_TransferSendNonBlocking(UART_Type *base, uart_handle_t *handle, uart_transfer_t *xfer);EXTERNAL USE5
36、1UART模塊模塊Transactional Transactional APIAPI說(shuō)明通過(guò)double weak機(jī)制,中斷直接進(jìn)入SDK提供的中斷函數(shù)中在startup_MK64F12.s文件中,定義double weak任何位置,不能定義與原中斷同名的函數(shù),以u(píng)art0收發(fā)中斷為例SDK提供回調(diào)函數(shù),用戶(hù)應(yīng)用層代碼可以寫(xiě)在回調(diào)函數(shù)中原中斷函數(shù)double weak重定向的函數(shù),由SDK提供,復(fù)雜處理中斷fsl_uart.c中定義EXTERNAL USE52動(dòng)手實(shí)驗(yàn)(動(dòng)手實(shí)驗(yàn)(1)同樣在實(shí)驗(yàn)1的基礎(chǔ)上,利用空工程進(jìn)行,在main函數(shù)中添加代碼添加頭文件,以及一些全局變量和宏的定義添加uar
37、t初始化代碼設(shè)置波特率初始化EXTERNAL USE53動(dòng)手實(shí)驗(yàn)(動(dòng)手實(shí)驗(yàn)(2)調(diào)用Transactional API完成數(shù)據(jù)收發(fā)創(chuàng)建handle管理收發(fā),并注冊(cè)回調(diào)函數(shù)(后文定義)判斷,如果前面的數(shù)據(jù)已經(jīng)接收完成(Rx空閑),接收發(fā)送測(cè)試數(shù)據(jù)管理狀態(tài)EXTERNAL USE54動(dòng)手實(shí)驗(yàn)(動(dòng)手實(shí)驗(yàn)(3)定義回調(diào)函數(shù)回調(diào)函數(shù)會(huì)在一個(gè)完整的數(shù)據(jù)幀(達(dá)到接收的長(zhǎng)度)接收完成后被觸發(fā)如果沒(méi)有達(dá)到指定長(zhǎng)度,則繼續(xù)接收回調(diào)函數(shù)中會(huì)傳遞SDK代碼管理的一些狀態(tài)變量判斷當(dāng)前接收空閑(說(shuō)明整幀傳輸完成)管理狀態(tài)收到的數(shù)據(jù)放入發(fā)送buffer回顯EXTERNAL USE55實(shí)驗(yàn)結(jié)果與總結(jié)實(shí)驗(yàn)結(jié)果與總結(jié)實(shí)驗(yàn)結(jié)果說(shuō)明
38、打開(kāi)一個(gè)串口工具,調(diào)整波特率為115200,輸入10個(gè)字符,可以看到回顯,如不夠10個(gè)完整幀,會(huì)持續(xù)等待接收實(shí)驗(yàn)總結(jié)再次熟悉理解SDK V2中API的調(diào)用方式理解Transactional API的使用,與回調(diào)函數(shù)的用法熟悉double weak的中斷機(jī)制EXTERNAL USE56FreeRTOS實(shí)時(shí)實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介操作系統(tǒng)簡(jiǎn)介EXTERNAL USE57FreeRTOS FreeRTOS 簡(jiǎn)介FreeRTOS是一個(gè)可移植的、開(kāi)源的小型實(shí)時(shí)操作系統(tǒng)。FreeRTOS可以免費(fèi)進(jìn)行商業(yè)應(yīng)用,被廣泛應(yīng)用在嵌入式產(chǎn)品中。FreeRTOS支持多種處理器架構(gòu)。FreeRTOS的主要特點(diǎn)如下:完全免費(fèi),商
39、業(yè)使用沒(méi)有限制優(yōu)先級(jí)調(diào)度、相同優(yōu)先級(jí)任務(wù)的輪轉(zhuǎn)調(diào)度。同時(shí)可以設(shè)置可剝奪內(nèi)核或不可剝奪內(nèi)核支持上下文切換,沒(méi)有任務(wù)數(shù)目限制強(qiáng)大的執(zhí)行跟蹤功能,堆棧溢出檢測(cè)消息隊(duì)列, 二進(jìn)制信號(hào)量,計(jì)數(shù)信號(hào)量,互斥量時(shí)間管理內(nèi)存管理EXTERNAL USE58FreeRTOS FreeRTOS 移植port.c和portasm.s 包含了所有實(shí)際硬件相關(guān)的代碼 portmacro.h文件聲明了所有硬件特定功能使用 IAR編譯器 ,ARM Cortex-M4F芯片KSDK V2已經(jīng)提供了FreeRTOS的移植代碼EXTERNAL USE59FreeRTOS FreeRTOS 全局配置文件 全局配置文件FreeRTO
40、SConfig.hEXTERNAL USE60FreeRTOS FreeRTOS 創(chuàng)建任務(wù) portBASE_TYPE xTaskCreate ( pdTASK_CODE pvTaskCode, /*指向任務(wù)的實(shí)現(xiàn)函數(shù)的指針。效果上僅僅是函數(shù)名*/const portCHAR * const pcNane, /*具有描述性的任務(wù)名*/unsigned portSHORT usStackDepth, /*指定任務(wù)堆棧的大小*/void *pvParameters, /*指針用于作為一個(gè)參數(shù)傳向創(chuàng)建的任務(wù)*/unsigned portBASE_TYPE uxPriority, /*任務(wù)運(yùn)行時(shí)的優(yōu)先級(jí)*/xTaskHandle *pvCreatedTask /*用于傳遞任務(wù)的句柄,可以引用從而對(duì)任務(wù)進(jìn)行其他操作*/)應(yīng)用實(shí)例:EXTERNAL USE61FreeRTOS FreeRTOS 任務(wù)控制APIAPI函數(shù) 任務(wù)相關(guān)APIAPI函數(shù)xTaskCreate創(chuàng)建任務(wù)vTaskDelete刪除自己或其它任務(wù)vTaskDelay任務(wù)延時(shí)函數(shù),任務(wù)主動(dòng)放棄CPU延時(shí)一段時(shí)間vTaskDelayUntil任務(wù)延遲到指定時(shí)間, 這個(gè)和
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025標(biāo)準(zhǔn)的電力施工合同范本
- 2025北京市常用勞動(dòng)合同范本
- 2025供貨協(xié)議書(shū)合同范文
- 2025建工合同條款細(xì)節(jié)設(shè)置雷區(qū)
- 2025輻照加工合同
- 綠色照明的推廣與節(jié)能減排的實(shí)踐研究
- 生物科技產(chǎn)業(yè)的未來(lái)發(fā)展趨勢(shì)與創(chuàng)新機(jī)遇分析
- 課題申報(bào)參考:老年人健身發(fā)展“主體-時(shí)間-空間”三位協(xié)同機(jī)制的社會(huì)生態(tài)學(xué)研究
- 小兒聽(tīng)力損失的醫(yī)學(xué)研究與治療進(jìn)展
- 科技展區(qū)聲光技術(shù)的未來(lái)發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 道路瀝青工程施工方案
- 2025年度正規(guī)離婚協(xié)議書(shū)電子版下載服務(wù)
- 《田口方法的導(dǎo)入》課件
- 內(nèi)陸?zhàn)B殖與水產(chǎn)品市場(chǎng)營(yíng)銷(xiāo)策略考核試卷
- 醫(yī)生給病人免責(zé)協(xié)議書(shū)(2篇)
- 損傷力學(xué)與斷裂分析
- 2024年縣鄉(xiāng)教師選調(diào)進(jìn)城考試《教育學(xué)》題庫(kù)及完整答案(考點(diǎn)梳理)
- 車(chē)借給別人免責(zé)協(xié)議書(shū)
- 應(yīng)急預(yù)案評(píng)分標(biāo)準(zhǔn)表
- “網(wǎng)絡(luò)安全課件:高校教師網(wǎng)絡(luò)安全與信息化素養(yǎng)培訓(xùn)”
- 鋰離子電池健康評(píng)估及剩余使用壽命預(yù)測(cè)方法研究
評(píng)論
0/150
提交評(píng)論