江協科技STM32學習筆記補充之001。為什么C語言在對STM32編程過程中的二進制要用十六進制來進行讀寫。而不能直接用二進制來進行讀寫。

下面給你一個“為什么嵌入式 C(如 STM32)普遍用十六進制而不是二進制來讀寫寄存器/地址”的系統性分析。核心觀點:十六進制是對底層位模式更高效、更可靠的“人類可讀編碼”,與硬件資料、編譯器和調試器生態形成了標準化協同。

1)語言標準與工具鏈支持

  • 可移植性:C89/C99/C11 標準都沒有二進制字面量(0b...),只有十進制、八進制、十六進制。許多編譯器(如舊版 Keil armcc)不支持 0b;而 十六進制是所有 C 編譯器都標準支持 的。

  • 庫函數/IO:標準 printf/scanf 沒有 %b(二進制)格式,調試打印/日志天然用 %x。你要用二進制就得自己寫轉換函數或依賴非標擴展。

  • 調試器與 IDE:寄存器窗口、內存窗口、反匯編器、Linker map 等默認以 hex 展示;斷點地址、PC/LR/SP 等也以 hex 呈現,生態統一。

2)可讀性與容錯性(人因工程)

  • 信息密度:1 位十六進制 = 4 位二進制(1 個“半字節/nybble”)。同樣的位型,hex 更短更不易抄寫出錯:

    • 二進制:0b0101 0011 1010 0001

    • 十六進制:0x53A1

  • 分組契合硬件:寄存器常按 4 位對齊說明(bit[7:4], bit[3:0]…),每個 hex 位正好對應 4 個物理位,查 datasheet/參考手冊時非常自然。

  • 快速目測:設置/清除高位/低位時,hex 更容易看出“哪一組 4 位在變化”,比 16~32 位長串 0/1 容錯率更高。

3)與硬件文檔的一致性

  • 地址/偏移:外設基址、寄存器偏移在參考手冊里都是十六進制(如 0x4002 1000)。你在代碼里也寫 hex,一一對應、不需換算

  • 位掩碼/重置值:手冊中的默認值、mask、字段寬度也常以 hex 給出(如 0xFFFF_FFFF0xA5 key)。直接抄到代碼里最不易錯。

4)表達常見位操作更自然

  • 單個位:用移位表達最穩妥、最可移植:

    reg |= (1u << 13); // 置位 bit13 reg &= ~(1u << 2); // 清 bit2

    這比寫長串二進制直觀、少錯,并和 CMSIS 的位定義風格一致。

  • 多位字段(nibbles/bytes):當修改 4 位或 8 位的字段時,hex 掩碼/值更簡短

    reg = (reg & ~0x00F0u) | (0x0Au << 4); // 寫4位字段

    如果用二進制,要寫/讀 4~8 個連續 0/1,容易數錯位。

5)二進制字面量的現實問題

  • 可移植性差:即便有的編譯器支持 0b1010, 也常是 GNU 擴展;換到另一套工具鏈(如舊 Keil、IAR 的某些配置)就可能編譯不過。

  • 維護成本:團隊協作時,審閱者、調試器和腳手架工具大多默認 hex。大量二進制字面量會造成閱讀/打印/定位的不一致。

6)何時“可以/值得”用二進制

  • 查表/固定模式:需要直接看清每一位的圖樣,比如段碼、GPIO 組態模板、通信幀測試數據等,可使用(在你的編譯器支持 0b 時):

    // 僅示例,前提是編譯器支持 0b 前綴 static const uint8_t seg7_A = 0b01110111;

  • 代碼生成/宏:或用宏把位展開成人可讀形式:

    #define BIT(n) (1u << (n)) reg |= BIT(5) | BIT(7);

    這樣既避免二進制字面量的不兼容,又保留位級語義。

7)替代方案與最佳實踐(STM32 常用)

  1. 地址/偏移/重置值 → 用十六進制(與手冊一致)。

  2. 單個位控制 → 用移位宏BIT(n) / (1u<<n)

  3. 多位字段 → 用掩碼+移位,掩碼常用 hex:

    #define RCC_CFGR_PPRE1_Pos 10u #define RCC_CFGR_PPRE1_Msk (0x7u << RCC_CFGR_PPRE1_Pos) #define RCC_CFGR_PPRE1_DIV2 (0x4u << RCC_CFGR_PPRE1_Pos) RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_PPRE1_Msk) | RCC_CFGR_PPRE1_DIV2;

  4. 用官方/庫定義:CMSIS/LL/HAL 已提供位名、掩碼、枚舉,更可讀、少錯、可移植

  5. 調試輸出 → %x,與調試器地址/寄存器視圖一致。

8)小結(要點對比)

方面十六進制二進制
語言標準標準、通用老標準不支持;常為擴展
可讀性短、4位一組、對齊寄存器說明冗長,易數錯位
調試/打印原生 %x、調試器統一%b,需自寫工具
文檔一致性與手冊/地址/掩碼完全一致需換算
適用場景地址、掩碼、字段、調試段碼/圖樣/教學演示

結論:在 STM32 的 C 編程中,十六進制并非“功能上優于二進制”,而是生態、可讀性、可移植性綜合最佳的表達方式;二進制可在特殊場景用作輔助手段,但不宜作為日常寄存器讀寫的主表示法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95364.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從 “對話” 到 “共創”:生成式 AI 如何重塑內容創作全流程,普通人也能掌握的高效工具指南

一、引言&#xff1a;內容創作的 “AI 范式轉移”—— 從單向輸出到雙向共創?傳統內容創作痛點&#xff1a;靈感枯竭、流程繁瑣&#xff08;選題 - 調研 - 初稿 - 修改 - 定稿耗時久&#xff09;、專業門檻高&#xff08;如設計需掌握 PS、寫作需深厚文字功底&#xff09;?生…

函數、數組與 grep + 正則表達式的 Linux Shell 編程進階指南

文章目錄1.函數相關2.數組相關3.正則表達式與grep根據你提供的內容&#xff0c;我整理了一份關于Shell腳本中函數、數組和正則表達式的簡明參考&#xff1a; 1.函數相關 函數調用&#xff1a; 直接使用函數名調用&#xff1a;函數名 參數傳遞&#xff1a; 函數內接收參數&…

nginx-realip問題解決方案

nginx-realip問題解決方案一、配置真實ip解析二、日志中記錄真實 IP三、在日志中驗證一、配置真實ip解析 讓backend server知道前端是誰來訪問的&#xff0c;知道他們的ip地址 LB在轉發數據包的時候&#xff0c;在http請求報文里增加一個字段&#xff0c;攜帶user的ip地址&am…

Kafka入門指南:從安裝到集群部署

一、Kafka 基礎與系統要求 1.1 核心概念 Broker&#xff1a;Kafka 服務器節點&#xff0c;負責存儲消息和處理客戶端請求 Topic&#xff1a;消息分類的邏輯容器&#xff0c;每條消息需指定發送到某個 Topic Partition&#xff1a;Topic 的物理分片&#xff0c;可分布式存儲…

20250828在榮品RD-RK3588-MID開發板的Android13系統下適配Bainianxing的GPS模塊BU-16M10

20250828在榮品RD-RK3588-MID開發板的Android13系統下適配Bainianxing的GPS模塊BU-16M10 2025/8/29 9:50榮品RD-RK3588-MID開發板。適配GPS 38400bps 需要配置波特率嗎&#xff1f;一般是 9600這邊使用的泰斗 你要適配新的gps模塊&#xff1f;規格書&#xff1a;Baud rate 3840…

對部分國家(地區)出口商品類章金額數據庫

一、數據庫簡介【艾思產研數據平臺】對部分國家(地區)出口商品類章金額數據庫&#xff0c;收錄了2015年02月 - 2025年5月的信息&#xff0c;共計49萬余條數據&#xff0c;整理出7個常用字段內容。更新頻率為月更。字段內容年月、類章、國家、國家id、所屬分類、月出口商品類章金…

STM32——中斷

總&#xff1a;STM32——學習總綱 一、什么是中斷 1.1 作用與意義 1.2 STM32 GPIO 外部中斷簡圖 二、NVIC 2.1 NVIC 基本概念 Nested vectored interrupt controller&#xff0c;嵌套向量中斷控制器&#xff0c;屬于內核&#xff08;M3、M4、M7&#xff09; 用不到很多的優先…

DVWA靶場通關筆記-Weak Session IDs (Impossible級別)

目錄 一、Session ID 二、源碼分析 1、index.php 2、impossible.php 三、Weak Session IDs安全級別對比 四、impossible防范方法分析 1、高隨機性會話 ID 生成 2、嚴格的 Cookie 作用域限制 3、安全的傳輸與存儲控制期 本系列為通過《DVWA靶場通關筆記》的Weak Sessio…

SyncBack 備份同步軟件: 使用 FTPS、SFTP 和 HTTPS 安全加密傳輸文件

傳輸加密是使用安全連接在網絡中傳輸數據&#xff08;例如文件&#xff09;的過程。TLS&#xff08;傳輸層安全&#xff09;、SSL&#xff08;安全套接字層&#xff09;、SSH&#xff08;安全套接字外殼&#xff09;、HTTPS&#xff08;基于 SSL/TLS 的超文本傳輸協議&#xff…

保健品跨境電商:如何筑牢產品質量與安全防線?

保健品跨境電商&#xff1a;如何筑牢產品質量與安全防線&#xff1f;在保健品跨境電商領域&#xff0c;“質量與安全”是消費者信任的基石&#xff0c;也是品牌長期發展的生命線。從海外工廠生產到國內消費者手中&#xff0c;產品需經歷“跨國運輸、清關核驗、倉儲配送”多環節…

手把手教你搭建 UDP 多人聊天室(附完整源碼)

一、項目介紹 本文將分享一個基于 UDP 協議的簡易多人聊天室項目&#xff0c;包含服務器端和客戶端的完整實現。該聊天室支持多客戶端同時連接&#xff0c;能實現消息群發、用戶加入 / 退出通知等核心功能&#xff0c;適合作為網絡編程入門實踐案例。項目采用 C 語言開發…

Vue基礎知識-使用監視屬性watch和計算屬性computed實現列表過濾+排序

一、完整源碼<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src…

自動化運維-ansible中的管理機密

自動化運維-ansible中的管理機密 一、Ansible Vault 在自動化配置管理中&#xff0c;直接以純文本形式存儲密碼、API密鑰、證書等敏感信息是極大的安全漏洞。Ansible Vault 正是為了解決這一問題而設計的核心功能 Ansible Vault 是 Ansible 的一個核心功能&#xff0c;它允許用…

UFUNCTION C++ 的再次理解

一.UFUNCTION 格式和屬性也比較像&#xff0c;兩部分 函數說明符&#xff0c;和元數據說明符UFUNCTION不僅能 控制對藍圖公開&#xff0c;還能與 綁定委托&#xff0c;用戶輸入,網絡回調功能相關聯&#xff0c;而且還能創建自己控制帶命令二.函數說明符控制 &#xff0c;函數在…

《論文閱讀》從心到詞:通過綜合比喻語言和語義上下文信號產生同理心反應 2025 ACL findings

《論文閱讀》從心到詞:通過綜合比喻語言和語義上下文信號產生同理心反應 2025 ACL findings 前言 創新點 形象語言 (Figurative Language) 語義上下文信號(Semantic Context Signals) 模型架構 情緒原因標注 形象語言元數據獲取 共情回復生成 實驗結果 總結 趨勢 前言 親…

MySQL內置的各種單行函數

精選專欄鏈接 &#x1f517; MySQL技術筆記專欄Redis技術筆記專欄大模型搭建專欄Python學習筆記專欄深度學習算法專欄 歡迎訂閱&#xff0c;點贊&#xff0b;關注&#xff0c;每日精進1%&#xff0c;與百萬開發者共攀技術珠峰 更多內容持續更新中&#xff01;希望能給大家帶來…

Python OpenCV圖像處理與深度學習:Python OpenCV視頻處理入門

視頻處理基礎&#xff1a;掌握OpenCV視頻操作 學習目標 通過本課程&#xff0c;學員們將學習如何使用Python和OpenCV庫來處理視頻文件&#xff0c;包括讀取視頻、捕獲攝像頭視頻流、處理視頻幀以及保存處理后的視頻&#xff0c;同時&#xff0c;能夠獨立完成基本的視頻處理任務…

AI 賦能 Java 開發效率:全流程痛點解決與實踐案例(四)

文檔與注釋自動化&#xff1a;從 “手動撰寫” 到 “實時同步”&#xff0c;降低維護成本 &#x1f4c4; Java 開發強調 “文檔先行”&#xff0c;Javadoc 注釋、架構文檔、接口文檔是項目維護的重要資產。但手動撰寫文檔存在兩大痛點&#xff1a;一是耗時&#xff08;開發者平…

【機器學習學習筆記】pandas基礎

零基礎入門 Pandas&#xff1a;數據處理的 "萬能工具"如果你是剛接觸數據分析的小白&#xff0c;一定聽過 "Pandas" 這個名字。簡單說&#xff0c;Pandas 是 Python 中專門用來處理數據的工具庫&#xff0c;就像 Excel 的 "高級版"—— 能更快、…

(Mysql)MVCC、Redo Log 與 Undo Log

1. MVCC&#xff08;多版本并發控制&#xff09;概念 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一種數據庫并發控制機制&#xff0c;用于解決 讀寫沖突&#xff0c;提高數據庫并發性能。MySQL InnoDB 存儲引擎使用 MVCC 來實現 非阻塞讀&#xff08;即…