日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]Ⅰ、寫在前面完事開頭難,只要肯努力;師傅領進門,修行看個人;當你看到本文,說明你是幸運的,作者接下來推出的一系列STM8S教程,將助你踏入STM8S的世界。本文是STM8S教程的開始,寫給剛入門STM8S的朋友。學習本文

Ⅰ、寫在前面

完事開頭難,只要肯努力;師傅領進門,修行看個人;當你看到本文,說明你是幸運的,作者接下來推出的一系列STM8S教程,將助你踏入STM8S的世界。

本文是STM8S教程的開始,寫給剛入門STM8S的朋友。學習本文之前,建議你先掌握C語言基礎知識,了解單片機基礎知識。

作者將理論知識結合軟件工程源代碼講述STM8S的相關知識,如果你掌握單片機基礎知識,那么內容難度比較低。教程重點結合“STM8S參考手冊”來講述相關理論知識。



為方便大家閱讀,本文內容已經整理成PDF文件:

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


作者:strongerHuang

版權所有,未經允許,禁止用于其它商業(yè)用途?。?!

Ⅱ、GPIO基礎知識

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

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

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

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

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

每一個IO都可以配置成外部中斷,可以單獨使能和關閉;

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

Ⅲ、本文GPIO軟件工程說明

為了方便大家理解軟件工程具體實現了什么功能,將簡述一下重要的幾點內容。

本文是基礎的軟件工程,主要講述軟件工程相關說明、軟件流程及重點講述GPIO配置的內容。

學習本文之前建議學習如下兩篇文章:

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

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

文章最后提供下載內容:STM8S資料、本文對應軟件工程源代碼。

Ⅳ、軟件工程源代碼1.關于工程

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

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

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

STM8S005、STM8AF626x、STM8AF622x、STM8S103、STM8S003、STM8S903

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

修改兩個地方:

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

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

2.軟件流程

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

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

3.代碼分析說明

A.配置時鐘

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

配置時鐘代碼如下:

voidCLK_Configuration(void)

{

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

}

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

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

初始化配置為推挽高速輸出,輸出默認值為低:

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

具體配置參數有多種:

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;

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

C.具體實現功能

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

代碼:

while(1)

{

LED_ON; //LED亮

SoftwareDelay(0x6000);

LED_OFF; //LED滅

SoftwareDelay(0x6000);

}

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

好了,希望以上一些基礎內容希望對初學的你有所幫助。

Ⅴ、下載

STM8S資料:

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

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

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


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統,而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉