在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

第七章 GPIO——位帶操作

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-22 16:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32 提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZPGgbOfaANhwzACodXd3sVzg463.png

第七章 GPIO——位帶操作

本章參考資料:《W55MH32-中文參考手冊》存儲器和總線構架章節、GPIO章節。

1 位帶操作基礎

1.1 位帶技術概述

位操作是指針對單個二進制比特位的獨立讀寫操作,這一特性在 51 單片機開發中極為常見(51 單片機通過sbit關鍵字實現位定義)。不同于 51 單片機,W55MH32 采用位帶別名區訪問機制實現位操作功能。

在 W55MH32 中,位帶技術主要應用于兩大區域:

SRAM 位帶區:SRAM 空間的最低 1MB 區域(地址范圍:0X20000000~0X200FFFFF)

外設位帶區:片上外設空間的最低 1MB 區域(地址范圍:0X40000000~0X40100000)

這兩個 1MB 的基礎位帶區除具備常規存儲操作功能外,還映射了專屬的位帶別名區。位帶別名區通過特殊機制將基礎位帶區的每個比特位擴展為 32 位字(4 字節),通過訪問這些擴展后的 32 位字,即可實現對原基礎位帶區中指定比特位的精準操作。W55MH32 的內存映射與位帶區關系可參考下圖:

wKgZO2gu4zOANvivAAE60Sw1wGc380.png

1.2 位帶區細分解析

1.2.1 外設位帶區

外設位帶區地址范圍為 0X40000000~0X40100000(1MB),覆蓋了 W55MH32 片上外設的全部寄存器(寄存器地址范圍:0X40000000~0X40029FFF)。其對應的位帶別名區地址范圍為 0X42000000~0X43FFFFFF(32MB),該區間恰好落在 W55MH32 保留地址空間(0X40030000~0X4FFFFFFF)內,避免了與其他外設寄存器地址的沖突。

與 51 單片機僅部分寄存器支持位操作(如 SBUF 需字節操作)不同,W55MH32 的所有片上外設寄存器均支持位帶操作,這一特性顯著提升了底層控制的靈活性。不過需注意:實際項目中通常不會對所有寄存器進行位操作,僅在需要高頻操作 IO 口等特定場景下,才會針對性地對 IO 相關寄存器啟用位操作。

1.2.2 SRAM位帶區

SRAM 位帶區地址范圍為 0X20000000~0X200FFFFF(1MB),對應的位帶別名區地址范圍為 0X22000000~0X23FFFFFF(32MB)。由于 SRAM 的位操作需求較少,該區域的實際應用場景相對有限。

1.3 位帶地址轉換機制

位帶區的每個比特位擴展為 32 位字后,僅最低有效位(LSB)有效。盡管看似空間利用率不高,但這種設計與 W55MH32 的 32 位系統總線架構匹配,能確保以 4 字節為單位的訪問效率最大化。

1.3.1 地址轉換公式

通過指針訪問位帶別名區地址,即可實現對基礎位帶區比特位的操作。具體轉換公式如下:

外設位帶別名區地址:設基礎位帶區中某比特所在字節地址為A,位序號為n(0≤n≤31,實際范圍由寄存器位寬決定),則其在別名區的地址為:

AliasAddr= =0x42000000+ (A-0x40000000)*8*4 +n*4

公式解析:

0x42000000:外設位帶別名區起始地址

(A - 0x40000000):目標比特前的字節數

×8×4:單字節 8 位,每位擴展為 4 字節

n×4:目標比特在字節內的偏移(每位占 4 字節)

SRAM 位帶別名區地址:設基礎位帶區中某比特所在字節地址為A,位序號為n,則其在別名區的地址為:

AliasAddr= =0x22000000+ (A-0x20000000)*8*4 +n*4

公式解析:公式邏輯與外設位帶區一致,僅起始地址(0x22000000)和基礎位帶區起始地址(0x20000000)不同。

1.3.2 統一宏定義

為簡化操作,可將兩類地址轉換合并為統一宏定義:

// 把“位帶地址+位序號”轉換成別名地址的宏
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF)

addr & 0xF0000000:提取地址高位(0x40000000 或 0x20000000),用于區分外設 / SRAM 區域

+0x02000000:將高位轉換為別名區起始地址(0x42000000 或 0x22000000)

(addr & 0x00FFFFFF) << 5:等效于(A - 基礎區起始地址)×8×4(屏蔽高位后左移 5 位 =×32=×8×4)

bitnum << 2:等效于n×4(左移 2 位 =×4)

配合以下宏可實現位帶操作:

// 把一個地址轉換成一個指針
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))

// 把位帶別名區地址轉換成指針
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))

2 GPIO位帶操作實踐

2.1 GPIO 寄存器映射

外設位帶區覆蓋了所有片上外設寄存器,理論上可通過宏為每個寄存器位定義別名地址。但實際開發中,通常僅針對高頻操作的 GPIO 寄存器(如輸出數據寄存器 ODR、輸入數據寄存器 IDR)啟用位操作。

根據手冊,GPIO 的 ODR 和 IDR 寄存器相對于 GPIO 基址的偏移分別為 12 和 8(GPIOx_BASE由庫函數定義)。具體寄存器地址映射如下:

代碼清單:位帶操作-1 GPIO ODR 和 IDR 寄存器映射

// GPIO ODR 和 IDR 寄存器地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C

#define GPIOA_IDR_Addr    (GPIOA_BASE+8)  //0x40010808
#define GPIOB_IDR_Addr    (GPIOB_BASE+8)  //0x40010C08
#define GPIOC_IDR_Addr    (GPIOC_BASE+8)  //0x40011008
#define GPIOD_IDR_Addr    (GPIOD_BASE+8)  //0x40011408
#define GPIOE_IDR_Addr    (GPIOE_BASE+8)  //0x40011808
#define GPIOF_IDR_Addr    (GPIOF_BASE+8)  //0x40011A08
#define GPIOG_IDR_Addr    (GPIOG_BASE+8)  //0x40011E08

注:不同單片機型號的 GPIO 端口數量可能不同(如 64pin 型號最多僅支持到 C 端口),實際使用時需根據具體型號調整。

2.2 GPIO位操作宏定義

通過位帶別名區地址,可直接操作指定 GPIO 端口的單個 IO 口。以下為 GPIO 輸入 / 輸出位操作的宏定義:

代碼清單:位帶操作-2 GPIO 輸入輸出位操作

// 單獨操作 GPIO的某一個IO口,n(0,1,2...15),n表示具體是哪一個IO口
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //輸出
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //輸入

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //輸出
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //輸入

#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //輸出
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //輸入

#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //輸出
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //輸入

#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //輸出
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //輸入

#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //輸出
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //輸入

#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //輸出
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //輸入

2.3 主函數示例

以下為通過位操作控制 GPIO 的主函數示例:

代碼清單:位帶操作-3 main 函數

int main(void)
{
    // 程序來到main函數之前,啟動文件:statup_w55mh32_hd.s已經調用
    // SystemInit()函數把系統時鐘初始化成72MHZ
    // SystemInit()在system_w55mh32.c中定義
    // 如果用戶想修改系統時鐘,可自行編寫程序修改

    LED_GPIO_Config();

    while ( 1 ) {

    PDout(14)= 0;
    SOFT_Delay(0x0FFFFF);

    }
}

WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6067

    文章

    44969

    瀏覽量

    649728
  • WIZnet
    +關注

    關注

    3

    文章

    20

    瀏覽量

    42438
  • GPIO
    +關注

    關注

    16

    文章

    1280

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    《我和 LabVIEW》示例程序(2010.04.02)光盤第一至第七章

    《我和 LabVIEW》示例程序(2010.04.02)光盤第一至第七章
    發表于 06-27 17:08

    《測控電路》習題完整參考答案(第七章

    《測控電路》習題完整參考答案(第七章
    發表于 05-07 11:38

    第七章MMU例子代碼交叉編譯后下載到mini2440后,LED燈一直亮著并沒有閃

    在書的第七章MMU的例子代碼交叉編譯后下載到mini2440后,LED燈一直亮著并沒有閃。不知道是什么原因,有沒有人遇到過相同問題的?剛剛開始的時候認為是延時不夠長,自己把wait()改長后還是沒有用。另外除了LED外,還有別的東西能指示作用嗎?謝謝。
    發表于 05-17 05:04

    GPIO按鍵實驗與帶操作

    1、按鍵實驗:GPIO_ReadInputDataBit來獲取狀態,高電平返回1.低電平返回0;2、GPIO——帶操作:3、啟動文件詳解
    發表于 08-23 09:19

    高頻電子線路第七章答案

    高頻電子線路第七章答案.
    發表于 06-05 10:42 ?42次下載

    《測控電路》習題完整參考答案(第七章

    《測控電路》習題完整參考答案(第七章
    發表于 02-14 17:02 ?0次下載

    第七章AVR單片機的應用

    第七章AVR單片機的應用
    發表于 09-21 11:41 ?4次下載
    <b class='flag-5'>第七章</b>AVR單片機的應用

    stm8s BLDC電機 第七章源代碼 資料下載

    stm8s BLDC電機 第七章源代碼
    發表于 03-12 10:35 ?12次下載

    電力系統繼電保護第七章-微機保護概述(課件)下載.ppt

    繼電保護第七章-微機保護概述(課件)
    發表于 04-28 09:43 ?0次下載
    電力系統繼電保護<b class='flag-5'>第七章</b>-微機保護概述(課件)下載.ppt

    快速理解STM32帶操作原理

    作者:strongerHuang 說到位帶操作,可能很多人比較陌生,但說到控制IO,你肯定不會陌生。有的項目為了最大效率控制IO,使用帶操作。下面就來簡單說說未帶操作的內容。 一、初
    的頭像 發表于 09-03 15:40 ?5098次閱讀
    快速理解STM32<b class='flag-5'>位</b><b class='flag-5'>帶操作</b>原理

    第七章 開關電源PCB排版解析

    第七章 開關電源PCB排版解析7.1 鏡像面電磁理論中的鏡像面概念對設計者掌握開關電源的PCB 排版會有很大的幫助。  下面是鏡像面的基本概念。  (a)是當直流電流在一個接地層上方流過時的情景
    發表于 10-21 15:21 ?0次下載
    <b class='flag-5'>第七章</b> 開關電源PCB排版解析

    STM32單片機---帶操作

    STM32單片機---帶操作一、帶操作二、寄存器地址與別名地址轉換技巧三、帶操作LED燈示
    發表于 11-29 14:51 ?2次下載
    STM32單片機---<b class='flag-5'>位</b><b class='flag-5'>帶操作</b>

    初識“帶操作

    目錄初識“帶操作”什么是“帶操作”?STM32的“帶操作”為何會出現?STM32“
    發表于 01-12 17:18 ?0次下載
    初識“<b class='flag-5'>位</b><b class='flag-5'>帶操作</b>”

    STM32帶操作-詳解-計算過程

    前言這篇文章主要用來講解STM32中的帶操作,學習過51單片機的應改了解,在控制51單片機IO引腳時,只需要向某一個IO口賦值就可以實現,對應IO口的輸出高或地。那么STM32可以不可以像51
    發表于 01-17 10:43 ?5次下載
    STM32<b class='flag-5'>位</b><b class='flag-5'>帶操作</b>-詳解-計算過程

    衛星通信v2 第七章 仿真與實戰(10)關鍵技術

    !其他的算法都是需要根據環境而變!頭大了吧?當年我也是如此! 捕獲! 原文標題:衛星通信v2 第七章 仿真與實戰(10)關鍵技術 文章出處:【微信公眾號:通信工程師專輯】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 02-06 12:55 ?951次閱讀
    主站蜘蛛池模板: 免费四虎永久在线精品 | 轻点灬大ji巴太粗太长了爽文 | 亚洲综合激情九月婷婷 | 午夜在线免费观看视频 | 特级一级全黄毛片免费 | 亚洲免费观看在线视频 | 天天操天天噜 | 国产精品三级在线观看 | 亚洲综合色视频 | 玖玖爱这里只有精品 | 三级理论手机在线观看视频 | 两人性世界 | 丁香花在线影院观看在线播放 | 日本韩国三级在线 | 免费国内精品久久久久影院 | 男男扒开后菊惩罚 | 青草午夜精品视频在线观看 | 亚洲精品国产美女在线观看 | a资源在线| 日韩中文字幕电影 | 国产香蕉75在线播放 | 噜噜噜色 | 亚洲一区中文字幕在线 | 在线看欧美成人中文字幕视频 | 人人爱天天做夜夜爽毛片 | 久久婷婷久久一区二区三区 | 国产哺乳期奶水avav | 日韩亚 | 求网址你懂的手机在线观看网站 | 欧美成人亚洲欧美成人 | 美女扒尿口给男人桶到爽 | 中文字幕国产一区 | 欧美精品videosex性欧美 | 天天碰天天操 | sihu国产午夜精品一区二区三区 | 国产高清在线 | 91精品福利久久久 | 又黄又湿又爽 | 一级毛片黄色 | 日本一区三区二区三区四区 | 婷婷色在线 |