日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年03月09日(星期日)

正在發(fā)生

2019年03月09日 | 使用STM32固件庫函數操作控制LED燈

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

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


       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",添加".\Lib\inc"路徑



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外設庫函數的開發(fā)中用到了斷言機制。正常使用庫函數時,需要包含"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、編譯連接項目,下載程序,開發(fā)板的LED1閃爍。


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

上一篇:STM32串口通信之超級終端控制LED燈
下一篇:STM32F407Z 模擬串口(115200波特率)

推薦閱讀

無論是哪款單片機應該都有對應的中斷的功能,中斷在嵌入式系統(tǒng)的地位毋庸置疑。LPC1768微處理器包括4個外部中斷,分別是EINT0、EINT1、EINT2、EINT3對應的引腳分別是P2.10~P2.13,這幾個引腳也可以作為通用IO口使用。名個外部中斷可以設置成低電平/高電平或上升沿/下降沿有效,它們還有一個功能就是可用于將處理器從睡眠、深度睡眠或掉電模式中喚醒。...
繼三星電子推出無線藍牙耳機Galaxy Buds后,蘋果也傳出將發(fā)布AirPods 2的消息,無線耳機市場大戰(zhàn)熱鬧可期。無線藍牙耳機可以直接連接手機,讓使用者不用被電線纏繞所困擾,這類型的耳機約從2010年推出。過去無線耳機大多采用頸繞式設計,耳機能像項鏈掛在脖子上,但隨著技術進步,產品也逐漸縮小,現在甚至有完全無線的藍牙耳機,并且能實現良好的音質。...
車路協(xié)同技術仍然存在較多的不確定性風險,尤其是各個地區(qū)的5G/V2X等技術部署進度和規(guī)模存在很大的差異化。近日發(fā)布的《智能汽車創(chuàng)新發(fā)展戰(zhàn)略》提出,到2025年新一代車用無線通信網絡(5G-V2X)在部分城市、高速公路逐步開展應用。然而,之前在征求意見稿中提到的,到2020年,大城市、高速公路的車用無線通信網絡(LTE-V2X)覆蓋率達到90%,到2025年實現“...
集微網消息,隨著集成電路制造工藝持續(xù)微縮,晶體管結構的細微化逐漸成為產業(yè)重要的課題之一。 據悉,日本產業(yè)技術綜合研究所與中國臺灣半導體研究中心(TSRI)等展開合作,開發(fā)了用于新一代半導體的新型晶體管結構。據日經中文網報道,最近日本產業(yè)技術綜合研究所與中國臺灣半導體研究中心(TSRI)等開發(fā)出新一代半導體必需的新結構的場效應晶體管(FET...

史海拾趣

問答坊 | AI 解惑

國賽無線類題目合集

本帖最后由 paulhyde 于 2014-9-15 04:13 編輯 國賽無線類題目合集  …

查看全部問答∨

內核模式可以調用win32api嗎?

在EasySys中,在內核用了一個MessageBox,系統(tǒng)藍屏了,哦也.. 在內核模式可以調用win32api嗎?為什么可以/不可以? 另外,有沒有關于內核函數的查閱文檔?最好是chinese..謝謝…

查看全部問答∨

VxWorks內存管理方案

    改進的緩沖區(qū)管理模塊的作用在于加強VxWorks實時操作系統(tǒng)對內存的管理,并為上層應用程序提供所需內存申請和釋放工作。因此改進模塊位于VxWorks實時操作系統(tǒng)模塊和應用程序模塊之間。     CPU實際物理內存在bootRoom啟動 ...…

查看全部問答∨

在EVC下使用PolyPolygon畫圖的問題

我要用GDI中的PolyPolygon來填充一個區(qū)域 ,這個區(qū)域大小不定,如果這個區(qū)域不是很大的時候,還算正常,但是這個區(qū)域大了,填充時會很慢,這是為什么,大家有沒有好的解決辦法呢…

查看全部問答∨

DIY小車,這樣的方案行嗎?

最近有點閑,想找點事樂呵樂呵,做一個智能小車吧! 目標是:開始的時候實現通過上位機軟件遙控小車運動,等以后買了傳感器實現自適應蔽障或追蹤活動目標 可是小馬達驅動部分沒有專門的驅動芯片,BUT,我這里有很多75NF75和2907之類的MOS管(大家 ...…

查看全部問答∨

請教:關于STM32掉電

                                 想在STM32掉電是,向FLASH寫一個字節(jié)數據,下次上電時讀取該數據。不知道各位大蝦有什么方案,分享一下了。謝謝…

查看全部問答∨

曉舟通用在線調試系統(tǒng)(MSUODS)簡介

本帖最后由 paulhyde 于 2014-9-15 08:55 編輯 官網介紹:http://www.mornship.com/MSUODS/MSUODSInfo.htm曉舟通用在線調試系統(tǒng)(MSUODS)簡介   曉舟通用在線調試系統(tǒng)(MornShip Universal Online Debug System,簡稱MSUODS)是曉舟工作室 ...…

查看全部問答∨

原理圖的正誤判斷

剛學單片機,求高手指教下這個原理圖錯在哪…

查看全部問答∨

基于MSP430的電容單觸式傳感器設計指南

基于MSP430的電容單觸式傳感器設計指南…

查看全部問答∨

量產低于10元RMB的ZIGBEE芯片有幾種?

目前A7153已經量產,已經COST down, 量產低于10元的ZIGBEE芯片; 除了A7153,低于10RMB其他芯片還有嗎? [ 本帖最后由 lmq329778570 于 2012-5-31 16:16 編輯 ]…

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

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