STM32學習筆記——使用函數庫編程控制GPIO口輸出

2020-11-26 電子產品世界

看了網上許多人的代碼以及各類開發板所帶的例程,大多數使用的都是官方發布的函數庫來編程,通過查詢後發現,使用函數庫來編程可以簡化開發過程,並不需要追溯到各個寄存器,通過查看庫手冊,新手也可以快速應用STM32,因此,決定先從函數庫開始入門!

1.建立帶函數庫的IAR項目工程

本文引用地址:

http://www.eepw.com.cn/article/201611/322900.htm

先從網上下載3.5版(據說3.0版以後的固件庫才逐漸穩定)stm32固件庫(stm32f10x_stdperiph_lib)。由於與固件庫版本兼容問題,重新下載安裝了IAR6.30版。

1.1 創建項目文件夾「project」;

1.2解壓「stm32f10x_stdperiph_lib.rar」後,

將...stm32f10x_stdperiph_libSTM32F10x_StdPeriph_Lib_V3.5.0下的「Libraries」文件夾拷貝到「project」文件夾,並在「project」文件夾中新建「project」文件夾以便與「Libraries」文件夾區分開;

1.3將...stm32f10x_stdperiph_libSTM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template下的「main.c」、「stm32f10x_conf.h」、「stm32f10x_it.c」、「stm32f10x_it.h」拷貝至...projectproject文件夾中;

1.4將...stm32f10x_stdperiph_libSTM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_TemplateEWARM下的「stm32f10x_flash.icf」、「stm32f10x_flash_extsram.icf」、「stm32f10x_nor.icf」、「stm32f10x_ram.icf」拷貝至...projectprojectEWARM文件夾中。

1.5新建IAR工程項目,添加分組及文件如圖:


其中:

lCore_cm3.c在…projectLibrariesCMSISCM3CoreSupport文件夾中;

lSystem_stm32f10x.c在…projectLibrariesCMSISCM3DeviceSupportSTSTM32F10x文件夾中;

lStartup_stm32f10x_md.s在...projectLibrariesCMSISCM3DeviceSupportSTSTM32F10xstartupiar文件夾中,此外根據所使用晶片大小不同,所選擇的startup文件也不同,具體選擇如下:

startup_stm32f10x_cl.s互聯型的器件,STM32F105xx,STM32F107xx
startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_hd_vl.s大容量的STM32F100xx
startup_stm32f10x_ld.s小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s小容量的STM32F100xx

startup_stm32f10x_md.s中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s中容量的STM32F100xx
startup_stm32f10x_xl.sFLASH在512K到1024K字節STM32F101xx,STM32F102xx,STM32F103xx

其中大、中、小容量的區分如下圖所示:

各型號名稱辨識如下圖所示:

個人所使用的晶片型號是STM32F103VBT6,所以是屬於中等容量,所以選擇的是」startup_stm32f10x_md.s」文件。

lLWIB組則根據需要添加,由於要點亮led燈需要用到GPIO和時鐘,所以添加了stm32f10x_gpio.c和stm32f10x_rcc.c兩個文件,均 在...projectLibrariesSTM32F10x_StdPeriph_Driversrc下

l根據需要修改「main.c」文件,也可自己創建空白文件,但需要包含#include "stm32f10x.h"代碼。

項目設置

除了「學前準備」文中所需要的設置外,還需要設置的項有:

GeneralOptions>Library Configuration項:

C/C++Compiler>Preprocessor項:

OutputConverter項:

Output項:

至此,工程設置完畢,可以往main文件裡寫空代碼試著編譯,如:

  1. #include「stm32f10x.h」
  2. Intmain()
  3. {While(1);}




技術專區

相關焦點

  • stm32單片機中使用GPIO口模擬PWM輸出解析
    gpio   General Purpose Input Output (通用輸入/輸出)簡稱為GPIO,或總線擴展器,人們利用工業標準I2C、SMBus或SPI接口簡化了I/O口的擴展。當微控制器或晶片組沒有足夠的I/O埠,或當系統需要採用遠端串行通信或控制時,GPIO產品能夠提供額外的控制和監視功能。
  • STM32教程(五)HAL庫之GPIO函數及實例詳細介紹!
    今天介紹STM32 HAL庫的GPIO函數庫,首先打開stm32f4xx_hal_gpio.h文件,我們能看到一些結構體定義以及GPIO引腳的地址定義等等,這些都很好理解,我們需要重點看HAL庫中GPIO的函數庫有哪些?以及這些函數庫有什麼作用以及怎麼使用這些函數?
  • stm32庫函數學習篇通用定時器輸入捕獲功能
    實現功能:PA8隨意延時驅動led燈閃爍,並且將PA8用杜邦線連接到PA7口,PA7是通用定時器TIM3的2通道,在TIM3_CH2觸發中斷程序中取反連接到PD2口的led燈,指示中斷程序運行,並且每次進入中斷後改變觸發捕獲的極性。實現兩個led燈會交替閃爍。
  • GPIO相關寄存器配置詳解
    也就是10個寄存器,一共可以控制一組GPIO的16個IO口。最多7組IO,也就是70個寄存器。----------------------------------------------------------------------------------------------------------------------------------注意:如果在配置IO的寄存器前一定要先配置時鐘的寄存器,與庫函數版本一樣
  • 怎麼學習STM32單片機?看老司機是怎麼說的!
    本文引用地址:http://www.eepw.com.cn/article/201705/359058.htm  我不是說STM32不好,而是這種為了學習單片機而去學習單片機的思路不對。  你問,如何系統地入門學習stm32?  本身就是一個錯誤的問題。
  • go 學習筆記之學習函數式編程前不要忘了函數基礎
    所以接下來我們一邊複習一邊學習函數的基本特點,為接下來理解函數式編程打下基礎,關於函數的基礎語言可參考 go 學習筆記之值得特別關注的基礎語法有哪些函數的基礎語法和高級特性下面以最基本四則運算為例,貫穿全文講解函數的基本語法和高級特性
  • Stm32的TFT LCD顯示器控制學習筆記
    學習stm32,TFT LCD顯示屏控制是很重要的一章,本人在初步學習STM32遇到了很多困難,所以把學習中積累的部分感覺重要的知識點羅列出來
  • MIO與EMIO的關係解析 GPIO、MIO、EMIO的區別
    點亮PS端LED 從電路中看得很清楚,這兩個LED直接連接在MIO0和MIO13上,所以直接在這兩個埠輸出高低電平就可以控制燈閃爍了 s32 XGpioPs_CfgInitialize(XGpioPs *InstancePtr, XGpioPs_Config *ConfigPtr, u32 EffectiveAddr); 這個函數初始化gpio,第一個參數需要一個XGpioPs的結構體指針,直接在函數開頭實例化就好了,結構體的組成在.h文件。
  • STM32的GPIO口的輸出:開漏輸出和推輓輸出
    推輓輸出與開漏輸出的區別:本文引用地址:http://www.eepw.com.cn/article/201610/311847.htm  >>推輓輸出:可以輸出高,低電平,連接數字器件  >>開漏輸出:輸出端相當於三極體的集電極. 要得到高電平狀態需要上拉電阻才行.
  • 嵌入式Linux設備驅動開發之:GPIO驅動程序實例
    )、GPB(11個輸入/輸出埠)、GPC(16個輸入/輸出埠)、GPD(16個輸入/輸出埠)、GPE(16個輸入/輸出埠)、GPF(8個輸入/輸出埠)、GPH(11個輸入/輸出埠)。為了控制這些埠,S3C2410處理器為每個埠組分別提供幾種相應的控制寄存器。其中最常用的有埠配置寄存器(GPACON~GPHCON)和埠數據寄存器(GPADAT~GPHDAT)。因為大部分I/O管腳可以提供多種功能,通過配置寄存器(PnCON)設定每個管腳用於何種目的。數據寄存器的每位將對應於某個管腳上的輸入或輸出。
  • 基於STM32的OV7670攝像頭總結
    (stm32的IO速度,寄存器比庫函數快,博主之前測,用庫函數IO口速度好像是2.5Mhz,而用寄存器IO口速度是8M吧,速度相差較大~)。但不建議這麼做,原因是:這種寄存器設置將帶來更多的學習困難和理解困難,並導致硬體圖像的採集速度可能下降到0.5 幀以下,同時帶來圖像失真的可能。  還有一種方法就是DMA方式採集,代碼複雜,速度在5-10幀左右。(博主本來想用該方法的,可是基礎差,調試困難。會接著調試~)  註:部分CMOS 時鐘速度不快,可以單片機直接採集,如OV7660,但該晶片已經停產。
  • 使用STM32 的DSP庫進行FFT變換
    * 使用三角函數生成採樣點,供FFT計算* 進行FFT測試時,按下面順序調用函數即可:* dsp_asm_init();* dsp_asm_test();*/#include "stm32f10x.h"#include "dsp_asm.h"#include "stm32_dsp.h"#include "table_fft.h"
  • PYNQ中實現SoftMax函數加速器
    孫齊偉本文引用地址:http://www.eepw.com.cn/article/201905/401026.htm  (西南交通大學 信息科學與技術學院,四川 成都 611756)  摘要:SoftMax函數通常在深度學習中作為激活函數使用,但其計算涉及自然指數和除法運算,傳統PC機上計算較慢,拖累了一個神經網絡的訓練。
  • 【STM32】GPIO工作原理(八種工作方式分析,附電路圖)
    GPIO的引腳與外部硬體設備連接,可實現與外部通訊、控制外部硬體或者採集外部硬體數據的功能。STM32F103ZET6晶片為144腳晶片,包括7個通用目的的輸入/輸出口(GPIO)組,分別為GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同時每組GPIO口組有16個GPIO口。
  • avr單片機和stm32區別與優缺點分析
    摘要:avr單片機和stm32單片機是目前使用較廣泛的單片機,那麼avr單片機和stm32單片機有什麼區別呢?有什麼優劣勢呢?當程序複雜時,通用寄存器R0~R31就顯得不夠用;而51系列的通用寄存器多達128個(為avr的4倍),編程時就不會有這種感覺。   3. avr的I/O腳類似pic,它也有用來控制輸入或輸出的方向寄存器,在輸出狀態下,高電平輸出的電流在10mA左右,低電平吸入電流20mA。這點雖不如pic,但比51系列還是要優秀。
  • STM32四種庫對比:寄存器、標準外設庫、HAL、LL
    每個STM32系列的100多個片段演示了如何以最小的內存佔用有效地使用STM32外圍設備。 相信學習過STM32的朋友,對標準外設庫都不陌生,是一組外圍設備的C語言代碼集合。
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    在網絡上看到幾位前輩寫了關於python深度學習庫的文章,對於小小白來說,因為我剛開始學python,我得承認自己看完後依然覺得雲裡霧裡的,不知道這些庫到底對我有什麼用處。所以我到網絡上搜集補充關於這些庫的說明內容,感覺在這個整理資料的過程中,對於這些python程序庫了解了更多,以下是我整理的學習筆記。
  • STM32單片機GPIO寄存器
    每個GPIO埠有兩個32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分別控制每個埠的高八位和低八位,如果IO口是0
  • 《Python語言程序設計》學習筆記-函數的定義與使用
    1 函數的理解和定義函數是一段代碼的表示,所指定的參數是一種佔位符,如果不經過調用,不會被執行,參數是輸入、函數體是處理、結果是輸出 (IPO)。函數是一段具有特定功能的、可重用的語句組函數是一種功能的抽象,一般函數表達特定功能兩個作用:降低編程難度和代碼復用2 函數的使用及調用過程函數的調用是運行函數代碼的方式,調用時要給出實際參數,用實際參數替換定義中的參數-,函數調用後得到返回值。3 函數的參數傳遞函數可以有參數,也可以沒有,但必須保留括號。
  • 使用Python從頭開始實現深度學習庫
    理解深度學習平臺基本構建基礎的初學者指南。深度學習已在短時間內從簡單的神經網絡演變為非常複雜的架構。為了支持這種快速擴展,在此過程中開發了許多不同的深度學習平臺和庫。這些庫的主要目標之一是提供用於構建和訓練深度學習模型的易於使用的界面,使用戶可以將更多的精力放在手頭的任務上。