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

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

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

STM8S_001_ GPIO基礎(chǔ)知識

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-20 11:09 ? 次閱讀

入門

完事開頭難,只要肯努力;

師傅領(lǐng)進(jìn)門,修行看個人;

寫在前面 Ⅰ

當(dāng)你看到本文,說明你是幸運(yùn)的,作者接下來推出的一系列STM8S教程,將助你踏入STM8S的世界。

本文是STM8S教程的開始,寫給剛?cè)腴TSTM8S的朋友。學(xué)習(xí)本文之前,建議你先掌握C語言基礎(chǔ)知識,了解單片機(jī)基礎(chǔ)知識。

作者將理論知識結(jié)合軟件工程源代碼講述STM8S的相關(guān)知識,如果你掌握單片機(jī)基礎(chǔ)知識,那么內(nèi)容難度比較低。教程重點(diǎn)結(jié)合“STM8S參考手冊”來講述相關(guān)理論知識。

為方便大家閱讀,本文內(nèi)容已經(jīng)整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

GPIO基礎(chǔ)知識 Ⅱ

GPIO:General Purpose Input Output即通用輸入輸出口;

每個端口都分配有一個輸出數(shù)據(jù)寄存器,一個輸入引腳寄存器,一個數(shù)據(jù)方向寄存器,一個選擇寄存器,和一個配置寄存器。一個I/O口工作在輸入還是輸出是取決于該口的數(shù)據(jù)方向寄存器的狀態(tài)。

?輸入模式:浮動輸入和帶上拉輸入;

?輸出模式:推挽式輸出和開漏輸出;

提示:輸入輸出模式可以通過軟件配置,STM8S沒有輸入下拉。

每一個IO都可以配置成外部中斷,可以單獨(dú)使能和關(guān)閉;

當(dāng)作為模擬輸入時可以關(guān)閉輸入施密特觸發(fā)器來降低功耗。

本文GPIO軟件工程說明 Ⅲ

為了方便大家理解軟件工程具體實(shí)現(xiàn)了什么功能,將簡述一下重要的幾點(diǎn)內(nèi)容。

本文是基礎(chǔ)的軟件工程,主要講述軟件工程相關(guān)說明、軟件流程及重點(diǎn)講述GPIO配置的內(nèi)容。

學(xué)習(xí)本文之前建議學(xué)習(xí)如下兩篇文章:

IAR for STM8介紹、下載、安裝與注冊

IAR for STM8系列教程(一)_新建軟件工程詳細(xì)過程

文章最后提供下載內(nèi)容:STM8S資料、本文對應(yīng)軟件工程源代碼。

軟件工程源代碼 Ⅳ

1.關(guān)于工程

工程使用最新IAR for STM8(EWSTM8)集成開發(fā)環(huán)境,使用STM8S最新的標(biāo)準(zhǔn)外設(shè)庫。

本工程適合STM8S和STM8AF系列芯片,包含:

STM8S208、STM8S207、STM8S007、STM8AF52Ax、STM8AF62Ax、STM8S105、

STM8S005、STM8AF626x、STM8AF622x、STM8S103、STM8S003、STM8S903

只要沒有特別說明,工程都適合以上芯片,只需要修改配置為對應(yīng)芯片即可。

修改兩個地方:

1.Device芯片型號:Project -> Options -> General Options -> Target -> Device

2.芯片型號預(yù)定義:Project -> Options -> C/C++ Compiler -> Preprocessor -> Defined Symbols

2.軟件流程

本文提供STM8S軟件工程的流程比較簡單:

配置時鐘、初始化GPIO、while循環(huán)

3.代碼分析說明

A.配置時鐘

默認(rèn)使用16MHz高速內(nèi)部RC振蕩器(HSI)進(jìn)行8分頻,即系統(tǒng)時鐘默認(rèn)為2M(2M = 16M / 2)。我們通過軟件配置成16M,即1分頻。

配置時鐘代碼如下:

voidCLK_Configuration(void)

{

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (1分頻)

}

其中CLK_PRESCALER_HSIDIV分頻值參數(shù)可以跟蹤代碼查看:

typedef enum{

CLK_PRESCALER_HSIDIV1 = (uint8_t)0x00, /*!< High speed internal clock prescaler: 1 */

CLK_PRESCALER_HSIDIV2 = (uint8_t)0x08, /*!< High speed internal clock prescaler: 2 */

CLK_PRESCALER_HSIDIV4 = (uint8_t)0x10, /*!< High speed internal clock prescaler: 4 */

CLK_PRESCALER_HSIDIV8 = (uint8_t)0x18, /*!< High speed internal clock prescaler: 8 */

CLK_PRESCALER_CPUDIV1 = (uint8_t)0x80, /*!< CPU clock division factors 1 */

CLK_PRESCALER_CPUDIV2 = (uint8_t)0x81, /*!< CPU clock division factors 2 */

CLK_PRESCALER_CPUDIV4 = (uint8_t)0x82, /*!< CPU clock division factors 4 */

CLK_PRESCALER_CPUDIV8 = (uint8_t)0x83, /*!< CPU clock division factors 8 */

CLK_PRESCALER_CPUDIV16 = (uint8_t)0x84, /*!< CPU clock division factors 16 */

CLK_PRESCALER_CPUDIV32 = (uint8_t)0x85, /*!< CPU clock division factors 32 */

CLK_PRESCALER_CPUDIV64 = (uint8_t)0x86, /*!< CPU clock division factors 64 */

CLK_PRESCALER_CPUDIV128 = (uint8_t)0x87 /*!< CPU clock division factors 128 */

} CLK_Prescaler_TypeDef;

B.GPIO配置

我定義了一個LED燈的IO,使用宏定義(方便修改):

#define LED_GPIO_PORT GPIOD

#define LED_GPIO_PIN GPIO_PIN_4

初始化配置為推完高速輸出,輸出默認(rèn)值為低:

GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN,GPIO_MODE_OUT_PP_LOW_FAST);

具體配置參數(shù)有多種:

typedef enum

{

GPIO_MODE_IN_FL_NO_IT = (uint8_t)0x00, /*!< Input floating, no external interrupt */

GPIO_MODE_IN_PU_NO_IT = (uint8_t)0x40, /*!< Input pull-up, no external interrupt */

GPIO_MODE_IN_FL_IT = (uint8_t)0x20, /*!< Input floating, external interrupt */

GPIO_MODE_IN_PU_IT = (uint8_t)0x60, /*!< Input pull-up, external interrupt */

GPIO_MODE_OUT_OD_LOW_FAST = (uint8_t)0xA0, /*!< Output open-drain, low level, 10MHz */

GPIO_MODE_OUT_PP_LOW_FAST = (uint8_t)0xE0, /*!< Output push-pull, low level, 10MHz */

GPIO_MODE_OUT_OD_LOW_SLOW = (uint8_t)0x80, /*!< Output open-drain, low level, 2MHz */

GPIO_MODE_OUT_PP_LOW_SLOW = (uint8_t)0xC0, /*!< Output push-pull, low level, 2MHz */

GPIO_MODE_OUT_OD_HIZ_FAST = (uint8_t)0xB0, /*!< Output open-drain, high-impedance level,10MHz */

GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0, /*!< Output push-pull, high level, 10MHz */

GPIO_MODE_OUT_OD_HIZ_SLOW = (uint8_t)0x90, /*!< Output open-drain, high-impedance level, 2MHz */

GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0 /*!< Output push-pull, high level, 2MHz */

}GPIO_Mode_TypeDef;

上面基礎(chǔ)知識已經(jīng)說了關(guān)于GPIO的輸入輸出模式種類:輸出分類:推挽式輸出和開漏輸出。推完輸出具有輸出驅(qū)動能力,比較常見。開漏輸出是沒有輸出能力的,用在特殊場合,如I2C的DATA總線。這兩種輸出的具體意思可以網(wǎng)上搜索。

C.具體實(shí)現(xiàn)功能

在main函數(shù)中的while里面就是本文源代碼實(shí)現(xiàn)的具體功能,將一個LED燈(IO)高低交替輸出,達(dá)到LED亮滅的效果。

代碼:

while(1)

{

LED_ON; //LED亮

SoftwareDelay(0x6000);

LED_OFF; //LED滅

SoftwareDelay(0x6000);

}

這里的SoftwareDelay函數(shù)就不用說了,主要就是軟件延時一段時間。

好了,希望以上一些基礎(chǔ)內(nèi)容希望對初學(xué)的你有所幫助。

下載 Ⅴ

STM8S資料:

http://pan.baidu.com/s/1o7Tb9Yq

軟件工程源代碼(STM8S-A01_GPIO基礎(chǔ)知識):

http://pan.baidu.com/s/1c2EcRo0

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

    關(guān)注

    30

    文章

    4699

    瀏覽量

    68101
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1183

    瀏覽量

    51746
  • STM8S
    +關(guān)注

    關(guān)注

    16

    文章

    149

    瀏覽量

    31313
收藏 人收藏

    評論

    相關(guān)推薦

    Verilog HDL的基礎(chǔ)知識

    本文繼續(xù)介紹Verilog HDL基礎(chǔ)知識,重點(diǎn)介紹賦值語句、阻塞與非阻塞、循環(huán)語句、同步與異步、函數(shù)與任務(wù)語法知識。
    的頭像 發(fā)表于 10-24 15:00 ?59次閱讀
    Verilog HDL的<b class='flag-5'>基礎(chǔ)知識</b>

    負(fù)載開關(guān)基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《負(fù)載開關(guān)基礎(chǔ)知識.pdf》資料免費(fèi)下載
    發(fā)表于 10-08 09:56 ?1次下載
    負(fù)載開關(guān)<b class='flag-5'>基礎(chǔ)知識</b>

    品質(zhì)管理基礎(chǔ)知識

    品質(zhì)管理基礎(chǔ)知識
    的頭像 發(fā)表于 09-24 11:04 ?167次閱讀
    品質(zhì)管理<b class='flag-5'>基礎(chǔ)知識</b>

    C++語言基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《C++語言基礎(chǔ)知識.pdf》資料免費(fèi)下載
    發(fā)表于 07-19 10:58 ?6次下載

    FPGA基礎(chǔ)知識介紹

    電子發(fā)燒友網(wǎng)站提供《FPGA基礎(chǔ)知識介紹.pdf》資料免費(fèi)下載
    發(fā)表于 02-23 09:45 ?27次下載

    鴻蒙開發(fā)【設(shè)備開發(fā)基礎(chǔ)知識

    鴻蒙開發(fā)基礎(chǔ)知識講解
    的頭像 發(fā)表于 01-29 18:44 ?861次閱讀
    鴻蒙開發(fā)【設(shè)備開發(fā)<b class='flag-5'>基礎(chǔ)知識</b>】

    射頻與微波基礎(chǔ)知識

    射頻與微波基礎(chǔ)知識
    的頭像 發(fā)表于 01-16 10:05 ?747次閱讀
    射頻與微波<b class='flag-5'>基礎(chǔ)知識</b>

    電氣技術(shù)基礎(chǔ)知識

    電氣技術(shù)基礎(chǔ)知識
    的頭像 發(fā)表于 12-14 09:11 ?1428次閱讀
    電氣技術(shù)<b class='flag-5'>基礎(chǔ)知識</b>

    電子元器件的基礎(chǔ)知識

    電子元器件的基礎(chǔ)知識
    的頭像 發(fā)表于 12-04 10:42 ?4761次閱讀
    電子元器件的<b class='flag-5'>基礎(chǔ)知識</b>

    端接電阻基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《端接電阻基礎(chǔ)知識.doc》資料免費(fèi)下載
    發(fā)表于 11-21 09:31 ?0次下載
    端接電阻<b class='flag-5'>基礎(chǔ)知識</b>

    SPI協(xié)議基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《SPI協(xié)議基礎(chǔ)知識.pdf》資料免費(fèi)下載
    發(fā)表于 11-16 10:32 ?1次下載
    SPI協(xié)議<b class='flag-5'>基礎(chǔ)知識</b>

    基于STC8A8K64S4A12開發(fā)板的GPIO點(diǎn)燈實(shí)驗(yàn)

    最近空閑時間比較多,準(zhǔn)備說說STC8A8K64S4A12開發(fā)板。 實(shí)驗(yàn)做起來——先從GPIO點(diǎn)燈開始。
    的頭像 發(fā)表于 11-15 16:52 ?1166次閱讀
    基于STC<b class='flag-5'>8A8K64S</b>4A12開發(fā)板的<b class='flag-5'>GPIO</b>點(diǎn)燈實(shí)驗(yàn)

    電池的基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《電池的基礎(chǔ)知識.doc》資料免費(fèi)下載
    發(fā)表于 11-15 11:29 ?1次下載
    電池的<b class='flag-5'>基礎(chǔ)知識</b>

    紅外熱成像基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《紅外熱成像基礎(chǔ)知識.pdf》資料免費(fèi)下載
    發(fā)表于 11-01 09:44 ?5次下載
    紅外熱成像<b class='flag-5'>基礎(chǔ)知識</b>

    開關(guān)電源基礎(chǔ)知識

    電子發(fā)燒友網(wǎng)站提供《開關(guān)電源基礎(chǔ)知識.ppt》資料免費(fèi)下載
    發(fā)表于 10-27 14:15 ?50次下載
    開關(guān)電源<b class='flag-5'>基礎(chǔ)知識</b>