江协科技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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;即…