91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32L552開發(fā)板——GPIO

STM32單片機(jī) ? 來源:STM32單片機(jī) ? 2020-05-30 09:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這次是針對NUCLEO_L552ZE_Q開發(fā)板的第三次評測貼,上次的帖子介紹了如何在Windows平臺上搭建開發(fā)環(huán)境,既然環(huán)境已經(jīng)準(zhǔn)備好了,接下來我們就要開始動手寫程序測試了(寫程序是不會寫的,這輩子都不會寫程序的,因?yàn)橛?a target="_blank">STM32CubeMX),是的,STM32CubeMX把基本的程序框架都寫好了,對于基本的測試,只需敲幾行字母就行了,真是懶人的必備,哈哈哈。

廢話不多說,相信許多玩過單片機(jī)的朋友都知道,拿到一款單片機(jī),寫程序的第一步無非就是GPIO口的輸出輸入功能,輸出功能就是點(diǎn)亮一盞LED,輸入功能就是按鍵掃描,那接下來我們就遵守這一不成文的規(guī)定,先從GPIO口的輸出輸入功能入手。

評測內(nèi)容

1、新建MDK-ARM工程,使用STM32CubeMX新建一個(gè)工程;

2、GPIO口電平輸出功能,控制NUCLEO_L552ZE_Q開發(fā)板上的紅色LED燈閃爍;

3、GPIO口電平輸入功能,使用NUCLEO_L552ZE_Q開發(fā)板上的USER BUTTON按鍵控制紅色LED燈閃爍的頻率大小。

新建MDK-ARM工程

在開始之前,我們還需要了解一些如何使用STM32CubeMX新建一個(gè)工程的知識。

01 新建目錄

電腦的磁盤上新建一個(gè)文件夾,這個(gè)文件夾并不是工程目錄,至于工程目錄是哪個(gè),稍后會說。注意,文件件的名稱,上級名稱,上上級名稱等,就是整個(gè)路徑,一定不能含有中文!半個(gè)中文都不能有!不信你可以試試。為了演示,我就隨便建個(gè)名為“Demo”的文件夾,如下圖。

02 新建STM32CubeMX工程

1、打開STM32CubeMX,鼠標(biāo)左鍵單擊“New Project”中的“ACCESS TO MCU SELECTOR”,

2、在彈出的“New Project from a MCU/MPU”窗口中的左側(cè)的搜索框中輸入你需要的單片機(jī)型號,我這里輸入“STM32L552ZE”,

3、然后在左下角的“MCUs/MPUs List”中選擇所需要的單片機(jī)型號,我這里選擇STM32L552ZET6Q,雙擊單片機(jī)型號,

4、彈出窗口問你是否使用TrustZone,我選擇No,然后就創(chuàng)建了一個(gè)STM32CubeMX工程。

03 配置STM32CubeMX工程

1、設(shè)置工程屬性,點(diǎn)擊STM32CubeMX工程窗口上方的“Project Manager”選項(xiàng),在最左邊選項(xiàng)切換到“Project”,

2、在“Project Location”中選擇在第一步的時(shí)候創(chuàng)建的文件夾,

3、在“Project Name”中填入工程名(不能是中文),填入的工程名就是這個(gè)工程的根目錄,路徑如藍(lán)色框所示,

4、在“Toolchain / IDE”中選擇“MDK-ARM”,其他保持默認(rèn)即可,具體如下圖所示,

5、最左邊選項(xiàng)切換到“Code Generator”,在右邊的“STM32Cube MCU packages an embedded software packs”中有三個(gè)選項(xiàng),意思分別為拷貝全部的庫文件到工程目錄中、僅拷貝需要的庫文件到工程目錄中、僅在工程文件中引用需要的庫文件(庫文件放在STM32CubeMX的安裝目錄中),我選擇第二項(xiàng),

6、設(shè)置時(shí)鐘屬性,點(diǎn)擊STM32CubeMX工程窗口上方的“Project Manager”選項(xiàng),在“HCLK(MHz)”中輸入需要的時(shí)鐘頻率,按回車鍵,在彈出的提示中選擇Ok便可,我輸入STM32L552ZET6Q的最大時(shí)鐘頻率:110MHz,其他的保持默認(rèn):內(nèi)部高速時(shí)鐘16MHz和內(nèi)部低速時(shí)鐘32KHz,

7、配置點(diǎn)亮LED燈的GPIO,NUCLEO_L552ZE_Q開發(fā)板上共有三盞LED燈,分別為紅綠藍(lán)三色,根據(jù)原理圖提供的信息,紅綠藍(lán)三盞等分別接在了單片機(jī)的PA9、PC7和PB7引腳,我選擇了最經(jīng)典的紅色LED,在“Pinout & Configuration”中使用鼠標(biāo)左鍵點(diǎn)擊單片機(jī)模型上的PA9引腳(右側(cè)從上往下數(shù)第8個(gè)引腳),在小窗口中選擇“GPIO_Output”,至此,STM32CubeMX工程就配置好了。

04 保存STM32CubeMX工程

點(diǎn)擊上方菜單中的“File”,選擇“Save Project”即可。

05 生成MDK-ARM工程

鼠標(biāo)左鍵單擊右上方的“GENERATE CODE”,軟件便可根據(jù)之前的配置自動生成一個(gè)代碼工程,如果在第一步中創(chuàng)建的目錄中有中文,在這一部生成代碼工程的時(shí)候就會出現(xiàn)錯(cuò)誤提示,導(dǎo)致工程創(chuàng)建失敗,因此需要特別注意。

GPIO口電平輸出功能:點(diǎn)亮一盞LED燈 01 了解一下工程的目錄結(jié)構(gòu)

irvers:存放STM32的固件庫以及ARM公司提供的CMSIS庫,通常情況下不需要修改里面的文件內(nèi)容;

inc:存放用戶編寫的.h文件,文件內(nèi)容可修改;

MDK-ARM:存放MDK的工程文件,以及STM32的啟動文件,文件內(nèi)容通常情況下不需要修改;

src:存放用戶編寫的.c文件,文件內(nèi)容可修改。

02

D在MDK-ARM文件夾內(nèi),雙擊打開.uvprojx后綴的工程文件,不需要改動,直接鏈接一遍,看是否有問題,結(jié)果0錯(cuò)誤、0警告。

03

打開main.c文件,找到主函數(shù)main(),在主函數(shù)的while循環(huán)內(nèi)添加如下代碼,意思為每隔500ms對PA9引腳進(jìn)行電平取反操作,讓紅色LED燈閃爍。

04 配置目標(biāo)屬性

1、電機(jī)窗口上方的魔術(shù)棒,彈出配置窗口;

2、切換到“Debug”選項(xiàng);

3、選擇調(diào)試器,我使用ST-Link Debugger;

4、電機(jī)左側(cè)的“Settings”

5、在彈出的窗口中切換到“Flash Download”選項(xiàng),勾選“Reset and Run”,使得將程序燒錄到單片機(jī)后就會自動復(fù)位并運(yùn)行程序。

6、點(diǎn)擊“確定”、“OK”確認(rèn)修改后,再次編譯鏈接工程,0錯(cuò)誤0警告。

05 燒錄程序

1、使用一根Micro USB數(shù)據(jù)線鏈接電腦與開發(fā)板上的ST-Link USB-A口,如果還沒安裝驅(qū)動,可查看我上一期的帖子,末尾有附件,如果開發(fā)板上的LD4亮紅色,LD6亮綠色,說明連接正常。

2、電機(jī)MDK軟件左上角的下載按鈕,開始將程序下載到單片機(jī)上運(yùn)行。

3、觀察運(yùn)行情況,紅色LED燈開始閃爍,說明GPIO口能夠正常輸出高低電平。

GPIO口電平輸入功能:按鍵掃描 01 重新生成MDK-ARM工程

將MDK-ARM工程關(guān)閉,根據(jù)原理圖知道開發(fā)板上的USER按鍵連接在單片機(jī)的PC13引腳,回到STM32CubeMX工程,在“Pinout & Configuration”中使用鼠標(biāo)左鍵點(diǎn)擊單片機(jī)模型上的PC13引腳(芯片模型的左側(cè)從上往下數(shù)第7個(gè)引腳),在小窗口中選擇“GPIO_Input”,保存STM32CubeMX工程并且點(diǎn)擊“GENERATE CODE”重新生成代碼。

02 實(shí)現(xiàn)按鍵掃描代碼

1、打開MDK-ARM工程,在main.c源文件的主函數(shù)實(shí)現(xiàn)代碼的開頭添加如下代碼,聲明兩個(gè)局部變量。

2、在主函數(shù)的while循環(huán)內(nèi)添加如下代碼,實(shí)現(xiàn)按鍵掃描和LED閃爍功能。

3、修改完之后,編譯鏈接一遍代碼,將代碼燒錄到開發(fā)板上,用手按開發(fā)板左下方的USER按鍵,觀察紅色LED的閃爍頻率變化情況,實(shí)際情況如下:

仿位帶操作:實(shí)現(xiàn)與51單片機(jī)一樣的IO口操作方法

使用過正點(diǎn)原子Cortex_M3或者Cortex_M4系列單片機(jī)開發(fā)板的朋友都應(yīng)該接觸過位帶操作功能,在Cortex_M3權(quán)威指南(中文)中的第5.5節(jié)有如下介紹

在CM3中,有兩個(gè)區(qū)中實(shí)現(xiàn)了位帶。其中一個(gè)是SRAM區(qū)的最低1MB范圍,第二個(gè)則是片內(nèi)外設(shè)區(qū)的最低1MB范圍。這兩個(gè)位帶中的地址除了可以像普通的RAM一樣使用外,它們還都有自己的“位帶別名區(qū)”,位帶別名區(qū)把每個(gè)比特膨脹成一個(gè)32位的字。當(dāng)你通過位帶別名區(qū)訪問這些字時(shí),就可以達(dá)到訪問原始比特的目的。

文中所述的位帶區(qū)與位帶別名區(qū)有如下對應(yīng)關(guān)系

STM32單片機(jī)的GPIO口地址就在片內(nèi)外設(shè)區(qū)的最低1MB范圍內(nèi),意思就是能夠通過位帶別名區(qū)中的每一個(gè)地址,操作到對應(yīng)的片內(nèi)外設(shè)區(qū)的外設(shè)寄存器中的一個(gè)bit,往位帶別名區(qū)中的地址寫1,則對應(yīng)的片內(nèi)外設(shè)區(qū)的外設(shè)寄存器中的相應(yīng)位就會置1,讀取位帶別名區(qū)中的地址的值,就會返回對應(yīng)的片內(nèi)外設(shè)區(qū)的外設(shè)寄存器中的相應(yīng)位的值,GPIO口的每一個(gè)Pin的電平就是由ODR寄存器中的每一個(gè)位來控制,以及通過IDR寄存器中的一個(gè)位來獲取一個(gè)Pin的電平。但是,我查找過Cortex_M33的手冊,并沒有發(fā)現(xiàn)這個(gè)位帶別名區(qū),也就是Cortex_M33沒有位帶操作功能,但我可以通過自定義一個(gè)位域結(jié)構(gòu)體來實(shí)現(xiàn)類似的操作,實(shí)現(xiàn)代碼如下:

typedef struct

{

uint16_t OD0 : 1;

uint16_t OD1 : 1;

uint16_t OD2 : 1;

uint16_t OD3 : 1;

uint16_t OD4 : 1;

uint16_t OD5 : 1;

uint16_t OD6 : 1;

uint16_t OD7 : 1;

uint16_t OD8 : 1;

uint16_t OD9 : 1;

uint16_t OD10 : 1;

uint16_t OD11 : 1;

uint16_t OD12 : 1;

uint16_t OD13 : 1;

uint16_t OD14 : 1;

uint16_t OD15 : 1;

} ODR_TypeDef;

#define PAin(n) ( ( GPIOA->IDR&(1 << (n)) )>>n )

#define PBin(n) ( ( GPIOB->IDR&(1 << (n)) )>>n )

#define PCin(n) ( ( GPIOC->IDR&(1 << (n)) )>>n )

#define PDin(n) ( ( GPIOD->IDR&(1 << (n)) )>>n )

#define PEin(n) ( ( GPIOE->IDR&(1 << (n)) )>>n )

#define PFin(n) ( ( GPIOF->IDR&(1 << (n)) )>>n )

#define PGin(n) ( ( GPIOG->IDR&(1 << (n)) )>>n )

#define PAout(n) ( ((ODR_TypeDef *)(&(GPIOA->ODR)))->OD##n )

#define PBout(n) ( ((ODR_TypeDef *)(&(GPIOB->ODR)))->OD##n )

#define PCout(n) ( ((ODR_TypeDef *)(&(GPIOC->ODR)))->OD##n )

#define PDout(n) ( ((ODR_TypeDef *)(&(GPIOD->ODR)))->OD##n )

#define PEout(n) ( ((ODR_TypeDef *)(&(GPIOE->ODR)))->OD##n )

#define PFout(n) ( ((ODR_TypeDef *)(&(GPIOF->ODR)))->OD##n )

#define PGout(n) ( ((ODR_TypeDef *)(&(GPIOG->ODR)))->OD##n )

可將此代碼封裝到一個(gè)頭文件內(nèi)供調(diào)用,使用方法同正點(diǎn)原子的源碼一樣。

總結(jié)

可見,在STM32CubeMX的幫助下,實(shí)現(xiàn)一些基礎(chǔ)的功能代碼還是比較方便的,加之有HAL固件庫的支持,無論單片機(jī)的底層寄存器如何變化,HAL固件庫都已經(jīng)統(tǒng)一封裝成一致的函數(shù)名,使用起來也非常方便。本次測試的GPIO口操作,主要使用到了兩個(gè)函數(shù):HAL_GPIO_TogglePin和HAL_GPIO_ReadPin,兩個(gè)函數(shù)的實(shí)現(xiàn)也比較簡單,都是直接操作寄存器:

本次我們介紹了GPIO口的使用,由于篇幅已經(jīng)太多了,花了一天時(shí)間才寫完,等下次有空再介紹其他一些基本的功能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    243

    文章

    24602

    瀏覽量

    691005
  • STM32
    +關(guān)注

    關(guān)注

    2310

    文章

    11162

    瀏覽量

    373527

原文標(biāo)題:分享 | 人生中的首塊STM32L552開發(fā)板——GPIO

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    奮斗 STM32 開發(fā)板入門手冊

    電子發(fā)燒友網(wǎng)站提供《奮斗 STM32 開發(fā)板入門手冊.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 10:44 ?1次下載

    MCU 開發(fā)板大比拼:STM32、ESP32、Arduino、樹莓派誰更強(qiáng)?

    嵌入式開發(fā)板琳瑯滿目,STM32、ESP32、Arduino、RaspberryPi各有特色。新手容易糾結(jié):到底哪塊適合我的項(xiàng)目?本文整理了一份開發(fā)板對比速查表,幫你快速理清思路。一
    的頭像 發(fā)表于 01-09 19:03 ?902次閱讀
    MCU <b class='flag-5'>開發(fā)板</b>大比拼:<b class='flag-5'>STM32</b>、ESP32、Arduino、樹莓派誰更強(qiáng)?

    【免費(fèi)試用】正點(diǎn)原子STM32N647開發(fā)板免費(fèi)試用

    STM32N647開發(fā)板是正點(diǎn)原子以STM32N647X0H3Q為核心推出的開發(fā)板,開發(fā)板提供了強(qiáng)大的AI算力和CPU處理能力支持,可進(jìn)行人
    的頭像 發(fā)表于 12-23 08:06 ?1112次閱讀
    【免費(fèi)試用】正點(diǎn)原子<b class='flag-5'>STM32</b>N647<b class='flag-5'>開發(fā)板</b>免費(fèi)試用

    STM32 Nucleo-64開發(fā)板技術(shù)解析與應(yīng)用指南

    ARDUINO^?^ Uno V3連接和ST morpho接頭,可輕松擴(kuò)展STM32 Nucleo開放式開發(fā)平臺的功能。該設(shè)有板載ST-LINK調(diào)試器/編程器,具有USB重新枚舉功能。STM
    的頭像 發(fā)表于 10-22 14:26 ?913次閱讀
    <b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>開發(fā)板</b>技術(shù)解析與應(yīng)用指南

    STM32 Nucleo-144開發(fā)板技術(shù)解析與應(yīng)用指南

    STMicroelectronics NUCLEO-H7S3L8 STM32 Nucleo-144開發(fā)板采用STM32H7S3L8 MCU,提供了一個(gè)經(jīng)濟(jì)實(shí)惠的多功能平臺,用于原型設(shè)計(jì)
    的頭像 發(fā)表于 10-17 14:40 ?1166次閱讀
    <b class='flag-5'>STM32</b> Nucleo-144<b class='flag-5'>開發(fā)板</b>技術(shù)解析與應(yīng)用指南

    ?STM32 Nucleo-64開發(fā)板技術(shù)解析與應(yīng)用指南

    STMicroelectronics -C051C8 STM32 Nucleo-64開發(fā)板通過由STM32微控制器為概念測試和原型創(chuàng)建提供了一種經(jīng)濟(jì)實(shí)惠且靈活的途徑。該開發(fā)板支持ARD
    的頭像 發(fā)表于 10-16 10:50 ?751次閱讀
    ?<b class='flag-5'>STM32</b> Nucleo-64<b class='flag-5'>開發(fā)板</b>技術(shù)解析與應(yīng)用指南

    CW32L011電機(jī)驅(qū)動開發(fā)板——驅(qū)動無刷電機(jī)

    CW32L011電機(jī)驅(qū)動開發(fā)板
    的頭像 發(fā)表于 08-22 10:02 ?1037次閱讀
    CW32<b class='flag-5'>L</b>011電機(jī)驅(qū)動<b class='flag-5'>開發(fā)板</b>——驅(qū)動無刷電機(jī)

    CW32L011電機(jī)驅(qū)動控制開發(fā)板-軟件

    CW32L011電機(jī)驅(qū)動控制開發(fā)板-軟件分析 銜接上一個(gè)硬件
    的頭像 發(fā)表于 08-13 10:44 ?962次閱讀
    CW32<b class='flag-5'>L</b>011電機(jī)驅(qū)動控制<b class='flag-5'>開發(fā)板</b>-軟件

    CW32L011電機(jī)驅(qū)動電機(jī)控制開發(fā)板-硬件1

    CW32L011電機(jī)驅(qū)動電機(jī)控制開發(fā)板-硬件介紹 后面有軟件分析
    的頭像 發(fā)表于 08-12 14:20 ?4151次閱讀
    CW32<b class='flag-5'>L</b>011電機(jī)驅(qū)動電機(jī)控制<b class='flag-5'>開發(fā)板</b>-硬件1

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)的引入
    的頭像 發(fā)表于 05-29 14:05 ?1040次閱讀
    迅為RK3568<b class='flag-5'>開發(fā)板</b>驅(qū)動指南<b class='flag-5'>GPIO</b>子系統(tǒng)<b class='flag-5'>GPIO</b>子系統(tǒng)API函數(shù)的引入

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)三級節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)三級節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)
    的頭像 發(fā)表于 05-26 15:39 ?1533次閱讀
    迅為RK3568<b class='flag-5'>開發(fā)板</b>驅(qū)動指南<b class='flag-5'>GPIO</b>子系統(tǒng)三級節(jié)點(diǎn)操作函數(shù)實(shí)驗(yàn)

    第二章 開發(fā)板與芯片介紹 詳解W55MH32芯片及開發(fā)板

    本章介紹了W55MH32芯片及開發(fā)板。該芯片采用Cortex-M3內(nèi)核,主頻216MHz,集成以太網(wǎng)功能,有L和Q兩種型號。配套開發(fā)板L-EVB功能豐富、Q-EVB為最小系統(tǒng)
    的頭像 發(fā)表于 05-26 09:19 ?1450次閱讀
    第二章 <b class='flag-5'>開發(fā)板</b>與芯片介紹  詳解W55MH32芯片及<b class='flag-5'>開發(fā)板</b>

    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實(shí)驗(yàn)簡介本實(shí)驗(yàn)將演示如何在小凌派-RK2206開發(fā)板上使用IOT庫的GPIO中斷模式,進(jìn)行GPIO編程開發(fā)。例程將創(chuàng)建一個(gè)任務(wù),通過配置GPIO
    的頭像 發(fā)表于 04-21 10:39 ?1117次閱讀
    基于小凌派RK2206<b class='flag-5'>開發(fā)板</b>:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>中斷

    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制GPIO外設(shè)

    1、案例簡介本案例主要是如何在小凌派-RK2206開發(fā)板上使用IOT庫的GPIO接口,進(jìn)行GPIO編程開發(fā)。例程將創(chuàng)建一個(gè)任務(wù),通過配置GPIO
    的頭像 發(fā)表于 04-11 15:36 ?2066次閱讀
    基于小凌派RK2206<b class='flag-5'>開發(fā)板</b>:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>外設(shè)

    STM32F103C8T6開發(fā)板最小系統(tǒng)原理圖

    電子發(fā)燒友網(wǎng)站提供《STM32F103C8T6開發(fā)板最小系統(tǒng)原理圖》資料免費(fèi)下載
    發(fā)表于 03-24 09:09 ?92次下載