一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

如何在STM8S控制器上執(zhí)行通用GPIO功能實(shí)現(xiàn)LED閃爍

科技觀察員 ? 來源:circuitdigest ? 作者:Aswinth Raj ? 2022-08-11 17:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

對(duì)于微控制器,LED 閃爍程序相當(dāng)于“hello world”程序。在我們之前的教程中,我們學(xué)習(xí)了如何開始使用 STM8S103F3 開發(fā)板以及如何設(shè)置 IDE 和編譯器來對(duì)我們的 STM8S 控制器進(jìn)行編程。我們還學(xué)習(xí)了如何使用標(biāo)準(zhǔn)外設(shè)庫(kù),以及如何編譯代碼并將其上傳到我們的微控制器中。涵蓋了所有基礎(chǔ)知識(shí),讓我們真正開始編寫代碼。在本教程中,我們將學(xué)習(xí)如何在 STM8S 控制器上執(zhí)行通用 GPIO 功能。該板已經(jīng)有一個(gè)連接到端口 B 的引腳 5 的板載 LED,我們將學(xué)習(xí)如何使該 LED 閃爍,并添加一個(gè)外部 LED 并使用按鈕對(duì)其進(jìn)行控制。

準(zhǔn)備好硬件

在我們深入研究程序之前,讓硬件連接準(zhǔn)備好。如前所述,我們將在這里使用兩個(gè) LED,一個(gè)是板載 LED,它會(huì)持續(xù)閃爍,另一個(gè)是外部 LED,可以通過按鈕進(jìn)行切換。這個(gè)想法是在一個(gè)簡(jiǎn)單的設(shè)置中學(xué)習(xí)所有的 GPIO 功能。板載 LED 已經(jīng)連接到 PB5(PORTB 的引腳 5),所以我剛剛將 LED 連接到 PA3,將按鈕連接到 PA2,如下圖所示。

poYBAGL0xaOAYCYrAAEkiIE0PzE805.png

但是,在我們控制的所有可用輸出引腳中,為什么我選擇 PA3 作為輸出,PA2 作為輸入?這些問題是有效的,我將在本文后面解釋。我為本教程的硬件設(shè)置如下所示。如您所見,我還將我的 ST-link 編程器連接到編程引腳,這不僅可以對(duì)我們的電路板進(jìn)行編程,還可以用作電源。

pYYBAGL0xaCAH6kHAAb6BR4JSu8103.png

了解 STM8S103F 上的 GPIO 引腳排列

現(xiàn)在回到問題,為什么 PA2 用于輸入,為什么 PA3 用于輸出?為了理解這一點(diǎn),讓我們仔細(xì)看看微控制器的引腳排列,如下所示。

poYBAGL0xZyAeYRSAAFBcyaksZ4020.png

根據(jù)引腳圖,我們的微控制器上有四個(gè)端口,即端口 A、B、C 和 D,分別用 PA、PB、PC 和 PD 表示。每個(gè) GPIO 引腳還具有一些其他特殊功能。例如,PB5(PORT B 的引腳 5)不僅可以用作 GPIO 引腳,還可以用作 I2C 通信SDA 引腳和定時(shí)器 1 的輸出引腳。因此,如果我們將此引腳用于連接 LED 等簡(jiǎn)單的 GPIO 用途,那么我們將無法同時(shí)使用 I2C 和 LED。遺憾的是,板載 LED 連接到此引腳,所以我們?cè)谶@里沒有太多選擇,而且在這個(gè)程序中,我們不會(huì)使用 I2C,所以問題不大。

STM8S103F GPIO 選擇的引腳說明和提示

說真的,使用 PA1 作為輸入引腳并沒有什么壞處,它只是工作引腳。但我特意提出這一點(diǎn),是為了讓我有機(jī)會(huì)向您展示一些在新微控制器上選擇 GPIO 引腳時(shí)可能會(huì)陷入的常見陷阱。避免陷阱的最佳方法是閱讀STM8S103F3P6 數(shù)據(jù)表中提供的引腳詳細(xì)信息和引腳說明。數(shù)據(jù)表中提到的 STM8S103F3P6 微控制器引腳描述詳細(xì)信息如下圖所示。

pYYBAGL0xZeAEUEBAAGabmL_gr8764.png

我們微控制器上的輸入引腳可以是浮動(dòng)或弱上拉,輸出引腳可以是開漏或推挽。已經(jīng)討論了開漏和推挽輸出引腳之間的區(qū)別,因此我們不會(huì)詳細(xì)介紹。簡(jiǎn)單來說,開漏輸出引腳可以使輸出只有低不高,而推挽輸出引腳可以使輸出既高又高。

除了上表之外,您還可以注意到輸出引腳可以是快速輸出 (10 Mhz) 或慢速輸出 (2 MHz)。這決定了 GPIO 的速度,如果你想非??焖俚卦诟叩椭g切換你的 GPIO 引腳,那么我們可以選擇快速輸出。

pYYBAGL0xZOAJMYFAAGlBgU4Ets874.png

如上圖所示,我們控制器上的一些 GPIO 引腳支持真正的漏極開路 (T)和高灌電流 (HS) 。Open Drain 和 True Open Drain 之間的一個(gè)相當(dāng)大的區(qū)別是連接到開漏的輸出不能被拉高超過微控制器的工作電壓 (Vdd),而真正的開漏輸出引腳可以被拉高到高于 Vdd。具有高吸收能力的引腳意味著它可以吸收更多電流。任何 GPIO HS 引腳的源電流和灌電流均為 20mA,而電源線可消耗高達(dá) 100mA。

仔細(xì)查看上圖,您會(huì)注意到幾乎所有 GPIO 引腳都是高灌電流 (HS) 類型,但 PB4 和 PB5 是真正的開漏型 (T)。這意味著這些引腳不能被拉高,即使引腳被拉高,它們也無法提供 3.3V。這就是為什么板載 LED 連接到 3.3V 并通過 PB5 接地,而不是直接從 GPIO 引腳為其供電。

pYYBAGL0xZCAFAePAAEAKZv2KI8209.png

有關(guān)詳細(xì)的引腳說明,請(qǐng)參閱數(shù)據(jù)表的第 28 頁(yè)。如上圖所示,PA1 自動(dòng)配置為弱上拉,不推薦用作輸出引腳。無論如何,它可以與按鈕一起用作輸入引腳,但我決定使用 PA2 只是為了嘗試從程序中啟用上拉。這些只是一些基本的東西,當(dāng)我們編寫更復(fù)雜的程序時(shí)它們會(huì)很有用?,F(xiàn)在,如果很多事情都從你的腦海中浮現(xiàn)出來也沒關(guān)系,我們將在其他教程中深入探討。

使用 SPL 對(duì) STM8S 進(jìn)行 GPIO 輸入和輸出編程

正如我們?cè)诘谝粋€(gè)教程中討論的那樣,創(chuàng)建一個(gè)工作區(qū)和新項(xiàng)目。您可以添加所有頭文件和源文件,也可以僅添加 gpio、config 和 stm8s 文件。打開main.c文件并開始編寫程序。

poYBAGL0xYuALEYTAAFovxRx3gQ168.png

確保您已包含如上圖所示的頭文件。打開main.c文件并啟動(dòng)代碼。完整的 main.c 代碼可以在此頁(yè)面底部找到,您還可以從那里下載項(xiàng)目文件。代碼解釋如下,如果您對(duì)編碼部分感到困惑,也可以參考SPL 用戶手冊(cè)或本頁(yè)底部鏈接的視頻。

取消初始化所需端口

我們通過取消初始化所需端口來開始我們的程序。正如我們之前所討論的,每個(gè) GPIO 引腳除了像普通的輸入和輸出一樣工作外,還有許多其他功能與其相關(guān)聯(lián)。如果這些引腳先前已用于其他應(yīng)用程序,那么在我們使用它們之前應(yīng)該將其取消初始化。這不是強(qiáng)制性的,但是,這是一個(gè)很好的做法。下面兩行代碼用于De-Initialize Port A和Port B。使用語(yǔ)法GPIO_DeInit (GPIOx)即可;并提及端口名稱代替 x。

GPIO_DeInit(GPIOA); //準(zhǔn)備端口A工作

GPIO_DeInit(GPIOB); // 準(zhǔn)備端口 B 工作

輸入輸出GPIO聲明

接下來,我們必須聲明哪些引腳將用作輸入,哪些引腳將用作輸出。在我們的例子中,引腳 PA2 將用作輸入,我們還將將該引腳聲明為內(nèi)部上拉,這樣我們就不必在外部使用一個(gè)。語(yǔ)法為GPIO_Init (GPIOx, GPIO_PIN_y, GPIO_PIN_MODE_z);。 其中 x 是端口名稱,y 是引腳編號(hào),z 是 GPIO 引腳模式。

//聲明PA2為輸入上拉引腳

GPIO_Init (GPIOA, GPIO_PIN_2, GPIO_MODE_IN_PU_IT);

接下來,我們必須將引腳 PA3 和 PB5 聲明為輸出。同樣可以使用多種類型的輸出聲明,但我們將使用“GPIO_MODE_OUT_PP_LOW_SLOW”,這意味著我們將其聲明為低速推挽式輸出引腳。默認(rèn)情況下,該值會(huì)很低。語(yǔ)法將是相同的。

GPIO_Init(GPIOA,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);

//聲明PB5為推挽輸出引腳

GPIO_Init(GPIOB、GPIO_PIN_5、GPIO_MODE_OUT_PP_LOW_SLOW);

SPL 用戶手冊(cè)中的以下快照提到了所有可能的 GPIO 模式 (z)。

pYYBAGL0xYWATrTtAAKswHraYq0169.png

無限while循環(huán)

在引腳聲明之后,我們需要?jiǎng)?chuàng)建一個(gè)無限循環(huán),在其中我們將永遠(yuǎn)閃爍 LED 并監(jiān)控按鈕的狀態(tài)以切換 LED。無限循環(huán)可以使用while(1)或 for (;;)創(chuàng)建。這里我使用了while (1)。

而 (1)

{

}

檢查輸入引腳的狀態(tài)

我們必須檢查輸入引腳的狀態(tài),這樣做的語(yǔ)法是GPIO_ReadInputPin(GPIOx, GPIO_PIN_y); 其中 x 是端口名稱,y 是引腳號(hào)。如果引腳為高電平,我們將得到“1”,如果引腳為低電平,我們將得到“0”。我們已經(jīng)習(xí)慣在 if 循環(huán)中檢查引腳是高電平還是低電平。

if (GPIO_ReadInputPin(GPIOA, GPIO_PIN_2)) //如果按鈕被按下

使 GPIO 引腳為高電平或低電平

要使 GPIO 引腳高或低,我們可以使用GPIO_WriteHigh(GPIOx,GPIO_PIN_y); 和GPIO_WriteLow(GPIOx,GPIO_PIN_y); 分別。在這里,我們使 LED 在按鈕被按下時(shí)打開,如果按鈕未被按下則關(guān)閉。

if (GPIO_ReadInputPin(GPIOA, GPIO_PIN_2)) //如果按鈕被按下

GPIO_WriteLow(GPIOA,GPIO_PIN_3); //帶領(lǐng)

別的

GPIO_WriteHigh(GPIOA,GPIO_PIN_3); //LED關(guān)閉

切換 GPIO 引腳

要切換 GPIO 引腳,我們有GPIO_WriteReverse(GPIOx,GPIO_PIN_y); 調(diào)用此函數(shù)將改變輸出引腳的狀態(tài)。該引腳為高電平時(shí),變?yōu)榈碗娖?,為低電平時(shí),變?yōu)楦唠娖健N覀冋谑褂么斯δ軄黹W爍 PB5 上的板載 LED。

GPIO_WriteReverse(GPIOB,GPIO_PIN_5);

延遲功能

Arduino 不同的是,cosmic 編譯器沒有預(yù)定義的延遲函數(shù)。所以我們必須自己創(chuàng)造一個(gè)。我的延遲函數(shù)如下所示。延遲的值將在變量 ms 中接收,我們將使用兩個(gè) for 循環(huán)來保持或程序執(zhí)行。就像_asm(“nop”) 是一個(gè)匯編指令,它代表無操作。這意味著控制器將在不執(zhí)行任何操作的情況下循環(huán)進(jìn)入 for 循環(huán),從而產(chǎn)生延遲。

void delay (int ms) //函數(shù)定義

{

整數(shù) i =0 ;

詮釋 j = 0;

對(duì)于 (i=0; i《=ms; i++)

{

for (j=0; j《120; j++) // Nop = Dark/4

_asm(“nop”); //執(zhí)行無操作 //匯編代碼

}

}

上傳和測(cè)試程序

現(xiàn)在我們的程序已經(jīng)準(zhǔn)備好了,我們可以上傳它并測(cè)試它。上傳后,我的硬件按預(yù)期工作。板載紅色 LED 每 500 毫秒閃爍一次,每次按下開關(guān)時(shí)外部綠色 LED 都會(huì)亮起。

poYBAGL0xX6AQAvTAAayQex7R_w374.png

/* MAIN.C 文件
*
* 版權(quán)所有 (c) 2002-2005 STMicroelectronics
*/

#define Green_LED GPIOA,GPIO_PIN_3
#包括“STM8S.h”

void delay (int ms) //函數(shù)定義
{
整數(shù) i =0 ;
詮釋 j = 0;
對(duì)于 (i=0; i<=ms; i++)
{
for (j=0; j<120; j++) // Nop = Dark/4
_asm("nop"); //執(zhí)行無操作 //匯編代碼
}
}

主要的()
{
GPIO_DeInit(GPIOA); //準(zhǔn)備端口A工作
GPIO_DeInit(GPIOB); // 準(zhǔn)備端口 B 工作

//聲明PA2為輸入上拉引腳
GPIO_Init (GPIOA, GPIO_PIN_2, GPIO_MODE_IN_PU_IT);

//聲明PA3為推挽輸出引腳
GPIO_Init (Green_LED, GPIO_MODE_OUT_PP_LOW_SLOW);

//聲明PB5為推挽輸出引腳
GPIO_Init(GPIOB、GPIO_PIN_5、GPIO_MODE_OUT_PP_LOW_SLOW);

而 (1)
{
if (GPIO_ReadInputPin(GPIOA, GPIO_PIN_2)) //如果按鈕被按下
GPIO_WriteLow(Green_LED);//帶領(lǐng)
別的
GPIO_WriteHigh(綠色_LED);//LED關(guān)閉
GPIO_WriteReverse(GPIOB,GPIO_PIN_5);
延遲(100);
}
}

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

    關(guān)注

    114

    文章

    17098

    瀏覽量

    184201
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1280

    瀏覽量

    54056
  • STM8S
    +關(guān)注

    關(guān)注

    16

    文章

    149

    瀏覽量

    32134
  • LED閃爍
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    STM8S執(zhí)行SPI通信的教程

    在本教程中,我們將了解 使用 8x8 Led 矩陣顯示模塊 作為 SPI 設(shè)備在 STM8S103F3P6 板實(shí)現(xiàn)串行并行接口 (SPI)
    發(fā)表于 07-29 15:58 ?5674次閱讀
    在<b class='flag-5'>STM8S</b>板<b class='flag-5'>上</b><b class='flag-5'>執(zhí)行</b>SPI通信的教程

    STM8S怎么選擇外設(shè)功能還是GPIO功能?

    新人求助:STM8S怎么選擇外設(shè)功能還是GPIO功能
    發(fā)表于 04-30 06:53

    何在stm8s207使用中斷

    有人可以指示我如何在stm8s207使用中斷來指導(dǎo)我,一個(gè)用于硬連線中斷的新手嗎?我想連續(xù)運(yùn)行stm8s并通過命令和主控制器檢索信息。
    發(fā)表于 04-17 15:11

    自學(xué)STM8S的方法

    STM8S自學(xué)筆記-006 按鍵輸入GPIO輸入【修訂記錄】1、20210812,第一版GPIO輸入在 《STM8S自學(xué)筆記-003 GPIO
    發(fā)表于 02-08 07:05

    STM8S控制器參考手冊(cè)

    導(dǎo)言本參考手冊(cè)為應(yīng)用開發(fā)人員提供了關(guān)于如何使用STM8S控制器的存儲(chǔ)和外設(shè)的完整信息。STM8S是一個(gè)擁有不同存儲(chǔ)大小,封裝和外設(shè)的微
    發(fā)表于 09-25 07:33

    STM8S的中文參考手冊(cè)

    本參考手冊(cè)為應(yīng)用開發(fā)人員提供了關(guān)于如何使用STM8S控制器的存儲(chǔ)和外設(shè)的完整信息。STM8S是一個(gè)擁有不同存儲(chǔ)大小,封裝和外設(shè)的微
    發(fā)表于 09-28 07:05

    STM8S控制器家族_RM0016參考手冊(cè)(中文版)

    本參考手冊(cè)為應(yīng)用開發(fā)人員提供了關(guān)于如何使用STM8S控制器的存儲(chǔ)和外設(shè)的完整信息。STM8S是一個(gè)擁有不同存儲(chǔ)大小,封裝和外設(shè)的微
    發(fā)表于 11-15 17:47 ?0次下載

    STM8S系列8位微控制器固件函數(shù)庫(kù)資料pdf下載

    STM8S系列8位微控制器固件函數(shù)庫(kù)
    發(fā)表于 03-19 16:58 ?18次下載

    STM8S控制器系列的各部件的詳細(xì)資料免費(fèi)下載

    本參考手冊(cè)為應(yīng)用開發(fā)人員提供了關(guān)于如何使用STM8S控制器的存儲(chǔ)和外設(shè)的完整信息。STM8S是一個(gè)擁有不同存儲(chǔ)大小,封裝和外設(shè)的微
    發(fā)表于 09-20 14:14 ?32次下載
    <b class='flag-5'>STM8S</b>微<b class='flag-5'>控制器</b>系列的各部件的詳細(xì)資料免費(fèi)下載

    STM8S控制器的參考手冊(cè)免費(fèi)下載

    STM8S是基于8位框架結(jié)構(gòu)的微控制器,其CPU內(nèi)核有6個(gè)內(nèi)部寄存,通過這些寄存可高效地進(jìn)行數(shù)據(jù)處理。
    發(fā)表于 12-24 11:57 ?37次下載
    <b class='flag-5'>STM8S</b>微<b class='flag-5'>控制器</b>的參考手冊(cè)免費(fèi)下載

    STM8S系列和STM8AF系列8位微控制器參考手冊(cè)免費(fèi)下載

    STM8AF設(shè)備是STM8AF52xx和STM8AF6269/8x/Ax微控制器,具有32至128千字節(jié)的閃存。
    發(fā)表于 05-22 08:00 ?51次下載
    <b class='flag-5'>STM8S</b>系列和STM<b class='flag-5'>8</b>AF系列<b class='flag-5'>8</b>位微<b class='flag-5'>控制器</b>參考手冊(cè)免費(fèi)下載

    STM8S自學(xué)筆記-006 GPIO輸入:按鍵輸入 與 按鍵濾波

    STM8S自學(xué)筆記-006 按鍵輸入GPIO輸入【修訂記錄】1、20210812,第一版GPIO輸入在 《STM8S自學(xué)筆記-003 GPIO
    發(fā)表于 12-05 11:36 ?9次下載
    <b class='flag-5'>STM8S</b>自學(xué)筆記-006 <b class='flag-5'>GPIO</b>輸入:按鍵輸入 與 按鍵濾波

    stm8s可外部擴(kuò)展多少IO口 如何設(shè)置stm8的中斷寄存 STM8S單片機(jī)CC寄存的作用

    STM8S系列微控制器的可用IO口數(shù)量取決于具體型號(hào)和封裝形式。然而,大多數(shù)STM8S控制器都提供了至少10個(gè)GPIO引腳。另外,
    發(fā)表于 04-01 17:24 ?2350次閱讀

    使用STM8S控制器的模數(shù)轉(zhuǎn)換

    電子發(fā)燒友網(wǎng)站提供《使用STM8S控制器的模數(shù)轉(zhuǎn)換.pdf》資料免費(fèi)下載
    發(fā)表于 10-07 16:11 ?0次下載
    使用<b class='flag-5'>STM8S</b>微<b class='flag-5'>控制器</b>的模數(shù)轉(zhuǎn)換<b class='flag-5'>器</b>

    STM8S控制器家族

    電子發(fā)燒友網(wǎng)站提供《STM8S控制器家族.rar》資料免費(fèi)下載
    發(fā)表于 10-07 15:43 ?1次下載
    <b class='flag-5'>STM8S</b>微<b class='flag-5'>控制器</b>家族