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

歷史上的今天

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

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

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

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


    STM32提供了對外設寄存器操作的功能函數,對寄存器操作只需要調用相應的庫函數就可以,一般函數名單詞組合與功能密切相關,增強了程序的可讀性。


1、以CMSIS固件庫項目為基礎,在項目文件夾下新增"Lib"文件夾,在"Lib"文件夾下新增"inc"和"src"文件夾,在"inc"文件夾中復制"stm32f10x_gpio.h"和"stm32f10x_rcc.h"兩個頭文件,在"src"文件夾中復制"stm32f10x_gpio.c"和"stm32f10x_rcc.c"兩個庫函數程序文件,分別包含RCC和GPIO操作相關的庫函數。


2、在“項目條目管理”對話框中添加"Lib"組,并向組中添加兩個庫函數程序文件。


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


4、重寫main.c中的main函數


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


② 使能GPIOC時鐘


    在RCC庫函數中定義了RCC_APB2PeriphClockCmd函數,函數原型為:


void RCC_APB2PeriphClockCmd ( uint32_t  RCC_APB2Periph, FunctionalState  NewState )


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



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


    函數的第二個參數NewState取值為FunctionState類型,FunctionState類型是在"stm32f10x_rcc.c"文件中定義的一個枚舉類型,有DISABLE和ENABLE兩個取值,定義如下:



    現在要使能GPIOC,則調用函數如下:


RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );


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


    對GPIO引腳的配置調用"stm32f10x_gpio.c"中的庫函數GPIO_Init實現,函數原型為:


void GPIO_Init ( GPIO_TypeDef *  GPIOx, GPIO_InitTypeDef * GPIO_InitStruct  )


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


這個結構體中的GPIO_Pin為IO口的引腳編號,這里為第一個LED燈,則取0;


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




為枚舉類型,有三個枚舉值。這里取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 復用開漏輸出


(8)GPIO_Mode_AF_PP 復用推挽輸出


    這里選擇GPIO_Mode_Out_PP。


要配置GPIOC_0的工作模式,首先用GPIO_InitTypeDef類型定義一個變量,然后給這個結構體變量的成員賦值,最后調用GPIO_Init函數完成配置:


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函數來控制LED1的復位和置位,函數原型如下:


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


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


函數的參數分別為哪個GPIO口和哪個引腳。


如果對GPIOC_0復位,則:GPIO_ResetBits( GPIOC, GPIO_Pin_0) ;


如果對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時鐘


     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復位


         delay(1000);


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


         delay(1000);


     }


}


5、連接錯誤及其解決方法。


在上述項目中,最后完成項目配置和編程后,編譯連接時出現如下錯誤:


出現這個錯誤是由于STM32外設庫函數的開發中用到了斷言機制。正常使用庫函數時,需要包含"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宏,根據項目配置,如果設置了"USE_FULL_ASSERT"參數,則對函數參數進行檢查,檢查不成功轉到"assert_failed"函數處理;如果沒有設置使用斷言,則相當于不對參數進行檢測。


解決方法:將這一段宏定義直接復制到"stm32f10x.h"文件中,因為所有的外設庫函數文件都直接或間接地包含了該頭文件。


6、編譯連接項目,下載程序,開發板的LED1閃爍。



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

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

推薦閱讀

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

史海拾趣

問答坊 | AI 解惑

小車題最新消息

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

查看全部問答∨

wince里的例程怎么用?

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

查看全部問答∨

NAND Flash應用問題..

我的板子上現在有NOR Flash和NAND Flash兩個FLASH ,NOR用來燒nk,現在剩下一個NAND Flash 用來做存儲用..由于既要存儲用戶數據(例如用戶自己寫的一個文件),又要保存系統數據(例如注冊表文件或者是程序的配置或者日志文件),因為系統數據不想讓用戶操 ...…

查看全部問答∨

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

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

查看全部問答∨

求~凌陽61a單片機語音電路~

想做一個語音識別電路  說這個單片機有語音識別功能  但是本人初學  搞不定  求高手幫忙…

查看全部問答∨

新手急問關于2812ad采樣的問題!

2812的采樣值與實際模擬電壓輸入差零點幾伏,1.1伏的輸入,采樣得到值大概1.2、1.3伏左右。而且同一路輸入重復采樣值之間也差好多。 請各位指點!謝謝。…

查看全部問答∨

外部dco電阻怎么設置??

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

查看全部問答∨

求 430 電壓轉換電路

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

查看全部問答∨

特權同學的那個SDRAM程序,有疑問,求高手解答

最近研究特權同學的sdram代碼,有個疑問,請高手解答: 問題是:在讀寫工作狀態時,如果自動刷新時間到了(15us時間到),而此時工作狀態 非 `W_IDLE,也就是有sdram_ref_req(有自動刷新請求),但是到不了 `W_AR(自動刷新狀態); 那豈不是錯 ...…

查看全部問答∨

open1081采用STM32F205的內部晶振?

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

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 夹江县| 福海县| 响水县| 婺源县| 大名县| 肇州县| 隆子县| 韶关市| 尼勒克县| 鹿泉市| 和静县| 信丰县| 漾濞| 惠东县| 清水县| 商河县| 鄂州市| 裕民县| 靖远县| 延吉市| 承德市| 瑞昌市| 仙居县| 新民市| 霍州市| 景东| 拜城县| 红河县| 平邑县| 绥化市| 武邑县| 佛学| 剑河县| 诸城市| 黔南| 潮安县| 随州市| 密山市| 五家渠市| 阿拉善右旗| 钟祥市|