结构体bit位定义

结构体bit位定义

KEIL工程中对bit位定义

示例

// reg
typedef struct {
u_int32 aaa :8; // bit[ 0~7]
u_int32 bbb :6;
u_int32 ccc :4;
u_int32 ddd :8;
u_int32 eee :3;
u_int32 fff :3; //bit[29~31]
} M_REG;
上述定义了一个32bit的寄存器结构体,并对每一bit进行了声明,从上到下从bit[0]~bit[31]:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32调试报告 1、头文件 初始化相应的函数,同时最好将相应的引脚进行宏定义,方便后面写主函数时方面。 2、 c函数 c函数要将相应的头文件包括进去,同时初始化相应头文件里面的自己定义的函数。对相应的函数进行编写,包括引入结构体,时钟初始化,选择相应的引脚、引脚输入输出模式、如果是输出需要设置输出速度。 3、 main函数 4、 GPIO端口七个寄存器 两个32配置寄存器GPIO_CRL AND GPIO_CRH. TWO 32bit dateregister GPIO_IDR AND DPIO_ODR 一个32/复寄存器GPIO_BSRR 一个16寄存器GPIO_BRR 一个32锁存寄存器GPIO_LCKR GPIO_CRL寄存器的复值为 0X4444 4444,从图 6.1.4 可以看到,复值其实就是配置端口为浮空 输入模式。从上图还可以得出:STM32 的 CRL 控制着每组 IO 端口(A~G)的低 8 的模式。 每个 IO 端口的占用 CRL 的 4 个,高两为 CNF,低两为 MODE。这里我们可以记住几 个常用的配置,比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用, 50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二 功能,50M 速率)。 在固件库中操作 IDR 寄存器读取 IO 端口数据是通过 GPIO_ReadInputDataBit 函数实现的: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 比如我要读 GPIOA.5 的电平状态,那么方法是: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5); 返回值是 1(Bit_SET)或者 0(Bit_RESET); 在固件库中设置 ODR 寄存器的值来控制 IO 口的输出状态是通过函数 GPIO_Write 来实现 的: void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); GPIO_WriteBit(GPIOR,GPIO_Pin_0,(BitAction)(1));//LED控制 操作使用ODR AND IDP寄存器 在使用寄存器BSRR 和寄存器BRR时,使用规则总结如下: 1、置GPIOD->BSRR低16的某为’1’,则对应的I/O端口置’1’;而置GPIOD->BSRR低16的某为’0’,则对应的I/O端口不变。 2、置GPIOD->BSRR高16的某为’1’,则对应的I/O端口置’0’;而置GPIOD->BSRR高16的某为’0’,则对应的I/O端口不变。 3、置GPIOD->BRR低16的某为’1’,则对应的I/O端口置’0’;而置GPIOD->BRR低16的某为’0’,则对应的I/O端口不变。 使用场合举例如下: 1)要设置D0、D5、D10、D11为高,而保持其它I/O口不变,只需一行语句: GPIOD->BSRR = 0x0C21;// 使用规则1 2)要设置D1、D3、D14、D15为低,而保持其它I/O口不变,只需一行语句: GPIOD->BRR = 0xC00A;// 使用规则三 3)要同时设置D0、D5、D10、D11为高,设置D1、D3、D14、D15为低,而保持其它I/O口不变,也只需一行语句: GPIOD->BSRR = 0xC00A0C21;// 使用规则一和规则二 实例3 假设需要对 GPIOA_Pin_6 输出高电平。采用改写 ODR 寄存器的方式时,使用“读-改-写”操作,代码如下: uint32_t temp; temp = GPIOA->ODR; temp = temp | GPIO_Pin_4; GPIOA->ODR = temp; 而使用改写 BSRR 寄存器时,仅需要使用如下语句: GPIOA->BSRR = GPIO_Pin_6; 在修改 ODR 时,为了确保对端口 6 的修改不会影响到其他端口的输出,需要对端口的原始数据进行保存,之后再对端口 6 的值进行修改,最后再写入寄存器(即读-改-写形式改变的状态)。而对 BSRR 的操作,是写 1 有效,写 0 不改变原状态,因此可以对端口 6 置 1,其他保持为 0。BSRR 为 1 的,会修改相应的 ODR ,从而控制输出电平。 因此,在设置单个 IO 口输出时,使用 BSRR 进行操作会更加方便。 在固件库中操作 IDR 寄存器
第1章 单片机基础 1.1 单片机技术发展状况 1.2 51系列单片机体系结构 1.2.1 内部结构 1.2.2 存储器组织结构 l.2.3 内部功能模块 l.2.4 外部引脚 1.2.5 系统资源扩展 1.3 单片机的编程方法 第2章 C语言编程基础 2.1 基本概念 2.1.1 概述 2.1.2 变量与算术表达式 2.1.3 for语句 2.1.4 符号常量 2.2 数据类型、运算符和表达式 2.2.1 C语言的数据类型 2.2.2 常量与变量 2.2.3 整型数据 2.2.4 实型数据 2.2.5 字符型数据 2.2.6 运算符 2.2.7 表达式 2.3 程序控制语句 2.3.1 程序的3种基本结构 2.3.2 条件控制语句 2.3.3 程序应用举例 2.4 循环控制语句 2.4.1 while语句 2.4.2 dowhile语句 2.4.3 for语句 2.4.4 break与continue语句 2.4.5 程序应用举例 2.5 小结 第3章 C语言高级编程 3.1 函数与程序结构 3.1.1 函数的基本知识 3.1.2 返回非整数值的函数 3.1.3 外部变量 3.1.4 作用域规则 3.1.5 头文件 3.1.6 静态变量 3.1.7 寄存器变量 3.1.8 分程序结构 3.1.9 初始化 3.1.10 递归 3.2 数组 3.2.1 一维数组 3.2.2 维数组 3.2.3 多维数组 3.2.4 数组的初始化 3.3 指针 3.3.1 指针与指针变量. 3.3.2 指针变量的定义与引用 3.3.3 指针运算符与指针表达式 3.3.4 指针与数组 3.3.5 指针的地址分配 3.3.6 指针数组 3.3.7 指向指针的指针 3.4 占构体与共用体 3.4.1 结构体类型变量的定义和引用 3.4.2 结构体数组的定义和引用 3.4.3 结构体指针的定义和引用 3.4.4 共用体 3.5 小结 第4章C51程序设计 4.1 C51对标准C语言的扩展 4.1.1 存储区域 4.1.2 数据变量分类 4.1.3 存储器模式 4.1.4 绝对地址的访问 4.1.5 指针 4.1.6 函数 4.2 C5 1函数库 4.2.1 字符函数CTYPE.H 4.2.2 一般I/O函数STDIO.H 4.2.3 字符串函数STRING.H 4.2.4 标准函数STDLIB.H 4.2.5 数学函数MATH.H 4.2.6 绝对地址访问ABSACC.H 4.2.7 内部函数INTRINS.H 4.2.8 变量参数表STDARG.H 4.2.9 全程跳转SETJMPH 4.2.10 访问SFR和SFR bit地址REGxxx.H 4.3 C51程序编写 4.3.1 C程序基本结构 4.3.2 编写高效的C51程序及优化程序 第5章 Windows集成开发环境μVision2 5.1 μVision2编辑界面及其功能介绍 5.1.1 μVision2界面综述 5.1.2 主菜单栏 5.1.3 μVision2功能按钮 5.1.4 μVision2窗口环境 5.2 应用μVision2开发流程介绍 5.2.1 建立新项目 5.2.2 常用环境配置 5.2.3 代码优化 5.2.4 目标代码调试 5.3 CPU仿真 5.3.1 μVision2调试器 5.3.2 调试命令 5.3.3 存储器空间 5.3.4 表述(Expressions) 5.3.5 技巧 5.4 深入了解μVision2 5.4.1 μVision2的项目管理 5.4.2 使用技巧 5.4.3 μVision2调试函数 第6章 C5l编译器 6.1 预处理 6.1.1 宏定义 6.1.2 文件包含 6.1.3 条件编译 6.1.4 其他预处理命令 6.2 C51编译器控制指令详解 6.2.1 源控制指令 6.2.2 列表控制指令 6.2.3 目标控制指令 6.3 C5l的高级配置文件 6.3.1 目标程序启动配置文件——STARTUP.A51. 6.3.2 CPU初始化文件——START751.A51 6.3.3 静态变量初始化文件——INT.A51 6.3.4 专用变量初始化文件——INIT751.A51 第7章 C51的典型资源编程 7.1 中断系统设计 7.2 定时/计数器的使用 7.3 I/O口的使用 7.4 扩展存储器 7.4.1 外部ROM 7.4.2 外部RAM 7.4.3 外部串行E2PROM 7.5

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值