从CW32定时器库看联合体嵌套

原创 云深之无迹 2025-01-30 16:40

一定要把这个库函数吃透,才能灵活掌握ARM单片机!

从CW32L010看HAL库封装方式  我之前写过一个,但是今天看的时候发现还有我不懂的,再总结一下。

从最近看的BTIM开起~

然后映射

BTIM_TypeDef 结构体对应于 MCU 基本定时器(Base Timer,BTIM) 的 寄存器映射,起始地址为 0x40004800,总大小为 48 字节(0x30)。

注意这里是现

这是一段

对比数据手册是倒着封装的

就是功能位

结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。
而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。
联合体的所有成员在内存中具有相同的首地址,共占同一段内存空间,这些成员可以相互覆盖,因此联合体也常常被称作共用体,在不同的时间保存不同的数据类型和不同长度的成员的值。也就是说,在某一时刻,只有最新存储的成员是有效的。运用此种类型数据的优点是节省存储空间。

这个库的设计是结构体里面有个共用体,共用体里面有结构体。

CR1_f

这里的 CR1_f 结构体用于 位域(Bit-Field) 方式操作寄存器的特定位。

C 语言的位域(bit-field)是一种特殊的结构体成员,允许我们按位对成员进行定义,指定其占用的位数。

这三个是空

14,13,12,三位

寄存器通常是 32 位的,但每个位有不同的作用,如果使用普通结构体变量,需要用位运算(|, &)来设置特定位,非常麻烦。
位域(Bit-Field)允许我们直接操作特定位,而不需要手动位运算,大幅提高可读性。

继续看这个联合体里面有结构体

联合体(union)的所有成员共享相同的内存地址,它的大小等于最大成员的大小。

这个是完整的


在这个 union 里:CR1 是一个 完整的 32 位寄存器,可以一次性访问整个寄存器的值。

这个是位域结构体


CR1_f 是 位域(Bit-Field)结构体,可以访问寄存器的特定位。
所以我们
  1. 用 CR1 读取整个 32 位寄存器
  2. 用 CR1_f 直接操作寄存器的具体位

就是这个样子

  1. regValue 用于整体访问寄存器
  2. regBits 用于操作寄存器的单个位
  3. 无论修改 regValue 还是 regBits,它们都指向同一块内存,所以修改一个变量,另一个变量也会同步变化。

我们使用的时候可以这样,深入进去可以改位

  1. 如果 CR1 直接赋值 0x01,它会覆盖整个寄存器的所有位。
  2. 如果 CR1_f.EN = 1,它 只会修改 EN 位,而不会影响其他位。


所以这个东西就是这样的

  1. typedef 定义新类型名,简化数据结构的使用。也就是把BTIM1给定义了一次
  2. struct 定义数据结构,组织多个变量。
  3. union 使不同访问方式共享同一块内存,提高寄存器操作的灵活性。

对比一下

名字叫BTIM

首先定义一个TIM的初始化结构体

这个就是里面要操作的东西

然后就可以通过结构体的方法来把要设置的值写进去

然后我们对定时器初始化,传一个外设的结构体和对应的设置结构体。

一开始函数里面判断这个参数对不对

后面这个IS开头的就是这个功能

参数ok的话,开始更改。

后面的是我们的设置结构体,给到了前面外设结构体的位域里面。

里面还有修改寄存器的位

#define REGBITS_MODIFY(REG, MASK, VALUE) ((REG) = ((REG) & ~(MASK)) | (VALUE))

先清除再写入

先是寄存器,然后是要修改的位置,然后是新值。

我们再看一个使能定时器的

NewState ? A : B 是 C 语言的三元运算符(三目运算符)

就是这样的

展开后的样子

再看看这个

BTIMx->CR1 是 BTIM 控制寄存器 1,其 EN 位(Bit 0)用于控制定时器的启动与停止。

这就是第一个寄存器组


BTIMx_CR1_EN_Msk 是一个掩码(mask),表示 EN 位

在这里

|= 按位或(OR)运算:将 CR1 的 Bit 0 位置 1(启用定时器)。

评论 (0)
  • 过去一年,厨电行业的AI竞赛进入“大模型时代”,各大品牌纷纷亮出了自己的杀手锏。老板电器的“食神大模型”、方太的“Healthy CookingGPT”轮番登场,两者都立志要用AI“重新定义厨房”。新的一年,大模型技术的不断成熟与迭代,AI将不再仅仅是概念上的炒作,而是真正融入到每一个厨房场景中。这场在厨电领域内悄然进行的“科技革命”无疑将步入一个更为深入且广泛的实践应用阶段,AI厨电狂欢开始了。AI厨电“燃”起来了众所周知,厨电行业的发展与房地产市场密切相关。随着房地产市场的调整,新房装修需求
    刘旷 2025-02-19 10:51 62浏览
  • 故障现象 一辆2013款奔驰S300L车,搭载272 946发动机,累计行驶里程约为15万km。车主反映,将挡位置于D挡,稍微释放一点制动踏板,车辆蠕动时车身明显抖动,类似气缸失火时的抖动,又类似手动变速器,离合器片不平,起步半离合时的那种抖动;完全释放制动踏板后,抖动现象消失,且车辆行驶无明显异常。为此更换过火花塞、点火线圈,清洗过燃油管路,故障依旧;接着又大修了自动变速器,并更换了液力变矩器,但故障依然存在,于是将车开至我厂进行检修。 故障诊断 接车后试车,确认故障现象与车主所述一
    虹科Pico汽车示波器 2025-02-19 14:14 72浏览
  • 概述        在上一篇文章中,我们了解了TC10规范的内容,并掌握了基于以太网链路的物理层休眠唤醒机制。为了确保不同厂商的设备在以太网休眠唤醒功能上的互操作性,OPEN Alliance制定了详细的测试规范。测试规范        针对以太网休眠唤醒机制的测试,包含在各个以太网速率下的IOP测试规范中,具体如下:《10BASE-T1S Interoperability Test Suite》《100BASE-T
    经纬恒润 2025-02-19 13:20 71浏览
  •         电磁铁作为一种能够利用电流产生磁性的装置,在现代社会的生产和生活中发挥着越来越重要的作用。其应用范围广泛,不仅局限于工业制造领域,还深入到交通运输、医疗健康以及我们的日常生活之中。一、电磁铁在工业制造中的应用       在工业制造领域,电磁铁的应用可谓是举足轻重。它们被广泛应用于各种机械设备和生产线中,起着自动化控制、物料搬运等关键作用。例如,在重型机械中,电磁铁用于吸附和移动大型金属构件
    锦正茂科技 2025-02-18 10:05 87浏览
  • 随着国内市场的逐渐稳固,华为将目光投向了广阔的海外市场,开启了一段充满挑战与机遇的国际化征程。然而,华为在拓展海外市场时,遭遇了重重困难。文化差异带来的挑战不同国家和地区有着不同的文化背景、商业习惯和价值观,这使得华为在与当地客户、合作伙伴沟通和合作时面临诸多障碍。在欧洲,一些客户对产品的认证标准和售后服务有着非常严格的要求,并且注重商务活动中的礼仪和沟通方式。在机上欧洲通信市场竞争激烈,爱立信、诺基亚等本土企业在技术、品牌和市场份额上具有优势。而且欧洲各国的通信标准和监管政策不同,华为需要满足
    韭菜财经 2025-02-18 14:11 180浏览
  • 电磁铁通电时会产生磁场,磁力随电流增强而增强,表现出吸引铁磁性物质的特性。电磁铁是一种能够产生磁场的装置,其特性在于可以通过通电来控制磁场的产生和消失。那么,当电磁铁通电时,它具体会表现出哪些特性和现象呢?一、产生磁场通电是电磁铁产生磁场的关键。当电流通过电磁铁的线圈时,线圈周围就会产生磁场。这个磁场与电流的大小和方向密切相关,电流越大,产生的磁场也越强。同时,磁场的方向可以通过改变电流的方向来改变,这是电磁铁灵活性的重要体现。二、磁力变化随着电流的增强,电磁铁产生的磁力也会相应增强。这种磁力的
    锦正茂科技 2025-02-15 09:59 154浏览
  • 故障现象 一辆2010款路虎揽胜车,搭载5.0 L发动机,累计行驶里程约为16万km。车主反映,接通空调开关后,有时出风忽大忽小,有时不出风,有时要等2 min左右才出风;有时两三天出现一次,有时好几天才出现一次,故障没有规律。 故障诊断接车后试车,故障现象并未出现。使用故障检测仪检测,在空调控制单元(HVAC)中存储有故障代码“U1000-00 固态驾驶员保护微活-驾驶员已禁用”。查看该故障代码相关说明,可能的原因为中央接线盒输出电路对搭铁或电源短路,这与空调出风故障没有关联。如图1
    虹科Pico汽车示波器 2025-02-19 13:49 55浏览
  • 《哪吒2》票房破百亿背后的科技密码:解码中国动画产业的技术跃迁与制造底气2024年夏季,国产动画电影《哪吒2》以雷霆之势席卷全球院线,不仅成为中国影史第二部票房突破百亿的现象级作品,更以多项技术突破刷新行业纪录。这些成就背后,不仅是中国动画工业的崛起,更是中国科技创新与高端制造业协同突破的缩影。作为深耕PCB行业多年的捷多邦小编,今天带您从技术视角,解读这场银幕奇迹背后的制造密码。一、从“数字造神”到“算力革命”:动画技术背后的硬核突破《哪吒2》的视觉革命始于AI工业化管道的深度应用。影片中大量
    捷多邦 2025-02-15 17:57 502浏览
  •                           春天来了,我们中国的传统节日--春节到了,随着国家富强,人们民族文化自信心的增强,这个中国年过的还挺热闹,挺红火。一段山村过新年的快乐时光,即兴而发赋了两首新诗。《渔家乐·山村新春》白发垂髫同喜乐,新春佳节意情奢。烟花璀璨腾空起,山村美景醉心涯。晓雾轻笼林野静,晚云淡抹岫峰斜。自然恩赐千般好,福满人间岁月嘉
    广州铁金刚 2025-02-17 15:59 128浏览
  • 导读:2025年1月6日,在 ChatGPT 诞生两周年之际,OpenAI 的核心人物 Sam Altman 回顾了一段波澜壮阔且充满挑战的历程。九年前,怀揣着对通用人工智能(AGI)的坚定信念,OpenAI 踏上征程。彼时,质疑声不绝于耳,多数人认为这毫无成功的可能。但他们未曾动摇,毅然投身这一充满未知的领域。直至 2022 年 ChatGPT 的推出,如同在科技领域投入巨石,引发轩然大波,开启了前所未有的发展态势。然而,荣耀背后是难以想象的艰难。围绕新技术构建公司,犹如在黑暗中摸索前行,每一
    用户1739588245528 2025-02-15 11:03 173浏览
  • 清晨,闹钟准时响起,窗帘自动拉开,床灯随之亮起,音箱中则自动传出每日的早间新闻,从而唤醒熟睡中的你,而这只是智能家居中的冰山一角。作为人类群体追求更高生活品质的居住空间,智能家居正飞速普及至我们的日常生活之中,极大地提升了生活的便利性与舒适度。然而,随着单品智能向全屋智能的快速发展,不同智能家居设备的工作电压与通信频率等运行参数存在差异,它们共同运行在一个智能家居系统之中,其所产生的电气噪声与电磁干扰会互相影响,并形成潜在的安全隐患。例如,电气噪声可能导致线路过热,增加电气火灾的发生风险;电磁干
    华普微HOPERF 2025-02-18 10:48 78浏览
  • 概述        TC10 为OPEN Alliance 中的一个技术委员会小组,专注于研究基于车载以太网的休眠唤醒机制,旨在为汽车应用场景提供灵活的休眠唤醒解决方案。该小组提出的休眠唤醒规范(《TC10 Sleep/Wake-up Specification》,以下简称TC10规范)作为对IEEE 802.3系列规范的补充,详细定义了以太网PHY的休眠唤醒过程、新增服务原语和接口、时间参数、指令描述等内容。目前,TC10已经发布了适配10Ba
    经纬恒润 2025-02-18 14:30 109浏览
  • 嘿,大家好!在高压电子世界里摸爬滚打的朋友们,你们有没有遇到过这样的难题?那就是,如何选择适合高压环境的光颉精密电阻? 这可不是一个简单的问题,毕竟在高压环境下,电阻不仅要顶得住电压的“压力”,还得保证精度和稳定性,这要求可真不低。想想看,如果选错了电阻,就像给跑车装了个自行车轮,那能行吗?肯定不行!轻则电路性能大打折扣,重则电阻直接“罢工”,甚至引发更严重的后果。所以说,在高压应用中,选择一款靠谱的光颉精密电阻,那可是至关重要的。别担心,今天咱们就来好好聊聊,如何选择适合高压环境的光
    贞光科技 2025-02-18 17:28 105浏览
  •  电磁铁的磁芯材质:软铁还是硬铁电磁铁的磁芯通常采用软铁材质,因其具有高磁导率和低矫顽力,使得电磁铁能够在通电时迅速产生强磁场,断电后磁场又能迅速消失。一、电磁铁与磁芯材质电磁铁是一种利用电流产生磁场的装置。其核心部件——磁芯,对电磁铁的性能有着至关重要的影响。在选择磁芯材质时,需要考虑多种因素,如磁导率、矫顽力、饱和磁化强度等。这些因素直接关系到电磁铁的工作效率、响应速度和能耗等方面。二、软铁与硬铁的特性软铁和硬铁是两种常见的磁性材料。软铁具有高磁导率和低矫顽力的特点,这意味着它容易
    锦正茂科技 2025-02-18 10:32 53浏览
  • 2025,新一轮汽车行业“战争”开始,但这一次不是过往的“价格战”,而是新一轮的“智驾战”。近期,比亚迪董事长兼总裁王传福在比亚迪智能化战略发布会上表示:“比亚迪将全系搭载“天神之眼”高阶智驾系统,其中首批21款车型将陆续上市,包括秦家族、元家族、宋家族、海豹家族等。”具体来看,20万元以上、15万元至20万元、10万元至15万元级别的车型将全系标配“天神之眼”。10万元以下的车型多数将搭载“天神之眼”,包括海鸥、海豹05DM-i和第二代秦PLUS DM-i。智驾不是什么新鲜技术,但是在比亚迪之
    刘旷 2025-02-18 10:19 86浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦