国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

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

2019年05月29日 | 使用STM32固件庫函數(shù)操作控制LED燈(STM32_04)

發(fā)布者:lcn18560863680 來源: eefocus關(guān)鍵字:STM32  固件庫函數(shù)  操作控制  LED燈 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

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


    STM32提供了對(duì)外設(shè)寄存器操作的功能函數(shù),對(duì)寄存器操作只需要調(diào)用相應(yīng)的庫函數(shù)就可以,一般函數(shù)名單詞組合與功能密切相關(guān),增強(qiáng)了程序的可讀性。


1、以CMSIS固件庫項(xiàng)目為基礎(chǔ),在項(xiàng)目文件夾下新增"Lib"文件夾,在"Lib"文件夾下新增"inc"和"src"文件夾,在"inc"文件夾中復(fù)制"stm32f10x_gpio.h"和"stm32f10x_rcc.h"兩個(gè)頭文件,在"src"文件夾中復(fù)制"stm32f10x_gpio.c"和"stm32f10x_rcc.c"兩個(gè)庫函數(shù)程序文件,分別包含RCC和GPIO操作相關(guān)的庫函數(shù)。


2、在“項(xiàng)目條目管理”對(duì)話框中添加"Lib"組,并向組中添加兩個(gè)庫函數(shù)程序文件。


3、修改"Include Paths",添加".Libinc"路徑


4、重寫main.c中的main函數(shù)


① 包含需要的頭文件:"stm32f10x_gpio.h"和"stm32f10x_rcc.h"


② 使能GPIOC時(shí)鐘


    在RCC庫函數(shù)中定義了RCC_APB2PeriphClockCmd函數(shù),函數(shù)原型為:


void RCC_APB2PeriphClockCmd ( uint32_t  RCC_APB2Periph, FunctionalState  NewState )


其中參數(shù)RCC_APB2Periph取值為在"stm32f10x_rcc.h"中預(yù)定義的值,這里對(duì)GPIOC的操作為RCC_APB2Periph_GPIOC,定義如下:



這個(gè)值與前面程序中的表達(dá)式"0x1<<4"得到的值是一致的。


    函數(shù)的第二個(gè)參數(shù)NewState取值為FunctionState類型,F(xiàn)unctionState類型是在"stm32f10x_rcc.c"文件中定義的一個(gè)枚舉類型,有DISABLE和ENABLE兩個(gè)取值,定義如下:



    現(xiàn)在要使能GPIOC,則調(diào)用函數(shù)如下:


RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );


③ 配置GPIOC_0為推挽式輸出,50MHz速度。


    對(duì)GPIO引腳的配置調(diào)用"stm32f10x_gpio.c"中的庫函數(shù)GPIO_Init實(shí)現(xiàn),函數(shù)原型為:


void GPIO_Init ( GPIO_TypeDef *  GPIOx, GPIO_InitTypeDef * GPIO_InitStruct  )


其中第一個(gè)參數(shù)GPIOx的取值在"stm32f10x.h"中定義,這里用GPIOC;第二個(gè)參數(shù)GPIO_InitStruct為GPIO_InitTypeDef指針類型,GPIO_InitTypeDef類型在"stm32f10x_gpio.h"文件中定義:


這個(gè)結(jié)構(gòu)體中的GPIO_Pin為IO口的引腳編號(hào),這里為第一個(gè)LED燈,則取0;


GPIO_Speed為GPIOSpeed_TypeDef類型,GPIOSpeed_TypeDef類型在"stm32f10x_gpio.h"文件中定義:




為枚舉類型,有三個(gè)枚舉值。這里取GPIO_Speed_50MHz;


GPIO_Mode為GPIOMode_TypeDef類型,GPIOMode_TypeDef類型在"stm32f10x_gpio.h"文件中定義:




    這些枚舉值分別為:


(1)GPIO_Mode_AIN 模擬輸入


(2)GPIO_Mode_IN_FLOATING 浮空輸入


(3)GPIO_Mode_IPD 下拉輸入


(4)GPIO_Mode_IPU 上拉輸入


(5)GPIO_Mode_Out_OD 開漏輸出


(6)GPIO_Mode_Out_PP 推挽輸出


(7)GPIO_Mode_AF_OD 復(fù)用開漏輸出


(8)GPIO_Mode_AF_PP 復(fù)用推挽輸出


    這里選擇GPIO_Mode_Out_PP。


要配置GPIOC_0的工作模式,首先用GPIO_InitTypeDef類型定義一個(gè)變量,然后給這個(gè)結(jié)構(gòu)體變量的成員賦值,最后調(diào)用GPIO_Init函數(shù)完成配置:


GPIO_InitTypeDef GPIOC_0_mode;


GPIOC_0_mode.GPIO_Pin = GPIO_Pin_0;


GPIOC_0_mode.GPIO_Speed = GPIO_Speed_50MHz;


GPIOC_0_mode.GPIO_Mode = GPIO_Mode_Out_PP;


GPIO_Init(GPIOC, &GPIOC_0_mode);


④ 通過GPIO_ResetBits和GPIO_SetBits函數(shù)來控制LED1的復(fù)位和置位,函數(shù)原型如下:


void GPIO_ResetBits ( GPIO_TypeDef *GPIOx,  uint16_t  GPIO_Pin )       //復(fù)位函數(shù)


void GPIO_SetBits  ( GPIO_TypeDef * GPIOx,  uint16_t GPIO_Pin ) //置位函數(shù)


函數(shù)的參數(shù)分別為哪個(gè)GPIO口和哪個(gè)引腳。


如果對(duì)GPIOC_0復(fù)位,則:GPIO_ResetBits( GPIOC, GPIO_Pin_0) ;


如果對(duì)GPIOC_0置位,則:GPIO_SetBits( GPIOC, GPIO_Pin_0) ;


最后的main.c程序如下:


#include "stm32f10x.h"


#include "stm32f10x_rcc.h"


#include "stm32f10x_gpio.h"


void delay(int t)


{


     int i;


     for( ;t>0; t--)


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


}


int main()


{


     GPIO_InitTypeDef GPIOC_0_mode;


     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE ); //使能GPIOC時(shí)鐘


     GPIOC_0_mode.GPIO_Pin = GPIO_Pin_0;


     GPIOC_0_mode.GPIO_Speed = GPIO_Speed_50MHz;


     GPIOC_0_mode.GPIO_Mode = GPIO_Mode_Out_PP;


     GPIO_Init(GPIOC, &GPIOC_0_mode);   //配置GPIOC_0引腳為推挽輸出,50MHz速度


     while(1)


     {


         GPIO_ResetBits( GPIOC, GPIO_Pin_0);  //將GPIOC_0復(fù)位


         delay(1000);


         GPIO_SetBits( GPIOC, GPIO_Pin_0);    //將GPIOC_0置位


         delay(1000);


     }


}


5、連接錯(cuò)誤及其解決方法。


在上述項(xiàng)目中,最后完成項(xiàng)目配置和編程后,編譯連接時(shí)出現(xiàn)如下錯(cuò)誤:


出現(xiàn)這個(gè)錯(cuò)誤是由于STM32外設(shè)庫函數(shù)的開發(fā)中用到了斷言機(jī)制。正常使用庫函數(shù)時(shí),需要包含"stm32f10x_conf.h"頭文件,在該文件中有如下定義


/* Exported macro ------------------------------------------------------------*/


#ifdef  USE_FULL_ASSERT


/**


  * @brief  The assert_param macro is used for function's parameters check.


  * @param  expr: If expr is false, it calls assert_failed function which reports


  *         the name of the source file and the source line number of the call


  *         that failed. If expr is true, it returns no value.


  * @retval None


  */


  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))


/* Exported functions ------------------------------------------------------- */


  void assert_failed(uint8_t* file, uint32_t line);


#else


  #define assert_param(expr) ((void)0)


#endif /* USE_FULL_ASSERT */


在該頭文件中定義了assert_param宏,根據(jù)項(xiàng)目配置,如果設(shè)置了"USE_FULL_ASSERT"參數(shù),則對(duì)函數(shù)參數(shù)進(jìn)行檢查,檢查不成功轉(zhuǎn)到"assert_failed"函數(shù)處理;如果沒有設(shè)置使用斷言,則相當(dāng)于不對(duì)參數(shù)進(jìn)行檢測(cè)。


解決方法:將這一段宏定義直接復(fù)制到"stm32f10x.h"文件中,因?yàn)樗械耐庠O(shè)庫函數(shù)文件都直接或間接地包含了該頭文件。


6、編譯連接項(xiàng)目,下載程序,開發(fā)板的LED1閃爍。



關(guān)鍵字:STM32  固件庫函數(shù)  操作控制  LED燈 引用地址:使用STM32固件庫函數(shù)操作控制LED燈(STM32_04)

上一篇:通過位帶地址操作GPIO在數(shù)碼管顯示數(shù)字(STM32_05)
下一篇:使用STM32固件庫操作控制LED燈(CMSIS)(STM32_03)

推薦閱讀

住地周圍布滿了重慶小面的老字號(hào)和前二十強(qiáng),所以我經(jīng)常在路邊的塑料凳上端著瓷盆扒拉下一碗當(dāng)早飯。時(shí)間久了,發(fā)現(xiàn)這樣的早飯除了有口福還能飽眼福,經(jīng)常有各種豪車、名車停在路邊。這些車的車主人們,有的衣著光鮮、有的金光內(nèi)斂,和所有客人一樣,一碗小面下肚,抹一抹嘴,收獲走一頓心滿意足的早餐。?這一碗小面,無論男女老幼、無論貧富貴賤,童叟無...
華為傳來消息已經(jīng)正式注冊(cè)了鴻蒙系統(tǒng)的商標(biāo),并且根據(jù)此前余承東的說法,華為這個(gè)系統(tǒng)最快將會(huì)在今年秋天發(fā)布,最晚也是明年春天。那么,我們今天就來討論下——華為鴻蒙系統(tǒng)真的能行嗎?今天筆者也看到了一個(gè)非常有趣的觀點(diǎn),同時(shí)也認(rèn)為這五大因素將會(huì)是華為做系統(tǒng)成功的關(guān)鍵!或者說,如果華為鴻蒙系統(tǒng)想要成功,這幾個(gè)條件不可或缺! 第一、做OS要站在...
今天OPPO官方微博正式確認(rèn)了Reno4系列的發(fā)布時(shí)間,就在6月5日19:30。據(jù)悉,OPPO Reno4系列總共有Reno4與Reno4 Pro兩款手機(jī),它們的具體情況如下:首先是OPPO Reno4,它采用了6.4英寸的雙打孔AMOLED屏,分辨率為2400x1080,機(jī)身尺寸為159.3x74x7.8mm,重量為183g,機(jī)身提供白、藍(lán)、黑、紅四種配色。電池容量為4000毫安時(shí)。OPPO Reno4搭載CPU主頻為2.4GH...

史海拾趣

問答坊 | AI 解惑

小車題最新消息

得到最新消息,小車可能這樣做:在一個(gè)蹺蹺板上面放上小車,通過小車的不斷變化移動(dòng)來控制蹺蹺板的平衡,這個(gè)題目大家怎么看啊?討論下啦!…

查看全部問答∨

wince里的例程怎么用?

在\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\BLUETOOTH\\SAMPLE文件夾里有好多例程,但是在catalog里沒有找到相對(duì)應(yīng)的加載項(xiàng) 請(qǐng)問怎么才能用上它們?…

查看全部問答∨

NAND Flash應(yīng)用問題..

我的板子上現(xiàn)在有NOR Flash和NAND Flash兩個(gè)FLASH ,NOR用來燒nk,現(xiàn)在剩下一個(gè)NAND Flash 用來做存儲(chǔ)用..由于既要存儲(chǔ)用戶數(shù)據(jù)(例如用戶自己寫的一個(gè)文件),又要保存系統(tǒng)數(shù)據(jù)(例如注冊(cè)表文件或者是程序的配置或者日志文件),因?yàn)橄到y(tǒng)數(shù)據(jù)不想讓用戶操 ...…

查看全部問答∨

ST的器件引腳圖為什么不搞像PIC那樣呢?

ST的器件引腳圖為什么不搞像PIC那樣呢?ST的:http://bbs.eeworld.com.cn/upfiles/img/200712/20071228215253153.gif畫原理圖的時(shí)候很麻煩,都不知道腳在哪里這是Microchip的:http://bbs.eeworld.com.cn/upfiles/img/200712/2007122821546571. ...…

查看全部問答∨

求~凌陽61a單片機(jī)語音電路~

想做一個(gè)語音識(shí)別電路  說這個(gè)單片機(jī)有語音識(shí)別功能  但是本人初學(xué)  搞不定  求高手幫忙…

查看全部問答∨

新手急問關(guān)于2812ad采樣的問題!

2812的采樣值與實(shí)際模擬電壓輸入差零點(diǎn)幾伏,1.1伏的輸入,采樣得到值大概1.2、1.3伏左右。而且同一路輸入重復(fù)采樣值之間也差好多。 請(qǐng)各位指點(diǎn)!謝謝?!?

查看全部問答∨

外部dco電阻怎么設(shè)置??

我在p2.5外部加了個(gè)100K電阻 然后程序這樣寫 void clockset() // { //1M DCO DCOCTL=0;//DCO0+DCO1; BCSCTL1 |=RSEL2;//+RSEL0//+RSEL1; BCSCTL2 |=DCOR;//外部DCO電阻 } 怎么運(yùn)行到 BCSCTL2 |=DCOR;//外部DCO電阻 就像死機(jī)了 ...…

查看全部問答∨

求 430 電壓轉(zhuǎn)換電路

430的管腳電壓為3.3V,某模擬量的范圍為0.5~4.5V,想連AD管腳,誰有這方面的電壓轉(zhuǎn)換電路呀,麻煩提供一下,不勝感謝…

查看全部問答∨

特權(quán)同學(xué)的那個(gè)SDRAM程序,有疑問,求高手解答

最近研究特權(quán)同學(xué)的sdram代碼,有個(gè)疑問,請(qǐng)高手解答: 問題是:在讀寫工作狀態(tài)時(shí),如果自動(dòng)刷新時(shí)間到了(15us時(shí)間到),而此時(shí)工作狀態(tài) 非 `W_IDLE,也就是有sdram_ref_req(有自動(dòng)刷新請(qǐng)求),但是到不了 `W_AR(自動(dòng)刷新狀態(tài)); 那豈不是錯(cuò) ...…

查看全部問答∨

open1081采用STM32F205的內(nèi)部晶振?

看Core1081,沒有外部晶振接口,只有一個(gè)32K的晶振。 難道Core1081只能使用STM32F205的內(nèi)部晶振?內(nèi)部晶振精度好像不高吧 …

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved