娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月29日(星期四)

2019年05月29日 | 使用STM32固件庫操作控制LED燈(CMSIS)(STM32_03)

發布者:科技驛站 來源: eefocus關鍵字:STM32  固件庫  操作控制  LED燈 手機看文章 掃描二維碼
隨時隨地手機看文章

直接使用寄存器地址來進行STM32開發要對每一個寄存器的地址通過查找芯片手冊,對每一個寄存器的各個位的含義也要查清楚,然后決定對那個地址的哪些位進行怎樣的設置。這種編程效率低,程序的可移植性差,程序的可讀性差。


一、CMSIS


基于cortex系列的處理器內核都是一樣的,區別在于除內核以外的外設的差異,由于這些差異,導致不同處理器移植起來比較麻煩,所以ARM與芯片廠商建立了CMSIS標準。ARM Cortex? 微控制器軟件接口標準(CMSIS:Cortex Microcontroller SoftwareInterface Standard) 。 是 Cortex-M 處理器系列的與供應商無關的硬件抽象層,使用CMSIS,可以為處理器和外設實現一致且簡單的軟件接口,從而簡化軟件的重用、縮短微控制器新開發人員的學習過程,并縮短新設備的上市時間。通過在所有Cortex-M芯片供應商產品中標準化軟件接口,這一成本會明顯降低,尤其是在創建新項目或將現有軟件遷移到新設備時。


CMSIS架構


1、CMSIS軟件層次


CMSIS可以分為多個軟件層次,分別由ARM公司、芯片供應商提供。


其中ARM提供了下列部分,可用于多種編譯器:


● 內核設備訪問層:包含了用來訪問內核的寄存器設備的名稱定義,地址定義和助手函數。同時也為RTOS(實時操作系統)定義了獨立于微控制器的接口,該接口包括調試通道定義。


● 中間設備訪問層:為軟件提供了訪問外設的通用方法。芯片供應商應當修改中間設備訪問層,以適應中間設備組件用到的微控制器上的外設。


芯片供應商擴展下列軟件層:


● 微控制器外設訪問層:提供片上所有外設的定義。


● 外設的訪問函數(可選):為外設提供額外的助手函數。


CMSIS為Cortex-Mx微控制器系統定義了:


● 訪問外設寄存器的通用方法和定義異常向量的通用方法。


● 內核設備的寄存器名稱和內核異常向量的名稱。


● 獨立于微控制器的RTOS接口,帶調試通道。


● 中間設備組件接口(TCP/IP協議棧,閃存文件系統)。


2、CMSIS包含的組件


① 外圍寄存器和中斷定義: 適用于設備寄存器和中斷的一致接口


② 內核外設函數:特定處理器功能和內核外設的訪問函數


③ DSP 庫:優化的信號處理算法,并為 SIMD 指令提供Cortex-M4 支持


④ 系統視圖說明(SVD):描述設備外設和中斷的XML文件。


該標準完全可擴展,可確保其適合于所有 Cortex-M處理器系列微控制器,從最小的8 KB 設備到具有復雜通信外設(如以太網或USB)的設備。(內核外設函數的內存要求少于1 KB 代碼,少于10 字節RAM)。


 


二、基于CMSIS應用程序的基本結構


1、CMSIS-外設訪問層的文件


① 獨立于編譯器的文件:


● Cortex-M3內核及其設備文件(core_cm3.h + core_cm3.c)


─ 訪問Cortex-M3內核及其設備:NVIC,SysTick等


─ 訪問Cortex-M3的CPU寄存器和內核外設的函數


● 微控制器專用頭文件(device.h)


對STM32F10x的頭文件為"stm32f10x.h"


─ 指定中斷號碼(與啟動文件一致)


─ 外設寄存器定義(寄存器的基地址和布局)


─ 控制微控制器其他特有的功能的函數(可選)


● 微控制器專用系統文件(system_device.c)


對STM32F10x的程序文件為"system_stm32f10x.c",頭文件為"system_stm32f10x.h"


─ 函數SystemInit,用來初始化微控制器


─ 函數Sysem_ExtMemCtl,用來配置外部存儲器控制器。它位于文件startup_stm32f10x_xx.s /.c,在跳轉到main前調用


─SystemFrequncy,該值代表系統時鐘頻率


─ 微控制器的其他功能(可選)


② 編譯器供應商+微控制器專用啟動文件


● 編譯器啟動代碼(匯編或者C)(startup_device.s)


對STM32F10x的頭文件為"startup_stm32f10x_XX.s",對STM32F103ZET6使用"startup_stm32f10x_hd.s


─ 微控制器專用的中斷處理程序列表(與頭文件一致)


─ 弱定義(Weak)的中斷處理程序默認函數(可以被用戶代碼覆蓋)


2、庫文件簡介


① core_cm3.c文件


在CoreSupport文件夾中有core_cm3.c和頭文件core_cm3.h,它的作用是采用Cortex-M3內核設計的SoC芯片廠商設計的芯片提供了一個進入CM3內核的接口。core_cm3.c中還有一些與編譯器(MDK、IAR等)有關的代碼。較重要的是core_cm3.c中包含stdio.h頭文件,這是一個ANSI C文件,主要作用是提供一些新類型的定義。


② system_stm32f10x.c文件


DeviceSupport文件夾下是啟動文件、外設寄存器定義、中斷向量定義層的一些文件,這些文件由ST公司提供。system_stm32f10x.c的主要作用是設置系統時鐘和總線時鐘。


③ stm32f10x.h文件


這個文件非常重要,是非常底層的文件,包含了寄存器地址和結構體類型的定義,在使用到stm32固件庫的地方都要包含它。


④ stm32f10x_it.c和stm32f10x_conf.h文件


stm32f10x_it.c這個文件主要是編寫中斷程序的,stm32f10x_conf.h被包含在stm32f10x.h文件中主要是配置外設的頭文件,我們需要什么在這里打開。


⑤ startup_stm32f10x_hd.s文件


在這個文件中有一段啟動文件,啟動文件中先初始化系統時鐘,然后才執行主函數,因此我們要注意配置時鐘在這個文件里配置。


 


三、創建項目,加入必要文件和配置相關參數


1、在項目文件夾下新建一個"pCMSIS"文件夾,然后在該文件夾中創建"CMSIS"、"Device"、"Startup"和"User"四個文件夾,創建不同的文件夾主要是為了分類存放不同作用的文件,便于文件管理,當項目比較復雜時方便文件管理,不分文件夾也是可以的。在"CMSIS"文件夾中復制"core_cm3.c"和"core_cm3.h"文件;在"Device"文件夾復制"stm32f10x.h"、"system_stm32f10x.c"和"system_stm32f10x.h"文件;在"Startup"文件夾下復制"startup_stm32f10x_hd.s。


2、在Keil5中新建項目pCMSIS,存放在"pCMSIS"文件夾中,點擊按鈕或者通過菜單"Project"->"Manage"->"Components,Environment,Books…"打開進行"Manage Project Items"對話框,對項目文件管理。


在"Groups"中分別添加"CMSIS"、"Device"、"Startup"和"User"四個組,并為每一個組添加上述1中敘述的文件。


3、新建一個文件并保存為"main.c"(保存在"User"文件夾下),然后將該文件添加到"User"組中,在文件內添加如下內容:


#include "stm32f10x.h"


int main()


{


}


4、點擊工具按鈕,在對話框的"Output"選項卡中選中"Create HEX File",在"C/C++"選項卡中的"Include Paths"項目點擊按鈕,打開"Folder Setup"對話框,添加如下包含路徑:


這時,項目框架搭建完成,可以編譯生成hex文件。


5、實現LED燈控制。


    實現過程同樣是使能GPIO時鐘、設置工作方式、點亮LED燈幾個步驟,因為前面為項目添加了幾個文件,在這些文件中包含了相關的預定義,所以編程只需要使用這些預定義即可。


① 使能GPIOC時鐘。


由于在"stm32f10x.h"文件中有上述預定義,標識符"RCC"為一個結構體類型的指針,只需要通過給RCC->APB2ENR的第4位賦值就能就能使能GPIOC的時鐘,所以使用:


RCC->APB2ENR |=0x1<<4; //開啟GPIOC時鐘


② 配置GPIOC_0為推挽輸出,50M速度。

同樣,由于在"stm32f10x.h"文件中有上述預定義,標識符"GPIOC"為一個結構體類型的指針,通過給GPIOC->CRL的3~0位設置為"0011"就可以配置GPIOC_0為推挽輸出,50M速度。即:


GPIOC->CRL &= ~(0x0F<<(4*0));   //對GPIOC_0設置為通用推挽輸出,最大速度50MHz


GPIOC->CRL |= (0x03<<(4*0));


③ 點亮LED燈。點亮LED1,需要給GPIOC_0輸出低電平,可以通過BSRR復位實現。


while(1)


{


    GPIOC->BSRR |= 0x01<<(16+0);    //對GPIOC_0復位


    delay(1000);


    GPIOC->BSRR |= 0x01<<(0+0); //對GPIOC_0置位


    delay(1000);


}


main.c的完整程序如下:


#include "stm32f10x.h"


void delay(int t)


{


     int i;


     for( ;t>0; t--)


         for(i=0;i<1000;i++);


}


int main()


{


     RCC->APB2ENR |= 0x1<<4; //ê1?üGPIOCê±?ó


     GPIOC->CRL &= ~(0x0F<<(4*0));    //??GPIOC_0éè???aí¨ó?í?íìê?3?£??ù?è50MHz


     GPIOC->CRL |= (0x03<<(4*0));


     while(1)


     {


         GPIOC->BSRR |= 0x01<<(16+0);     //??GPIOC_0?′??


         delay(1000);


         GPIOC->BSRR |= 0x01<<(0+0); //??GPIOC_0????


         delay(1000);


     }


}


 


6、編譯,下載程序,LED1閃爍。



關鍵字:STM32  固件庫  操作控制  LED燈 引用地址:使用STM32固件庫操作控制LED燈(CMSIS)(STM32_03)

上一篇:使用STM32固件庫函數操作控制LED燈(STM32_04)
下一篇:直接通過寄存器地址操作控制LED燈(定義常量標示對應寄存器)

推薦閱讀

近日,由中華醫學會和中華醫學會呼吸病學分會共同主辦的2018年全國肺癌學術大會在北京召開。在會議上,醫療AI公司神州德信展示了完整的肺部疾病智能臨床解決方案——“數字肺”影像分析系統。神州德信總經理王亞擘表示,“數字肺”系統通過醫學影像分析提供完整的肺部疾病臨床解決方案,支持精準的肺部組織量化處理,可提高醫生的閱片效率,有效輔助醫生進...
外媒CNBC今日發文,報道了一些Apple Card信用卡背后的故事。包括美國幾大知名銀行或金融集團跟蘋果的合作,以及為什么最終是投資銀行高盛承接了這項業務。 在三月底的春季發布會上,蘋果宣稱,今年夏天,他們將與投資銀行高盛(Goldman Sachs)和信用卡聯盟萬事達(Mastercard)合作,在美國推出自己的信用卡。這款名為“Apple Card”的產品,是實體+電...
據外媒報道稱,按照以往的慣例,蘋果都會在每年的9月份發布新款旗艦型智能手機,但是今年iPhone 12的發布時間可能將推遲到11月。  華爾街投資銀行給出的報告顯示,2020年第二季度蘋果的硬件產品出貨量為3500萬部,相比去年同期下降13%,而蘋果今年發布的4款新iPhone,都將支持5G網絡,并且都搭載了劉海更窄的OLED屏幕。  蘋果公司今年預計...

史海拾趣

問答坊 | AI 解惑

HT1380串行時鐘芯片

HT1380串行時鐘芯片一般來說,HT系列的芯片在串行口的應用一直以來就是很好的在單片機 這個領域,串行時鐘一直占著很重要的位置…

查看全部問答∨

Introduction to NI VeriStand

Introduction to NI VeriStand…

查看全部問答∨

奇怪了,請大家看下做標記的那幾行代碼

請大家看下下面打問號幾行代碼,拋開其功能不說,真的是奇怪了,我都看了又看,頭都大了,就是不知道為什么,請朋友們指點下 #include<reg52.h>                     &nbs ...…

查看全部問答∨

evc托盤編程

使用evc4.0編寫一個系統托盤,就是我的程序起來之后,不顯示對話框,自動出現一個圖標到右下角,通過雙機圖標,可以彈出對話框。 右鍵單擊右下角圖標,可以彈出一個菜單。 不知道如何實現這些功能,請兄弟姐妹們幫個忙!…

查看全部問答∨

si4010有沒有人用過,求探討

si4010有沒有人用過,求探討,開發軟件,調試軟件,燒錄工具等等…

查看全部問答∨

STM32的驅動庫好用嗎?效率高嗎?優化的嗎?準備上STM32

    N多年沒買過開發板了,也沒用過仿真器了。都是用軟件編譯調試好,直接ISP,然后通過串口命令開啟調試信息的輸出。    昨天買了塊STM32F103全功能型開發板,他們的辦事效率真低(深圳到廣州通常當 ...…

查看全部問答∨

求IAR Embedded Workbench for MCS-51 完整版

各位高手,小弟求IAR Embedded Workbench for MCS-51完整版,有哪位高人有,能否分享一下。我的郵箱jinghongchen@126.com…

查看全部問答∨

獵頭招聘

世界500強招聘壓力傳感器SAE,如有興趣可發簡歷至:aerie.song@seek-jobs.com.cn 要求:至少五年以上相關工作經驗,英文流利。…

查看全部問答∨

STM8 中斷優先權的問題

最近在看STM8L的spc發現中斷優先順序實在不太明白。中斷優先順序分為兩個暫存器,一個為CC暫存器的 I0 和 I1和ITC_SPRX暫存器,但我不明白的昰既然ITC_SPRX已經設定了個向量中斷的優先順序,那CC暫存器設定是為了甚麼呢,請哪位大大可以幫幫我,謝 ...…

查看全部問答∨

DSP學習心得筆記

DSP學習心得筆記 ---------------- 白建成.baijc.icekoor 引言:學習DSP的時間有兩個多月了,收獲很多新知識,我們要每天都有進步才行,以下內容沒有特別的順序,跟具自己的學習情況寫的,如果有不對的地方希望指出來,如果有不懂得也可以問我, ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 洪雅县| 车致| 泾川县| 四平市| 景泰县| 连平县| 华安县| 自治县| 旬邑县| 安丘市| 嵩明县| 于田县| 太原市| 泽州县| 柳河县| 伊金霍洛旗| 庄河市| 苏州市| 林甸县| 安泽县| 宁城县| 贵德县| 贺兰县| 达尔| 策勒县| 岳池县| 惠安县| 讷河市| 武乡县| 永宁县| 莒南县| 东阳市| 航空| 古丈县| 临邑县| 徐汇区| 长白| 仁化县| 舒兰市| 安宁市| 乌拉特后旗|