【STM32】C语言复习以及底层寄存器映射

ops/2024/10/20 17:46:56/

位操作

&运算

通过与一堆1111,来筛选想要的位并保留
通过与一堆0000,来将不想要的位置置0

110011011

111111000

|运算

通过或一堆1111,用来全置1
通过或一堆0000,来筛选想要的位

右移

2 >> 1:相当于2/2。

99 >> 1: 相当于 99/2 向下取整为49。

99 >> 2:相当于 99/pow(2,2)向下取整为24。

999 >> i:相当于999 / pow(2,i)。

整数 >> i:相当于将这个整数化为二进制整数,并去掉这个数的末尾的 i 位数字。

unsigned 无符号型,全是正数  001 >>1  为000

signed  带符号最高位为符号位

左移

2 << 1:相当于2*2。

99 << 1: 相当于 99*2 。

99 << 2:相当于 99*pow(2,2)。

999 << i:相当于999 * pow(2,i)。

整数 << i:相当于将这个整数化为二进制整数,并在这个数的末尾加上 i 个0。

~运算符

按位取反

十进制 1 的二进制表示为:

0000 0001

每位都取反为:

1111 1110

^异或运算 

相同为0,不同为1

define宏定义

ifdef条件编译

extern变量申明 

 

定义只允许一次,extern可以在其他文件多次

extern意思就是遇到此变量在其他模块去找定义

typedef类型别名

把类型定义成别名

Struct结构体

可以添加成员变量,增加扩展性

static申明的局部变量存储在静态存储区

不加static时,每次调用返回的flag都为1

加static,返回的flag会是1,2,3,4......

【每次调用会跳过static的定义,并且不会被局部释放】

MDK寄存器地址名称映射分析

51映射

sfr P0=0x80;//P0映射到地址0x80

P0=0x00//往寄存器地址0x80赋值0x00

 32映射

通过基地址偏移

外设基地址偏移得到APB2基地址,APB2偏移得到GPIOA基地址

地址强制转换为结构体指针类型,GPIOA作为结构体指针类型,指向这些地址*

结构体指针就是用来指向结构体类型变量的指针
强制转换是改变数据的类型
结构体指针强制转换就是将地址中的数据的结构体数据类型进行转换

 

//先定义4个结构体
typedef struct {int array[4];
}Struct_A;
typedef struct {int *ptr_b;
} Struct_B;
//不允许操作:
Struct_B b;
Struct_A a = (Struct_A)b;
//允许操作:
Struct_B *b;
Struct_A *a = (Struct_A *)b;


http://www.ppmy.cn/ops/127041.html

相关文章

JSONArray根据指定字段去重

JSONArray dataList new JSONArray();这儿省略dataList 加数据的过程 dataList new JSONArray(dataList.stream().distinct().collect(Collectors.toList())); Set<String> timestamps new HashSet<>();根据时间字段去重 dataList dataList.stream().map(obj -…

【日志】关于多益网申

2024.10.19 早先听闻多益的测试题非常抽象&#xff0c;凡是测过的人都说太抽象了&#xff0c;我还以为他考我各种算法或者编程语言呢。我今天也去做了一下&#xff0c;测试题里面大多都考些计算题&#xff0c;找规律题&#xff0c;判断推理题&#xff0c;还有一些图形转换&…

基于预测算法的航班离港延误系统

毕业设计不知道做什么&#xff1f;想找一个结合算法与应用的项目&#xff1f;那你绝对不能错过这个"基于预测算法的航班离港延误系统"&#xff01;✈️&#x1f4ca; 项目简介&#xff1a; 这个系统专注于航班离港的延误预测&#xff0c;通过强大的神经网络技术对大…

Linux 中文件的权限说明

目录 一&#xff1a;文件权限类型二&#xff1a;默认权限管理1. 查看当前用户的umask值2. 修改当前用户的umask值3. 根据umask计算默认权限 三&#xff1a;普通权限管理1. 三种普通权限说明1.1 对于非目录文件来说1.2 对于目录文件来说 2. 查看某个文件的权限信息2.1 使用 ls -…

算法Day-4

24. 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,…

搜维尔科技:使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据

使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据 搜维尔科技&#xff1a;使用Manus Primel Xsens数据手套直接在Xsens及其插件中捕获手指数据

证件照小程序源码,前后端稳定运行

演示&#xff1a;证寸照制作 运行环境: Linux Nginx PHP >5.6 MySQL>5.6 安装步骤: 1.下载源码上传至你的服务器宝塔面板 2.直接添加站点选择源码目录&#xff0c;新建数据库 3.设置代码执行目录为/web 4.在浏览器中输入你的域名&#xff0c;会提示安装&#xff0c;填写…

2024最新Navicat Pro 中文版本图文教程

Navicat Premium 是一款支持多数据库连接的开发工具&#xff0c;兼容 MySQL、Redis、PostgreSQL 等多种数据库&#xff0c;以及 Amazon RDS、Azure 等云服务。 它提供了数据库的构建、管理和维护功能。用户可以在一个应用内查看、更新记录&#xff0c;通过数据分析工具进行可视…