国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年02月06日(星期四)

正在發(fā)生

2021年02月06日 | STM8學(xué)習(xí)筆記二:51、arduino、stm8不同單片機的點燈方式

發(fā)布者:玄幻劍客 來源: eefocus關(guān)鍵字:STM8  單片機 手機看文章 掃描二維碼
隨時隨地手機看文章

我在學(xué)習(xí)單片機的過程中懵懵懂懂地學(xué)了半桶水,以上幾種單片機都學(xué)過一點,但是都不是很精,最近想把自己學(xué)過的知識梳理一遍,所以就做了這個筆記。

學(xué)習(xí)單片機有句話叫“萬物之初在于點燈”(誰說的?不知道,可能是魯迅∩0∩),所以我在這篇筆記里比較一下這三種單片機的4種點燈方式。

1、51單片機的點燈方式:

我用的51單片機是AT89S52,51單片機的設(shè)置和電路接線非常簡單。這也是51比較好學(xué)的原因。

#include
sbit LED1=P1^0; //P1口0 pin接LED,并在程序里定義
void delay(unsigned int z);
void main()
{

while(1)
{

D1=0;
delay(100);
D1=1;
delay(100);

}

}

void delay(unsigned int z) //延遲函數(shù)

{

unsigned int i,j;

for(i=0;ifor(j=0;j<100;j++);

}

2、arduino的點燈方式:

我用的是arduino uno的板子,arduino的設(shè)置和接線都相當(dāng)簡單,這正是電子愛好者最容易上手arduino的原因。

/*

LED閃爍程序

*/

// 大多數(shù)Arduino板的Pin 13會連接一個LED

int LED = 13;

void setup() {

// 將LED代表的13pin腳定義為輸出

pinMode(LED, OUTPUT);

}

void loop() {

digitalWrite(LED, HIGH); //開燈

delay(1000); // 等1秒

digitalWrite(LED, LOW); // 關(guān)燈

delay(1000); // 等1秒

}

3、STM8的兩種點燈代碼。

STM8和STM32有兩種編碼方式:庫函數(shù)模式和寄存器模式。寄存器模式與51單片機的編碼方式類似,即通過設(shè)置寄存器來控制IO口輸入輸出;庫函數(shù)模式則是通過調(diào)用官方提供的標(biāo)準(zhǔn)固件庫,來實現(xiàn)對IO口的控制。

固件庫可以這么理解,官方按照一定的標(biāo)準(zhǔn)格式,將寄存器的設(shè)置封裝在固件庫里,我們應(yīng)用時,可以不用去記繁雜的各種寄存器設(shè)置方法,只要應(yīng)用官方提供的固件庫標(biāo)準(zhǔn)接口函數(shù)即可實現(xiàn)對單片機的控制。

庫函數(shù)模式雖然不可避免地增加了代碼長度和一定的復(fù)雜度,但是從編程方式的簡易化、代碼的可讀性和通用性以及復(fù)雜工程的系統(tǒng)化等方面有極其明顯的優(yōu)勢。

但是寄存器模式也有它自己的優(yōu)勢,代碼短,結(jié)構(gòu)簡單,執(zhí)行效率高,在一些對系統(tǒng)資源比較緊張的工程中比較適用。

(1)庫函數(shù)版本:

首先是建立一個工程,建立STM8工程的方法可以參考我前一個筆記。

如下圖所示:

其中“Driver”文件夾下的“l(fā)ed.c”文件是用戶,也就是我們自己編寫的驅(qū)動文件。用戶在使用中,只需要編寫“l(fā)ed.c”驅(qū)動文件和“main.c”主函數(shù)就好了。

整個工程項目加入分層的思想,將對以后的移植非常有利。打個比方:底層和應(yīng)用層隔離。底層驅(qū)動與應(yīng)用層無關(guān),“main.c”函數(shù)在“l(fā)ed.c”驅(qū)動文件中已經(jīng)寫好,這些才與硬件有關(guān),這樣需要移植到不同硬件時,“main.c”主函數(shù)可以不做任何修改,只需要修改和底層相關(guān)的“l(fā)ed.c”驅(qū)動。

下面是“l(fā)ed.c”驅(qū)動程序示范。

#include "led.h"

void LED_Init(void)

{

GPIO_Init(LED1_PORT,LED1_PIN,GPIO_MODE_OUT_PP_HIGH_FAST );

//定義LED的管腳的模式

}

void LED1_Open(void)

{

GPIO_WriteLow(LED1_PORT,LED1_PIN);//打開LED

}

void LED1_Close(void)

{

GPIO_WriteHigh(LED1_PORT,LED1_PIN);//關(guān)掉LED

}

void LED1_Toggle(void)

{

GPIO_WriteReverse(LED1_PORT,LED1_PIN);//翻轉(zhuǎn)LED狀態(tài)

}

注:GPIO的輸入輸出和管腳模式設(shè)置準(zhǔn)備在另一個筆記里詳述,此處不詳細展開。

這里還要注意的是“l(fā)ed.h”,這個文件定義了操作硬件哪個具體的pin腳。如下面程序:

#ifndef __LED_H

#define __LED_H

#include "stm8s_gpio.h"

#define LED1_PIN GPIO_PIN_5

#define LED1_PORT GPIOB

void LED_Init(void);

void LED1_Open(void);

void LED1_Close(void);

void LED1_Toggle(void);

#endif

在這個頭文件里,我們定義了LED1對應(yīng)的是芯片的PB5腳,這跟我用來測試的stm8s103f3最小系統(tǒng)板的設(shè)置是符合的,PB5腳接了一個測試用的LED。

所以以后要使用更多的pin腳來控制LED燈或pin腳輸出,可以按以上“l(fā)ed.c”和“l(fā)ed.h”的形式來編寫驅(qū)動程序。

然后就是“main.c”主程序:

#include "stm8s.h"

#include "stm8s_clk.h"

#include "led.h"

void delay() //延遲函數(shù)

{

int i,j;

for(i=0;i<1000;i++)

{

for(j=0;j<1000;j++);

}

}

int main(void)

{

/*設(shè)置內(nèi)部高速時鐘16M為主時鐘*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

LED_Init(); //LED驅(qū)動程序初始化

LED1_Close(); //關(guān)閉LED1

while(1)

{

LED1_Toggle(); // LED1狀態(tài)翻轉(zhuǎn)

delay(); //延遲函數(shù)

}

}

主函數(shù)沒什么太多好講的,基本上思路跟前面51和arduino是一樣的。在實踐過程中我碰到過兩個問題,一個是時鐘設(shè)置的問題,另一個是由于ASSERT報錯的問題。這兩個問題我準(zhǔn)備都另外寫文說明一下,這里就不重復(fù)了。

(1)寄存器版本:

寄存器版本的程序簡單了,有多種寫法,下面是我寫的一個例子:

#include "stm8s.h"

#include "stm8s_clk.h"

void delay()

{

int i,j;

for(i=0;i<1000;i++)

{

for(j=0;j<1000;j++);

}

}

int main(void)

{

/*設(shè)置內(nèi)部高速時鐘16M為主時鐘*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

GPIOB->DDR = 0x20;//配置GPIOB的方向寄存器,設(shè)置pin5為輸出模式

GPIOB->CR1 = 0x20;//配置GPIOB_5為推挽輸出

GPIOB->CR2 = 0x00;

while(1)

{

GPIOB->DDR = 0x20;//GPIOB_5輸出高電平,亮

delay();

GPIOB->DDR = 0x00;//GPIOB_5輸出低電平,暗

delay();

}

}

STM8的GPIO寄存器配置可以參考下表。


關(guān)鍵字:STM8  單片機 引用地址:STM8學(xué)習(xí)筆記二:51、arduino、stm8不同單片機的點燈方式

上一篇:STM8學(xué)習(xí)筆記三——錯誤:no definition for "assert_failed"
下一篇:IAR for STM8學(xué)習(xí)筆記(一)建立工程

推薦閱讀

據(jù)報道,5G起航?jīng)_鋒第一梯隊已經(jīng)組成。主要領(lǐng)導(dǎo)人還是高通,據(jù)悉,高通牢牢抓住了智能手機大發(fā)展的機遇,依靠移動端的5G蓄勢,攜中國廠商OPPO、vivo、小米、聯(lián)想等發(fā)布“5G領(lǐng)航計劃”,趕超三星、蘋果也不再是一句口號。雖然臨近中國傳統(tǒng)新年,但作為5G上最為活躍的科技廠商,高通卻毫不懈怠。在近日的一場技術(shù)峰會上,高通請來了中國手機廠商中的“半壁江...
在2004年由威爾·史密斯主演的科幻大片《我,機器人》中,片中的機器人公司亮出了一句響亮的廣告詞——“2035年,這是個機器的時代。”而現(xiàn)實生活中,機器手雖然在自動生產(chǎn)線等領(lǐng)域有越來越廣泛的應(yīng)用,但它依然是冷冰冰工具的形象,具有高度智慧的機器人離普通人的生活依舊遙遠。不過,隨著近兩年人工智能迎來了一段爆發(fā)性成長之后,機器具備了更精準(zhǔn)地獲...
內(nèi)容說明本發(fā)明屬于漏水實時監(jiān)測系統(tǒng)裝置領(lǐng)域,尤其是涉及一種實時監(jiān)測柱塞泵盤根泄漏的檢測儀。發(fā)明背景油田注水是保持油層壓力、降低原油遞減率的主要措施,柱塞泵機組是油田生產(chǎn)的關(guān)鍵設(shè)備。一旦發(fā)生故障,常造成數(shù)萬元或數(shù)十萬元的經(jīng)濟損失和嚴重的社會危害,當(dāng)柱塞泵盤根由于老化等原因漏水,水會進入柱塞泵油箱,造成機油報廢給油田帶來較大經(jīng)濟損失...
小米預(yù)計將在2021年第一季度在國內(nèi)發(fā)布幾款新手機。今天,三款型號為 M2102J2SC、M2012K11AC 和 M2012K11C 的新手機出現(xiàn)在 3C 官方數(shù)據(jù)庫中。這些可能是即將推出的小米11/10 系列和 Redmi K40 系列手機。3C 認證表明,M2102J2SC、M2012K11AC 和 M2012K11C 都是支持 5G 的手機。此外,其清單顯示,出貨時將標(biāo)配型號為 MDY-11-EX 的 33W...

史海拾趣

小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved