日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

嵌入式應用開發(fā) ? 來源:嵌入式應用開發(fā) ? 作者:嵌入式應用開發(fā) ? 2022-06-18 19:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

../_images/gpio_examples_reset_di_do.jpg

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

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

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

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

對于P1.7內(nèi)部可配置的上拉/下拉電阻的使用,需要在BlueFi初始化期間根據(jù)A按鈕的電路進行編程配置。按照圖4.1,使用Arduino IDE平臺,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平臺, 有三種輸入配置:浮空輸入(INPUT)、上拉輸入(INPUT_PULLUP)和下拉輸入(INPUT_PULLDOWN)。第8行調(diào)用Arduino內(nèi)部函數(shù)“digitalRead(PIN_BUTTON1)”讀取A按鈕的狀態(tài), 由于按鈕的狀態(tài)為二進制型信息,所以將A按鈕的當前狀態(tài)暫存在布爾型變量“state_aBtn”中。根據(jù)圖4.1的電路結(jié)構(gòu),當A按鈕被按下時布爾型變量“state_aBtn”的值為“true”或“HIGH”。 注意,“HIGH”是Arduino平臺的布爾型常量,“true”是C/C++編程語言的標準常量。

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

根據(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“頭文件中對BlueFi的I/O引腳用法的定義, 只需要將上述代碼中的“LED_RED”引腳名稱替換為“LED_WHITE”,然后編譯并下載修改后的代碼到BlueFi,可以使用A按鈕控制白色LED的亮和滅。

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

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

../_images/nrf52840_gpio_pin_details_pin0.jpg

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

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

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

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

審核編輯:符乾江

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

    關(guān)注

    5210

    文章

    20680

    瀏覽量

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

    關(guān)注

    1

    文章

    4

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    XR77103:通用3輸出可編程降壓調(diào)節(jié)器的卓越之選

    可編程降壓調(diào)節(jié)器。 文件下載: XR77103EVB-DEMO-1.pdf 一、產(chǎn)品概述 XR77103具備三個高效、寬輸入范圍的同步降壓轉(zhuǎn)換器。每個轉(zhuǎn)換器都可以通過數(shù)字編程進行控制,
    的頭像 發(fā)表于 04-27 16:35 ?82次閱讀

    電子工程師必看:MAX5420/MAX5421數(shù)字可編程精密分壓器

    電子工程師必看:MAX5420/MAX5421數(shù)字可編程精密分壓器 在電子設(shè)計領(lǐng)域,可編程增益放大器(PGA)是一個關(guān)鍵的組成部分,而數(shù)字可編程
    的頭像 發(fā)表于 04-18 09:15 ?154次閱讀

    AD5930可編程頻率掃描與輸出突發(fā)波形發(fā)生器:功能特性與應用解析

    AD5930可編程頻率掃描與輸出突發(fā)波形發(fā)生器:功能特性與應用解析 一、引言 在電子設(shè)計領(lǐng)域,波形發(fā)生器是一個非常重要的組件,它廣泛應用于頻率掃描、雷達、網(wǎng)絡/阻抗測量等多個領(lǐng)域。今天我們要深入探討
    的頭像 發(fā)表于 04-14 16:40 ?116次閱讀

    如何實現(xiàn)可編程直流電源的脈沖輸出模式

    隨著電子技術(shù)的不斷發(fā)展,可編程直流電源已廣泛應用于科研、工業(yè)測試和自動化生產(chǎn)等領(lǐng)域。其中,脈沖輸出模式因其能夠模擬瞬態(tài)負載、進行動態(tài)響應測試等特殊功能,成為許多高精度應用場景中的關(guān)鍵需求。那么,如何實現(xiàn)可編程直流電源的脈沖
    的頭像 發(fā)表于 04-11 15:08 ?516次閱讀
    如何實現(xiàn)<b class='flag-5'>可編程</b>直流電源的脈沖<b class='flag-5'>輸出</b>模式

    探索CAT523:數(shù)字可編程電位器的卓越性能與應用

    探索CAT523:數(shù)字可編程電位器的卓越性能與應用 在電子設(shè)計領(lǐng)域,數(shù)字可編程電位器(DPP)是一種極為實用的器件,它為工程師們提供了靈活的電壓控制解決方案。今天,我們將深入探討Cat
    的頭像 發(fā)表于 04-10 16:15 ?230次閱讀

    探索CAT5110/5118/5119:32抽頭數(shù)字可編程電位器的奧秘

    探索CAT5110/5118/5119:32抽頭數(shù)字可編程電位器的奧秘 在電子設(shè)計領(lǐng)域,數(shù)字可編程電位器是一種非常實用的元件,它能為電路設(shè)計帶來更高的靈活性和精確性。今天,我們就來深入
    的頭像 發(fā)表于 04-10 16:05 ?182次閱讀

    CAT5114:32抽頭數(shù)字可編程電位器的技術(shù)解析與應用

    CAT5114:32抽頭數(shù)字可編程電位器的技術(shù)解析與應用 在電子設(shè)計領(lǐng)域,數(shù)字可編程電位器(DPP)正逐漸成為替代傳統(tǒng)機械電位器和微調(diào)電位器的理想選擇。今天,我們就來深入探討Catal
    的頭像 發(fā)表于 04-10 16:05 ?193次閱讀

    CAT5111:100抽頭數(shù)字可編程電位器的特性與應用

    CAT5111:100抽頭數(shù)字可編程電位器的特性與應用 在電子設(shè)計領(lǐng)域,數(shù)字可編程電位器為電路設(shè)計帶來了極大的靈活性和便利性。今天我們就來深入了解一下CAT5111這款100抽頭
    的頭像 發(fā)表于 04-10 15:50 ?228次閱讀

    AD7631:18位、250 kSPS差分可編程輸入ADC的技術(shù)剖析

    AD7631:18位、250 kSPS差分可編程輸入ADC的技術(shù)剖析 在電子設(shè)計領(lǐng)域,模數(shù)轉(zhuǎn)換器(ADC)是連接模擬世界和數(shù)字世界的關(guān)鍵橋梁。今天我們要深入探討的是Analog Devices公司
    的頭像 發(fā)表于 04-02 10:35 ?176次閱讀

    MAX4995系列可編程電流限制開關(guān):設(shè)計與應用詳解

    MAX4995系列可編程電流限制開關(guān):設(shè)計與應用詳解 在電子設(shè)備的設(shè)計中,電流限制開關(guān)起著至關(guān)重要的作用,它能夠保護主機設(shè)備免受負載故障的影響。今天,我們就來詳細探討一下Maxim
    的頭像 發(fā)表于 02-09 15:05 ?844次閱讀

    MAX270/MAX271 數(shù)字可編程雙二階連續(xù)時間低通濾波器詳解

    MAX270/MAX271 數(shù)字可編程雙二階連續(xù)時間低通濾波器詳解 引言 在電子設(shè)計領(lǐng)域,濾波器的性能對于信號處理至關(guān)重要。Maxim Integrated公司的MAX270/MAX271數(shù)字
    的頭像 發(fā)表于 01-19 16:30 ?326次閱讀

    Zynq全可編程片上系統(tǒng)詳解

    Zynq 是由賽靈思(Xilinx,現(xiàn)為 AMD 的一部分)推出的一系列全可編程片上系統(tǒng)。它的革命性創(chuàng)新在于,它不是傳統(tǒng)的 FPGA,也不是傳統(tǒng)的處理器,而是將高性能的 ARM Cortex-A 系列處理器與傳統(tǒng)的 FPGA 可編程邏輯緊密地集成在單一芯片上。
    的頭像 發(fā)表于 01-13 11:41 ?2292次閱讀
    Zynq全<b class='flag-5'>可編程</b>片上系統(tǒng)<b class='flag-5'>詳解</b>

    新品 | Chain DualKey,可編程雙按鍵輸入開發(fā)板

    ChainDualKey是一款可編程雙按鍵輸入開發(fā)板,搭載ESP32-S3FN8主控芯片。正面集成2個支持熱插拔的青軸機械鍵盤按鍵及2個可編程RGBLED,交互反饋優(yōu)異;內(nèi)置350mAh鋰電池,結(jié)合
    的頭像 發(fā)表于 10-31 16:31 ?1925次閱讀
    新品 | Chain DualKey,<b class='flag-5'>可編程</b>雙按鍵<b class='flag-5'>輸入</b>開發(fā)板

    PGA855可編程增益儀表放大器技術(shù)解析與應用指南

    Texas Instrument PGA855可編程增益儀表放大器是一款具有全差分輸出的高帶寬可編程增益儀表放大器。PGA855有八個二進制增益設(shè)置,衰減增益范圍為0.125V/V到16V/V,使用三個
    的頭像 發(fā)表于 08-08 14:53 ?1667次閱讀
    PGA855<b class='flag-5'>可編程</b>增益儀表放大器技術(shù)解析與應用指南

    可編程SLIC語音芯片哪家好?

    在當今數(shù)字化快速發(fā)展的時代,語音芯片的應用越來越廣泛,而可編程SLIC(用戶線路接口電路)語音芯片更是憑借其獨特的優(yōu)勢,受到眾多行業(yè)的青睞。那么,面對眾多的選擇,哪家的可編程SLIC語音芯片更勝一籌
    的頭像 發(fā)表于 06-12 13:55 ?915次閱讀
    <b class='flag-5'>可編程</b>SLIC語音芯片哪家好?
    乌兰浩特市| 黔东| 平阴县| 江城| 贵州省| 江口县| 栾川县| 玉林市| 哈尔滨市| 岫岩| 和平县| 鄂尔多斯市| 珠海市| 白银市| 余干县| 清新县| 奉节县| 尉犁县| 绥化市| 长岛县| 寿宁县| 昌乐县| 兴国县| 上饶县| 慈溪市| 宁波市| 安泽县| 霍州市| 博湖县| 宾阳县| 嘉兴市| 长白| 靖西县| 安图县| 华亭县| 池州市| 红河县| 开鲁县| 湖北省| 中超| 芜湖县|