欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

可編程數(shù)字輸入和輸出詳解

嵌入式應(yīng)用開(kāi)發(fā) ? 來(lái)源:嵌入式應(yīng)用開(kāi)發(fā) ? 作者:嵌入式應(yīng)用開(kāi)發(fā) ? 2022-06-18 19:30 ? 次閱讀

數(shù)字型輸入/輸出外設(shè)僅有兩種有效狀態(tài),習(xí)慣用On和Off、High和Low、打開(kāi)和關(guān)閉、接通和斷開(kāi)等表示兩種有效狀態(tài),譬如一個(gè)繼電器觸點(diǎn)的接通狀態(tài)和斷開(kāi)狀態(tài)、 一顆指示燈的on狀態(tài)和off狀態(tài)等。存儲(chǔ)一個(gè)數(shù)字型輸入/輸出外設(shè)的狀態(tài)信息僅需要一個(gè)二進(jìn)制位。絕大多數(shù)MCU的可編程I/O引腳都可編程輸出高電平和低電平, 這樣的I/O引腳電平狀態(tài)與相應(yīng)接口電路即可控制數(shù)字型輸出外設(shè)的狀態(tài),因此在MCU內(nèi)部使用二進(jìn)制位的“1”和“0”分別表示數(shù)字型輸出外設(shè)的狀態(tài)。 同時(shí),通過(guò)讀取MCU的I/O引腳的電平即可獲取數(shù)字型輸入外設(shè)的狀態(tài),并使用布爾型(Boolean)變量保存該狀態(tài)。

很多編程語(yǔ)言都支持布爾型變量,尤其支持嵌入式系統(tǒng)的編程語(yǔ)言,譬如C/C++語(yǔ)言。雖然布爾型變量的有效值僅為“1”和“0”,如果目標(biāo)計(jì)算機(jī)系統(tǒng)不支持位操作和位尋址, 布爾型變量仍占用一個(gè)字節(jié)或更多二進(jìn)制位來(lái)存儲(chǔ)一個(gè)二進(jìn)制信息?,F(xiàn)在的MCU絕大多數(shù)都支持位操作和位尋址,譬如ARM Cortex-M系列微內(nèi)核支持“bit-band”操作, 允許存取指令訪問(wèn)單個(gè)數(shù)據(jù)位(詳見(jiàn) [1]_ 的6.7節(jié))。

按鈕和LED指示燈是最簡(jiǎn)單的數(shù)字型輸入和輸出外設(shè),圖4.1給出BlueFi上的按鈕和LED指示燈的電路連接示意圖。

../_images/gpio_examples_reset_di_do.jpg

圖4.1 BlueFi上的按鈕和LED指示燈的電路連接示意圖

從上圖中,我們不僅能夠了解數(shù)字型輸入/輸出信號(hào)的電平電壓、驅(qū)動(dòng)電流、頻率和復(fù)位期間的默認(rèn)狀態(tài),還能了解如何讀取數(shù)字型輸入外設(shè)的狀態(tài)到內(nèi)部變量, 以及如何通過(guò)寫(xiě)外設(shè)存儲(chǔ)區(qū)的地址單元來(lái)控制數(shù)字型輸出狀態(tài)。

BlueFi的主MCU(nRF52840)的外部復(fù)位信號(hào)的有效電平為低電平(詳見(jiàn)nRF52840的產(chǎn)品說(shuō)明文檔 [2]_ ),且內(nèi)部帶有上電復(fù)位(即冷復(fù)位)電路(圖中黃色的電阻電容), 圖4.1給出最簡(jiǎn)單的外部復(fù)位電路:一個(gè)手動(dòng)復(fù)位按鈕,一端接地,另一端與“nRST”引腳連接。內(nèi)部上電復(fù)位電路的電阻與MCU的工作電源連接,當(dāng)外部手動(dòng)復(fù)位按鈕未被按下時(shí)保持復(fù)位引腳狀態(tài)為高電平, 這個(gè)電平的電壓顯然與MCU的工作電壓相等;當(dāng)按下手動(dòng)復(fù)位按鈕時(shí)復(fù)位引腳的狀態(tài)為低電平,這個(gè)電平的電壓與電源地相同。當(dāng)我們需要給nRF52840復(fù)位時(shí),只需要按下復(fù)位按鈕即可。 按下按鈕時(shí)從“nRST”引腳強(qiáng)制施加低電平信號(hào)給MCU內(nèi)核的內(nèi)部復(fù)位電路單元將片上所有功能單元(含CPU)復(fù)位,當(dāng)我們釋放手動(dòng)復(fù)位按鈕后,片上的上電復(fù)位電路確?!皀RST”引腳處于高電平, CPU開(kāi)始工作。我們?cè)诘?.7節(jié)已經(jīng)了解到MCU的多種復(fù)位源,在復(fù)位期間,nRF52840內(nèi)部的“RESETREAS”寄存器(0x4000 0400地址單元)將保存本次復(fù)位的信號(hào)源, 應(yīng)用程序可以根據(jù)這個(gè)寄存器的內(nèi)容來(lái)識(shí)別復(fù)位源。單按一次BlueFi的復(fù)位按鈕是正常的系統(tǒng)復(fù)位,而連續(xù)雙擊BlueFi的復(fù)位按鈕,你會(huì)發(fā)現(xiàn)BlueFi進(jìn)入Bootloader狀態(tài)。 這個(gè)功能是使用“RESETREAS”寄存器的內(nèi)容。

BlueFi的A和B按鈕是可編程的,兩個(gè)按鈕的電路連接完全相似(除了使用不同的I/O引腳),圖4.1中僅給出A按鈕的電路連接。A按鈕的接口電路不僅包含片外的按鈕, 還包含片內(nèi)的可配置上拉/下拉電阻,由于A按鈕的一端與MCU工作電源連接、另一端與P1.7引腳連接,當(dāng)A按鈕按下時(shí)P1.7引腳被強(qiáng)制與電源連接;如果P1.7的內(nèi)部配置為下拉電阻, 當(dāng)A按鈕釋放時(shí)P1.7引腳被下拉到電源地。通過(guò)讀取P1.7引腳的狀態(tài)確定A按鈕的狀態(tài),當(dāng)A按鈕按下時(shí)讀取狀態(tài)的結(jié)果為“1”(即高電平),當(dāng)A按鈕釋放時(shí)讀取狀態(tài)的結(jié)果為“0”(即低電平)。 當(dāng)我們將A按鈕的狀態(tài)保存到一個(gè)布爾型變量時(shí),如果不采用DMA(直接存儲(chǔ)器訪問(wèn))方式,nRF52840的CPU的工作過(guò)程為:將P1.IN寄存器(即0x5000 0810地址單元)讀入CPU內(nèi)部某個(gè)寄存器, 然后再將D7位的值(即P1.7引腳的狀態(tài))保存到布爾型變量(即“Bit_Band”區(qū)的某個(gè)地址單元)。

對(duì)于P1.7內(nèi)部可配置的上拉/下拉電阻的使用,需要在BlueFi初始化期間根據(jù)A按鈕的電路進(jìn)行編程配置。按照?qǐng)D4.1,使用Arduino IDE平臺(tái),A按鈕的初始化和使用代碼參考如下:

void setup() {
  // put your setup code here, to run once:
  pinMode(PIN_BUTTON1, INPUT_PULLDOWN);
}

void loop() {
  // put your main code here, to run repeatedly:
  bool state_aBtn = digitalRead(PIN_BUTTON1);
  if (state_aBtn == HIGH) {
    // A button be pressed
  } else {
    // A button be released
  }
}

第3行代碼是調(diào)用Arduino內(nèi)部函數(shù)“pinMode(PIN_BUTTON1, INPUT_PULLDOWN)”將P1.7引腳(即與A按鈕連接的I/O引腳)配置為輸入模式且使用內(nèi)部下拉電阻。在Arduin IDE平臺(tái), 有三種輸入配置:浮空輸入(INPUT)、上拉輸入(INPUT_PULLUP)和下拉輸入(INPUT_PULLDOWN)。第8行調(diào)用Arduino內(nèi)部函數(shù)“digitalRead(PIN_BUTTON1)”讀取A按鈕的狀態(tài), 由于按鈕的狀態(tài)為二進(jìn)制型信息,所以將A按鈕的當(dāng)前狀態(tài)暫存在布爾型變量“state_aBtn”中。根據(jù)圖4.1的電路結(jié)構(gòu),當(dāng)A按鈕被按下時(shí)布爾型變量“state_aBtn”的值為“true”或“HIGH”。 注意,“HIGH”是Arduino平臺(tái)的布爾型常量,“true”是C/C++編程語(yǔ)言的標(biāo)準(zhǔn)常量。

BlueFi有兩顆亮起時(shí)顏色分別為紅色和白色的LED指示燈,他們的連接電路如圖4.1所示,兩顆LED分別受P1.12和P1.14引腳控制。當(dāng)程序?qū)1.OUT寄存器(即0x5000 0804地址單元) 的D12位置位時(shí),P1.12引腳將輸“1”(即高電平),紅色LED指示燈將亮起;當(dāng)程序?qū)1.OUT寄存器的D12位清零時(shí),P1.12引腳輸入“0”(即低電平),紅色LED指示燈將熄滅。 BlueFi與其他數(shù)字電路采用相同的設(shè)計(jì)習(xí)慣,I/O引腳為高電平時(shí)對(duì)應(yīng)的電壓等于MCU的I/O工作電壓,低電平對(duì)應(yīng)的電壓等于電源地,按照前一章的BlueFi電路原理介紹, nRF52840使用3.3V作為I/O引腳電壓。根據(jù)紅色LED的正向壓降、串聯(lián)電阻的阻值和高電平的電壓,我們可以計(jì)算出紅色LED亮起時(shí)的電流(簡(jiǎn)稱on電流),這個(gè)電流的大小決定指示燈的亮度。

根據(jù)A按鈕的狀態(tài)控制紅色LED指示燈亮和滅的代碼如下:

oid setup() {
  // put your setup code here, to run once:
  pinMode(PIN_BUTTON1, INPUT_PULLDOWN);
  pinMode(LED_RED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  bool state_aBtn = digitalRead(PIN_BUTTON1);
  if (state_aBtn == HIGH) {
    // A button be pressed
    digitalWrite(LED_RED, HIGH);
  } else {
    // A button be released
    digitalWrite(LED_RED, LOW);
  }
}

按照“..Arduino15packagesadafruithardwarenrf520.20.5variantsbluefi_nrf52840variant.h“頭文件中對(duì)BlueFi的I/O引腳用法的定義, 只需要將上述代碼中的“LED_RED”引腳名稱替換為“LED_WHITE”,然后編譯并下載修改后的代碼到BlueFi,可以使用A按鈕控制白色LED的亮和滅。

與紅色LED相比,你也許已經(jīng)發(fā)現(xiàn)BlueFi的白色LED更亮一些。這說(shuō)明,白色LED指示燈on電流大于紅色LED。如果使用I/O引腳輸出的高電平電壓直接驅(qū)動(dòng)LED,并不斷地減小LED的串聯(lián)電阻阻值, LED的亮度將會(huì)不斷地增加嗎?如果假設(shè)I/O引腳輸出的高電平電壓是理想的(即內(nèi)阻為0且功率足夠大),這個(gè)問(wèn)題的答案是肯定的。事實(shí)上,所有MCU的I/O引腳的驅(qū)動(dòng)能力都是有限的, 按拉電流和灌電流兩種指標(biāo)分別指定每一個(gè)I/O引腳的驅(qū)動(dòng)能力。當(dāng)I/O引腳的驅(qū)動(dòng)能力無(wú)法滿足LED指示燈on電流時(shí),我們自然會(huì)想到外部驅(qū)動(dòng),如圖4.1中使用外部NPN三極管驅(qū)動(dòng)白色LED指示燈, 此時(shí)I/O引腳輸出的拉電流被三極管放大數(shù)十倍(即三極管的放大倍數(shù))作為白色LED指示燈on電流。當(dāng)外部數(shù)字型輸出外設(shè)需要更大的負(fù)載電流時(shí),或許需要多級(jí)結(jié)構(gòu)(如達(dá)林頓結(jié)構(gòu))的三極管提高放大倍數(shù)。

對(duì)于MCU的可編程I/O引腳,除了可配置的上拉/下拉電阻、可編程為輸入/輸出模式等,還有更多可配置的結(jié)構(gòu)。以nRF52840為例,我們需要進(jìn)一步了解其內(nèi)部的結(jié)構(gòu),如圖4.2所示。

../_images/nrf52840_gpio_pin_details_pin0.jpg

圖4.2 nRF52840可編程I/O引腳的內(nèi)部結(jié)構(gòu)

在上圖中,我們可以找到一個(gè)可編程輸入/輸出引腳的所有配置選項(xiàng)、輸入通道、輸出通道等。除了數(shù)字I/O功能之外,一個(gè)可編程輸入/輸出引腳也可以當(dāng)作模擬I/O功能引腳使用, 圖4.2中的“ANAEN”是編程配置一個(gè)引腳當(dāng)作數(shù)字I/O或模擬I/O的控制位。關(guān)于模擬輸入/輸出的功能,詳見(jiàn)下一節(jié)。在nRF52840的手冊(cè)中,我們可以找到每一個(gè)可編程輸入/輸出引腳的 配置和控制相關(guān)的存儲(chǔ)器地址和有效的控制位,“pinMode(pin,mode)”、“digitalRead(pin)”和“digitalWrite(pin,value)”等基本數(shù)字型I/O接口都是通過(guò)編程這些存儲(chǔ)單元而實(shí)現(xiàn)的。

已經(jīng)了解數(shù)字型I/O的電路和軟件接口之后,我們可以接著第3章最后一節(jié)的任務(wù):為BlueFi設(shè)計(jì)BSP,現(xiàn)在只涉及BlueFi的數(shù)字I/O相關(guān)的部分,即兩個(gè)輸入按鈕和兩個(gè)LED指示燈的BSP。 如果你是BlueFi的二次開(kāi)發(fā)(編程應(yīng)用)用戶,你將會(huì)如何使用按鈕和LED指示燈呢?BSP的目的是根據(jù)特定硬件電路封裝API并加快二次用戶開(kāi)發(fā)的工作效率,譬如BlueFi的兩個(gè)按鈕的配置 (需根據(jù)按鈕的電路結(jié)構(gòu))等,用戶只需調(diào)用BSP封裝的API即可得到“按鈕被按下/釋放/長(zhǎng)按“,或直接控制“紅色LED亮/滅/切換”等。

為了了解BSP的基本結(jié)構(gòu),我們首先來(lái)實(shí)現(xiàn)LED控制的API

審核編輯:符乾江

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

    關(guān)注

    5096

    文章

    19191

    瀏覽量

    308043
  • i/o控制
    +關(guān)注

    關(guān)注

    1

    文章

    4

    瀏覽量

    1000
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    可編程交流負(fù)載標(biāo)準(zhǔn)

    標(biāo)準(zhǔn)通常具有高精度和高穩(wěn)定性的特點(diǎn),在測(cè)試過(guò)程中,負(fù)載需要提供穩(wěn)定的電壓和電流輸出,以確保測(cè)試結(jié)果的準(zhǔn)確性。因此,可編程交流負(fù)載設(shè)備通常會(huì)采用先進(jìn)的控制技術(shù)和高精度的傳感器,以保證輸出的穩(wěn)定性和精度
    發(fā)表于 01-15 13:53

    可編程晶振的優(yōu)點(diǎn)和缺點(diǎn)

    可編程晶振,近年來(lái)漸入人們眼中。什么是可編程晶振,與普通晶振有什么區(qū)別?可編程晶振的優(yōu)點(diǎn)和缺點(diǎn)有哪些?1,什么是可編程晶振可編程晶振是一種可
    的頭像 發(fā)表于 09-30 10:44 ?517次閱讀
    <b class='flag-5'>可編程</b>晶振的優(yōu)點(diǎn)和缺點(diǎn)

    TMP401 ±1°C可編程、遠(yuǎn)程和本地數(shù)字輸出溫度傳感器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TMP401 ±1°C可編程、遠(yuǎn)程和本地數(shù)字輸出溫度傳感器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-13 10:17 ?0次下載
    TMP401 ±1°C<b class='flag-5'>可編程</b>、遠(yuǎn)程和本地<b class='flag-5'>數(shù)字</b><b class='flag-5'>輸出</b>溫度傳感器數(shù)據(jù)表

    可編程晶振都有什么頻率的呢?分享3個(gè)挑選可編程晶振的技巧

    頻率范圍全面覆蓋,滿足多樣化需求: ? CMOS可編程晶振:1~200MHz寬廣選擇,為您的基礎(chǔ)應(yīng)用提供穩(wěn)定可靠的支持。 ? 可編程差分晶振:高達(dá)2100MHz的卓越性能,滿足高速數(shù)據(jù)傳輸與信號(hào)處理的高標(biāo)準(zhǔn)要求。 ? 可編程壓控
    的頭像 發(fā)表于 07-18 18:30 ?1273次閱讀
    <b class='flag-5'>可編程</b>晶振都有什么頻率的呢?分享3個(gè)挑選<b class='flag-5'>可編程</b>晶振的技巧

    可編程電源的作用是什么

    可編程電源的作用是什么 可編程電源是一種電子設(shè)備,它可以根據(jù)用戶的需求調(diào)整輸出電壓和電流。這種電源廣泛應(yīng)用于各種電子設(shè)備和系統(tǒng)的測(cè)試、調(diào)試和研發(fā)過(guò)程中。 ### 可編程電源的作用 ##
    的頭像 發(fā)表于 06-10 15:33 ?760次閱讀

    可編程電源使用方法

    的使用技巧。 關(guān)鍵詞:可編程電源;使用方法;操作步驟;注意事項(xiàng) 1. 引言 可編程電源是一種廣泛應(yīng)用于電子設(shè)備測(cè)試、研發(fā)和生產(chǎn)領(lǐng)域的電源設(shè)備。它具有輸出電壓、電流可調(diào),輸出波形
    的頭像 發(fā)表于 06-10 15:29 ?1177次閱讀

    可編程電源如何編程

    可編程電源的編程方法和步驟。 ### 1. 可編程電源的基本概念 可編程電源通常由以下幾個(gè)部分組成: - **輸入模塊**:接收交流或直流
    的頭像 發(fā)表于 06-10 15:24 ?1586次閱讀

    ISL28633EV2Z輸入/輸出零漂移可編程增益儀表放大器評(píng)估板

    電子發(fā)燒友網(wǎng)站提供《ISL28633EV2Z輸入/輸出零漂移可編程增益儀表放大器評(píng)估板.rar》資料免費(fèi)下載
    發(fā)表于 06-07 16:28 ?0次下載

    什么是現(xiàn)場(chǎng)可編程邏輯陣列?它有哪些特點(diǎn)和應(yīng)用?

    可編程邏輯元件和可編程互連,實(shí)現(xiàn)邏輯電路的設(shè)計(jì)和配置。FPLA在電子系統(tǒng)設(shè)計(jì)、數(shù)字信號(hào)處理、網(wǎng)絡(luò)通信等多個(gè)領(lǐng)域都有廣泛應(yīng)用。本文將對(duì)現(xiàn)場(chǎng)可編程邏輯陣列進(jìn)行詳細(xì)介紹,包括其定義、原理、特
    的頭像 發(fā)表于 05-23 16:25 ?1147次閱讀

    SG-8002CA可編程晶振

    可編程。它在電源電壓、輸出頻率范圍、輸出式、存儲(chǔ)和工作溫度范圍內(nèi)具有多種選擇性。EPSON愛(ài)普生SG-8002CA可編程晶體振蕩器的輸出
    發(fā)表于 04-25 10:32 ?0次下載

    可編程片上系統(tǒng)是什么

    到一個(gè)芯片中。這種系統(tǒng)不僅具有處理器內(nèi)核、存儲(chǔ)器、輸入輸出接口等基本元件,還包含豐富的IP Core資源、足夠的片上可編程邏輯資源以及小容量的片內(nèi)高速RAM資源。
    的頭像 發(fā)表于 03-28 14:55 ?755次閱讀

    現(xiàn)場(chǎng)可編程門(mén)陣列的基本結(jié)構(gòu)和優(yōu)缺點(diǎn)

    現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)的基本結(jié)構(gòu)主要包括可編程輸入/輸出單元、基本可編程邏輯單元、嵌入式塊RAM、豐富的布線資源、底層嵌入功能單元和內(nèi)
    的頭像 發(fā)表于 03-27 14:49 ?702次閱讀

    現(xiàn)場(chǎng)可編程門(mén)陣列的原理和應(yīng)用

    可以根據(jù)用戶的設(shè)計(jì)進(jìn)行配置,形成所需的邏輯功能?;ミB資源則是一組可編程的連接通道,用于將PLU連接在一起,以實(shí)現(xiàn)用戶定義的電路拓?fù)浣Y(jié)構(gòu)。此外,F(xiàn)PGA還包括輸入輸出模塊(IOB),用于與外部設(shè)備或電路進(jìn)行連接。
    的頭像 發(fā)表于 03-27 14:49 ?847次閱讀

    現(xiàn)場(chǎng)可編程門(mén)陣列簡(jiǎn)介

    可編程邏輯塊(CLB)和輸入輸出模塊(IOB)。CLB是實(shí)現(xiàn)邏輯功能的基本單元,主要由邏輯函數(shù)發(fā)生器、觸發(fā)器、數(shù)據(jù)選擇器等數(shù)字邏輯電路構(gòu)成。IOB則提供了芯片引腳和內(nèi)部邏輯陣列之間的連接,可獨(dú)立
    的頭像 發(fā)表于 03-27 14:48 ?668次閱讀

    現(xiàn)場(chǎng)可編程門(mén)陣列是什么

    現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array,簡(jiǎn)稱FPGA)是一種超大規(guī)模可編程邏輯器件,由可編程邏輯資源、可編程互連資源和
    的頭像 發(fā)表于 03-16 16:38 ?2600次閱讀