
[{"content":"","date":"Jul 23 11:16 +0800 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"博主虽然现在年纪不大，但是学编程却学的很早。早在17、18年就稍微学了C语言和Python。那个时候还得从csdn这坨粪坑里面找内容。可以说，博主学编程的时候完全没有ai帮助，也就养成了现在这种找原始官方文档的习惯，难道是原教旨主义？🤔\n23年开始，ai辅助编程开始走向了人们眼中。25年直接出现了vibe coding这一专门用来指代ai编程的概念。所有人都可以靠几句自然语言进行程序开发。程序的出色与否不再取决于个人编程能力，而是提示词和模型能力。于是，我学的这些编程技巧变得毫无意义。我现在感觉就像孔乙己，他知道茴字的四种写法，我也知道排序算法的四种写法，但是有什么用呢？都成了脱不下来的长衫。\n我开始思考学习编程的意义。更进一步来说，是学习的意义。我们花了大把时间精力去学一个知识，或是一个技能。但是同期的ai总会学的比你更快更出色，你还没熟练你的技能，人家已经可以从0到1完成一个项目了，作为人类与ai赛跑简直是天方夜谭。于是乎，ai自然而然地就会把我替代。就好比ai大逃杀一样，毒圈里是ai没法胜任的任务，圈外是可以胜任的，每次发布一个新模型，圈就缩小一点，在外边的就慢慢被毒死好了。这种成本与收益的不对等是一种不公平，但是我们对于这种不公却无能为力，圈里面就这么点地，想跑毒也跑不了。于是虚无主义就从中产生了。\n我不想讨论虚无主义之类的社会学内容，但是这种情况的出现，与目前ai发展的畸形密切相关。\n正常手搓一个项目，我们需要确认很多的技术细节。可能选CRLF都能想个半天。但是现在ai却更倾向于一句话搞定。能用越少的提示词完成目标得的ai越牛逼。这就导致了技术细节全都是ai的自以为是，我们只能规定前期能预见的技术细节。但是你只要开发过项目就知道，途中会冒出来一堆没法预见的的新问题。这个时候就会出现一个「你不知道ai帮你决定了」的危险区。虽然现在ai的决定也不会出现什么大问题，但这些也只是局部最优解，全局视角下不一定最优，更何况未来新加的功能呢？这些隐形的技术债，迟早要还的。难道还要相信后人的智慧吗？\n我想象中的ai，或者是说是Agent，应该不断的问我问题，要把我当成皇帝，所有决定都应由我来下发。其实就是让我本人确定技术细节，而不是自已为是。这样我认为才是健全。\n说了这么多有的没的的，那么我还得回归标题：古法编程会不会变成新时代拼豆？\n其实这个标题就是引流用的，真的会把古法编程当作娱乐项目吗？我觉得大部分人应该都没这个想法。🤔\n","date":"Jul 23 11:16 +0800 2026","externalUrl":null,"permalink":"/articles/%E5%8F%A4%E6%B3%95%E7%BC%96%E7%A8%8B%E6%88%96%E5%B0%86%E5%8F%98%E6%88%90%E6%96%B0%E6%97%B6%E4%BB%A3%E6%8B%BC%E8%B1%86/","section":"文章","summary":"你说，用ai编程和用流水线拼豆是不是一个意思？","title":"古法编程或将变成新时代拼豆？","type":"articles"},{"content":"","date":"Jul 23 11:16 +0800 2026","externalUrl":null,"permalink":"/tags/%E7%A2%8E%E7%A2%8E%E5%BF%B5/","section":"Tags","summary":"","title":"碎碎念","type":"tags"},{"content":"摇月对魔法世界的感悟\n","date":"Jul 23 11:16 +0800 2026","externalUrl":null,"permalink":"/articles/","section":"文章","summary":"","title":"文章","type":"articles"},{"content":"","date":"Jul 23 11:16 +0800 2026","externalUrl":null,"permalink":"/","section":"摇月的魔法工坊","summary":"","title":"摇月的魔法工坊","type":"page"},{"content":" 前情提要 # 出师不利，于是苦呀西 Apr 12 15:00 \u0026#43;0800 2026\u0026middot;580 字\u0026middot;2 分钟 踩坑 教程 碎碎念 一招误判，满盘皆输了吗？ # 我不到啊？反正我水进国赛了。感谢组委会给我第二次机会。 🥰\n","date":"Apr 27 11:30 +0800 2026","externalUrl":null,"permalink":"/articles/%E5%87%BA%E5%B8%88%E4%B8%8D%E5%88%A9%E4%BA%8E%E6%98%AF%E8%8B%A6%E5%91%80%E8%A5%BF---%E7%AC%AC%E4%BA%8C%E7%AB%A0/","section":"文章","summary":"怎么进国赛了？","title":"🤔","type":"articles"},{"content":"","date":"Apr 12 15:00 +0800 2026","externalUrl":null,"permalink":"/tags/%E8%B8%A9%E5%9D%91/","section":"Tags","summary":"","title":"踩坑","type":"tags"},{"content":" 省流 # 常见的状态机和调用外设的代码一定要烂熟于心，考场上没时间现推。\n前情提要 # 博主很早就开始学51单片机了，于是在上大学的第一周就找到导师，报竞赛了。\n但是博主稍微看了一眼往届题，感觉非常简单，于是非常自大的将其抛之脑后了，直到考前一周才开始练手。说是练手，也没怎么练，谁叫比赛和竞逐时间重了呢？。于是乎，博主怀着颗自大的心，毅然的奔赴了考场。\n一招误判，满盘皆输 # 博主进考场后，先推导了一遍管码，配置一下573锁存器的控制函数。拿到题目后，傻眼了。\n这次17届考了一个工业压力传感器，具体题目网上应该有。其中有实时时钟和串口通信的运用。而我却完全忘了实时时钟和串口通信的代码应该怎么写，甚至BCD码具体是怎么样的我都忘了，而且矩阵键盘的状态机也不熟，导致前三个小时基本就是只写了一个矩阵键盘的输入逻辑。时间分配完全混乱了。\n不过还好还记得EEPROM和ADC的使用，写了个半成品，交上去了。交卷临走前百般无聊，翻了翻资源包，原来我前面辛辛苦苦推导的段码是大赛已经提供的啊。😅😅\n能长一智吗？ # 回宿舍的路上，东吴桥头，望着被风雨吹落大半的樱花，突然理解了黄部长喊出苦呀西的心境，突然顿悟了。其实定时器中断完全可以当作主循环，这样的话主循环的运行周期就会非常可控，像是3s长按、0.2s闪烁就非常易于计数计时，节省大量生命。\n虽然很不甘心。明年这个时候，我会不会凯旋而归呢？\n","date":"Apr 12 15:00 +0800 2026","externalUrl":null,"permalink":"/articles/%E5%87%BA%E5%B8%88%E4%B8%8D%E5%88%A9%E4%BA%8E%E6%98%AF%E8%8B%A6%E5%91%80%E8%A5%BF/","section":"文章","summary":"博主今天刚考完蓝桥杯单片机竞赛，发挥极差。于是写篇博客，让未来的自己可以吸取教训，争取早日进国赛。","title":"出师不利，于是苦呀西","type":"articles"},{"content":"","date":"Apr 12 15:00 +0800 2026","externalUrl":null,"permalink":"/tags/%E6%95%99%E7%A8%8B/","section":"Tags","summary":"","title":"教程","type":"tags"},{"content":"","date":"Mar 13 09:20 +0800 2026","externalUrl":null,"permalink":"/tags/ai/","section":"Tags","summary":"","title":"AI","type":"tags"},{"content":"","date":"Mar 13 09:20 +0800 2026","externalUrl":null,"permalink":"/series/openclaw%E5%A4%A7%E8%A1%8C%E5%85%B6%E9%81%93%E6%88%91%E6%9D%A5%E5%94%B1%E5%94%B1%E5%8F%8D%E8%B0%83/","section":"Series","summary":"","title":"OpenClaw大行其道，我来唱唱反调","type":"series"},{"content":" 真的笑死我了，工信部和苏大都发文说要警惕 OpenClaw 了。\n工信部竟然还免费教我们怎么卸载，他真的，我哭死。 图片来源 图片来源（需要苏大校园网） 我是对的！🤪🤪\n","date":"Mar 13 09:20 +0800 2026","externalUrl":null,"permalink":"/articles/openclaw%E5%A4%A7%E8%A1%8C%E5%85%B6%E9%81%93%E6%88%91%E6%9D%A5%E5%94%B1%E5%94%B1%E5%8F%8D%E8%B0%83---%E7%AC%AC%E4%BA%8C%E7%AB%A0/","section":"文章","summary":"还有第二关？","title":"OpenClaw大行其道，我来唱唱反调 - 第二章","type":"articles"},{"content":"","date":"Mar 13 09:20 +0800 2026","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":" 前情提要 # 什么是 OpenClaw?\n简单来说，就是一个 AI Agent 框架，让只会耍嘴皮子的llm拥有了眼睛和双手，可以干活了。\n这是它目前的仓库。截至目前，收获了272k个star。 openclaw/openclaw The AI that really does things. Any OS. Any Platform. The lobster way. 🦞 TypeScript 389636 81899 原本这没什么，就是一个普通的AI工具而已。但是昨天中午，腾讯下场了。 图片来源 一堆人在排队，让别人帮忙装软件，装的还是开源软件。\n也就是说，让一群连软件安装、环境配置都要线下帮扶的人，去接触最前沿的AI工具？甚至是还没有怎么沉淀的新兴工具？有点恐怖。\n猴子开车 # 首先我先叠个甲，我没有唱衰AI的意思，AI Agent 是大势所趋，是可以实实在在提升生产力的重要工具。 但是如此迅速的发展肯定会造成问题，我暂且把它叫做「猴子开车」：\n设想一下，你在开车，这条路上的司机可能和你一样会开车，也可只会用自动驾驶，但还可能是只猴子，用着别人设置的自动驾驶，你是什么感受？如果是我，我肯定抓紧逃了，指不定某个猴子开着大运横冲直撞。\n现在 OpenClaw 就是处于这个境地。人们知道它好用，知道是大势所趋，于是一股脑的全去用了，也不用管它到底是怎么实现的，能力范围在哪，会不会造成什么灾难性后果。反正就是大家都在用，不用就是落伍。\n说到底，就是 OpenClaw 的流行与对应的安全措施的不匹配。\n这是 Meta Superintelligence 的安全与对齐负责人，OpenClaw删掉了她的邮箱。 图片来源 猴子开车，如果车能安全到达目的地、完成任务，没人会说三道四。但是一旦出现事故，就难以定责。猴子只是想提高生产力，车子只是提供了更好的工具，没有人做错什么。\n我认为，责任应该是那个让猴子去开车的人，猴子开车这件事就不应该出现。不付出学习成本，就直接用上最先进的技术。异想天开。\n我猜，马上就要有各种因 OpenClaw 而导致事故的帖子出现了。让我们拭目以待。\n那你问我 # 我会在自己电脑上装OpenClaw吗？不会。\n但是微软迟早会喂自己产的大粪过来的\n最后 # 我相信能读到这篇文章的应该都是用AI的老鸟，我只是随便说说，不要喷我。\n","date":"Mar 7 14:39 +0800 2026","externalUrl":null,"permalink":"/articles/openclaw%E5%A4%A7%E8%A1%8C%E5%85%B6%E9%81%93%E6%88%91%E6%9D%A5%E5%94%B1%E5%94%B1%E5%8F%8D%E8%B0%83/","section":"文章","summary":"现在 OpenClaw 的环境就是猴子开车","title":"OpenClaw大行其道，我来唱唱反调","type":"articles"},{"content":"博主最近对CH32V003很感兴趣。奈何官方没有提供详细的软件文档，只提供了例程。\n于是在大语言模型的帮助下，博主自己生成了一些文档，上传博客，方便自己快速查阅。\n当然，不是我自己也能用。毕竟是模型生成的，记得批判使用。\n","date":"Mar 4 19:27 +0800 2026","externalUrl":null,"permalink":"/ch32v003_doc/","section":"CH32V00x的软件文档","summary":"","title":"CH32V00x的软件文档","type":"ch32v003_doc"},{"content":"","date":"Mar 4 19:27 +0800 2026","externalUrl":null,"permalink":"/series/ch32v00x%E8%BD%AF%E4%BB%B6%E6%96%87%E6%A1%A3/","section":"Series","summary":"","title":"Ch32v00x软件文档","type":"series"},{"content":"博主目前还没什么心得😰\n","date":"Mar 4 19:27 +0800 2026","externalUrl":null,"permalink":"/ch32v003_doc/0.%E5%8D%9A%E4%B8%BB%E5%BF%83%E5%BE%97/","section":"CH32V00x的软件文档","summary":"记载了博主在开发时候的一些心得和经验","title":"博主心得","type":"ch32v003_doc"},{"content":"","date":"Mar 4 19:27 +0800 2026","externalUrl":null,"permalink":"/tags/%E6%96%87%E6%A1%A3/","section":"Tags","summary":"","title":"文档","type":"tags"},{"content":"","date":"Feb 21 12:15 +0800 2026","externalUrl":null,"permalink":"/tags/3d%E6%89%93%E5%8D%B0/","section":"Tags","summary":"","title":"3D打印","type":"tags"},{"content":" 前情提要 # 博主在不久之前弄坏过一个光面PEI板。在文章末尾提了一嘴这个FR-4材质的打印板，于是自己尝试做了一个。\n3D打印踩坑——光面PEI板一定要涂胶 Jan 12 20:07 \u0026#43;0800 2026\u0026middot;896 字\u0026middot;2 分钟 3D打印 踩坑 打印板 省流 # FR4板确实是光面PEI的平替。如果考虑价格，甚至是高替。粘合力相较于PEI版略弱，在超高加速度（特别是Y轴）下可能会炒面。但使用正常预设就不会出问题。应该不会有人用超高加速度打印吧？\n制作过程 # 首先，要明确一下打印板的构造：\n简单来说，就是钢板 + 胶 + 表面层的三明治结构。虽然有些没有胶，而是直接附着的，但大同小异，我们完全可以拆成三部分分别购买制作。\n原材料购买 # 可乐可以不买 钢板 # 博主推荐65Mn弹簧钢板，这种钢材有铁磁性、耐弯折。市面上大部分打印板用的都是这个 （应该是吧？Gemini告诉我的🧐） 淘宝上到处都是。\n厚度选0.3mm，这个厚度平衡了刚性和韧性，能掰弯，折不断。不过我觉得0.2mm的应该也行，如果担心切割困难可以考虑一下。 不要买3xx、2xx等不锈钢板，这些是奥氏体不锈钢，没磁性，难固定。 尺寸方面，量一下自己的热床，找最接近的款式。淘宝基本上都是一米起卖，所以看准宽度就行（比如 A1mini 就买 200mm 宽的）。预算充足可以找商家代切，但我问了，价格不便宜。\n提示 此处有A1mini打印板的图纸；此处有X1/P1等打印板的图纸。\n胶 # 一般推荐 3M 468MP 无基材双面胶。但我实验发现，这玩意虽然纸面参数无敌，但手工粘贴难度高得离谱，极其容易留气泡。如果硬要类比一下难度的话，我觉得类似贴普通透明胶，但是不让用刮板，也不准有气泡。毕竟这个气泡刮板也刮不走。\n可以看到非常明显的气泡 所以我这里不推荐用一整张粘，而是买裁好的窄胶带，一段一段拼接，虽然有缝隙，但那点误差相比气泡可谓是小巫见大巫。如果还觉得不划算，普通的有基材双面胶也能用，没那么苛刻。\n表面层 # 淘宝直搜FR-4板材。我用的厚度是0.2mm的，但是其实0.3mm的更好。稍微厚点会更硬，可以弥补胶带的不平整。这东西不用定做，直接用剪刀就能裁，注意玻纤防护就行。\n家用切割 # 买回来的钢板通常是一米的长条，得切成热床形状。家里不太可能会有重型机械和激光切割机这类东西。我这只能用一个非常温柔的方法来切割——电解蚀刻： $$Fe - 2e^- = Fe^{2+}$$ 应该是这样的吧？博主的化学已经还给老师了。\n用透明胶带贴住要留下的部分，用美工刀刻出割缝。钢板通阳极，再随便找根铜线当阴极。通电，等个10分钟，基本上就蚀刻的差不多了，接下来用手轻轻一撕就能分开。\n多重复个几遍，就简单处理完了。可以参考下面几张图片，点击箭头切换图片。 Previous Next 后续处理 # 不用的话记得防锈。65Mn没有什么耐腐蚀性。\n怎么？贴个胶带粘个片片还要我教？\n使用建议 # 虽然可以直接用，但是我建议还是涂个胶。不然当初胶水不就白买了？\n","date":"Feb 21 12:15 +0800 2026","externalUrl":null,"permalink":"/articles/3d%E6%89%93%E5%8D%B0%E6%9D%BF%E7%9A%84%E6%9C%AA%E6%9D%A5%E8%87%AA%E5%88%B6fr4%E6%89%93%E5%8D%B0%E6%9D%BF/","section":"文章","summary":"绝缘材料FR-4有着出色的表面性能和价格，于是博主试着做了一个FR4打印板，效果出奇的不错。","title":"3D打印板的未来？自制FR4打印板！","type":"articles"},{"content":"","date":"Feb 21 12:15 +0800 2026","externalUrl":null,"permalink":"/tags/diy/","section":"Tags","summary":"","title":"DIY","type":"tags"},{"content":"","date":"Feb 21 12:15 +0800 2026","externalUrl":null,"permalink":"/tags/%E6%89%93%E5%8D%B0%E6%9D%BF/","section":"Tags","summary":"","title":"打印板","type":"tags"},{"content":"","date":"Jan 24 04:54 +0800 2026","externalUrl":null,"permalink":"/tags/%E5%B0%91%E5%A5%B3%E4%B9%90%E9%98%9F/","section":"Tags","summary":"","title":"少女乐队","type":"tags"},{"content":" 关于少女乐队的文章我老早就想写了，正好老登给了一个机会。\n内容来源还是经典的身边统计学。\n前情提要 # 木谷高明社长在1月22日上午转发了一条帖子，主要内容是对少女乐队作品在国内火热这一现象的分析\n原帖链接\n但是木谷老登引用的这篇文章，分析的不是很好，有点先射箭后画靶的感觉。你们可以先去阅读一下这篇文章的原文。如果懒得阅读，博主在后面也会简要概括。\n原文概括 # 以下不是博主的观点，是原文作者的观点。 针对少女乐队的火热，原文一共分析出了五个原因：\n阶层共鸣 反抗平庸与缺陷 产业结构问题 缺乏人才 重心倾向问题 其中1、2点是针对观众的，一句话总结就是「傻逼才看少女乐队」；3、4、5点都是针对行业的，总结就是环境差。接下来逐一概括。\n1.阶层共鸣 # 少女乐队题材作品中的主角都是少女 （废话），她们的阶层基本上都是低学历或正在上学的青少年。而这也正是其主要受众。将自己在社会底层的经历投射到动漫人物身上，带入自己，以满足自己有朝一日咸鱼翻身的梦想。\n2.反抗平庸与缺陷 # 中国社会目前是以学业成绩主导的，没有考试天赋的人就会被社会淘汰。同样，少女乐队在中国社会也是被认为是不务正业。但是这些作品中的角色却能在各自的领域闪耀，这给了这些平庸的年轻人反抗的力量。\n3.产业结构 # 中国动漫产业高度依赖“动漫-游戏”的商业模式。动漫负责出IP，随后与游戏合作，将赚到的钱反哺动漫。而音乐/乐队题材在这一模式中属于“高投入、低回报”的非理性投资。产生出的音乐、乐队资源很难融合进除了音游外的其他游戏，尤其是赚钱的MMO抽卡游戏。\n4.缺乏人才 # 中国动画制作主要由理科生主导，而留给文科生来发掘细腻情感的资源很少，使得编剧很难深入挖掘故事或人物内心。\n5.重心倾向问题 # 倾向于3D而不是2D，倾向于完美的画面而不是有深度的剧情。最关键的是导演编剧与观众的脱节，导演所在的阶层看不到底层观众的生活，类似于「送外卖看风景」一样，一叶障目。\n以上不是博主的观点，是原文作者的观点。 关于行业侧的3、4、5点（产业结构、人才、重心），确实点出了国产动画的痛点，我表示一定程度赞同。但关于受众侧的1、2点，我认为原文作者充满了傲慢与偏见。本文主要针对这两点进行反驳。\n傻逼不看少女乐队：谁才是真正的受众？ # 其实我这里的很多观点在原帖底下就有人回复了，大家也可以去观摩一下。\n在我看来，这些少女乐队作品的主要受众是青少年没错，但应该不是低学历、处于社会底层的人。为什么？\n首先，愿意为这些IP消费的核心粉丝他妈的天天往日本跑，让我羡慕死了，你说哪个低学历、处于社会底层的人有这时间精力？\n其次，我认为真正处于社会底层的人，他们的眼界也是有限的，会坐井观天，难以辩证看待文化交流的利弊。会随着主旋律，将日本动画视作文化入侵，于是充耳不闻。都这样了谁又会去看你的日本动画呢？修仙、转生、穿越的爽文短剧国漫比比皆是。在这个注意力稀缺的时代，没有人愿意把自己的时间精力放在将近半小时的动画里去。\n入坑的契机：从众与审丑 # 话说在最前面，在少女乐队动画本身质量过硬的前提下，我认为其火热的很大一部分原因还是顺应潮流，即从众心理。当这个动画火热的时候，大家都在讨论。为了能够参与讨论，想要跟上潮流，于是尝试看了一两集，拥有足够的正反馈，于是成为了新粉丝。如此这般人传人，导致了滚雪球般的热度。博主本人也是因为同学们的讨论，才去接触这类动画的。\n除此之外，抽象的二创和同行的衬托，也成了少女乐队发展的新契机。\n共鸣的本质：遗憾与幼稚 # 话说回来，人们现在不喜欢包饺子的结局。相较于大团圆，略有遗憾似乎是现在的主流。这几部动画似乎也略有遗憾，但这恰恰是其魅力所在。\n你有多久没有与一群志同道合的人齐心协力完成一个梦想了？作为中国人，我们难以摆脱传统礼教的束缚，依旧是「克己复礼为仁」。将自己的心愿梦想牢牢藏在心里，像一个乌龟一样，难以看透，显得城府很深。这种乌龟人我们叫做成熟。而一天天玩着乐队，喊着「目标是武道馆」这样的人，我们却称之为幼稚。正是这种评价的不平衡，以及高昂的试错成本，造成我们很少去追寻自己的梦想，而是按部就班的考公考研进大厂。\n但是少女乐队却是典型的反面。她们是非功利性的羁绊。在这些作品中，没有社会的压力，没有父母的责备，而是表现出一种不用负责，去追逐梦想的自由。这正是我们所向往的生活。而这种生活，我们也只能透过屏幕去窥探、感受、带入。\n撕破的面具 # 我们在白天戴着“情绪稳定”的面具，扮演着合群的同学、靠谱的社畜，小心翼翼地计算着每一步的得失，生怕行差踏错。但当夜幕降临，点开那一集动画时，屏幕里那些少女们的嘶吼、纠结、甚至是不体面的崩溃，却成了一记重锤，砸碎了我们脸上那层名为“成熟”的厚重伪装。\n我们热爱少女乐队，不是因为我们是底层的失败者，而是因为我们在她们身上，看到了那个曾经敢爱敢恨、不计成本去追逐光芒的自己。这24分钟的“幼稚”，是我们给自己的精神留出的最后一片自留地。在这里，面具破碎，我们终于得以喘息，确信自己还鲜活地活着。\n","date":"Jan 24 04:54 +0800 2026","externalUrl":null,"permalink":"/articles/%E5%B0%91%E5%A5%B3%E4%B9%90%E9%98%9F%E4%BA%8C%E4%B8%89%E4%BA%8B/","section":"文章","summary":"为什么少女乐队会如此火热？对木谷高明转发的观点表示质疑。","title":"少女乐队二三事","type":"articles"},{"content":" 先说重点：涂胶是为了保护PEI膜，方便取下成品，而不是为了增强黏性。\n如果不涂胶，直接在光面PEI板上打印，尤其是PETG材质的模型，那么拆件的时候你会见识到比乐高还紧的啮合。铲也不是，拔也不是，费劲九牛二虎之力，成功留下好几道划痕，甚至鼓包。 惨遭毒手的光面PEI板 这真的是光面吗？我暂且叫他光面吧（雾）\n事故起因 # 博主自从购入3D打印机后就一直用原装的纹理PEI板，打印的也是新手常用的PLA材料。但是在数个月前，被PETG的性价比和硬度深深打动，于是购入了几卷PETG耗材。苦于纹理板丑陋的纹理，顺手购入了某个副厂的光面板。当时没做足功课，认为和纹理和光面是一样的打印方法，网上也没有什么资料，只是说都要涂胶，也没说出个所以然。俺寻思是因为光面比较光滑，难以固定，所以要涂胶。结果博主不涂胶打了几个测试件，发现粘的很牢，于是就没有考虑过涂胶了。于是，事情就这么一步步发展到如今的。\n惨状描述 # 首先就是表面会鼓包，导致模型底面不平，甚至打印首层失败。打印板表面的划痕也会转印到模型底面（给我气的图都没拍就扔了，这里只有打印板的图片）\n坑坑洼洼的光面PEI板 这已经够惨了，不需要别的描述了\n原理分析 # 终于到了我最喜欢的原理分析环节了。其实原理非常简单，简单到都不用作图就能说明。\n光面PEI板其实是弹簧钢+胶水+PEI膜的三明治结构。也就是说，如果模型与PEI膜的粘合力大于中间夹的那层胶水，那么拆件的时候就会将PEI膜连根拔起，形成一个鼓包。同时，用刮刀拆件产生的划痕也就这么出来了。\n解决方案 # 打胶\n用普通的PVP胶水就行了，使得模型不直接接触PEI膜。文具店里买到的这种黄色瓶身的得力固体胶就是（不要买错了，绿色瓶身的是用淀粉之类的浆糊做的，黄色瓶身的才是PVP材质） PVP胶水是溶于水的，所以不要怕洗不掉。唯一要注意的就是不要模型还没冷却就急着拆件导致模型弯曲（尤其是比较扁的模型）\n也许可以配个PVP水溶液让他自流平，解决涂平烦恼。\n或者干脆不使用光面PEI板，换一个别的板，比如FR-4板。可惜国内没有人用过，我只能试一试（挖坑）\n总结 # 不是哥们？这又不是论文，为什么要直接看总结？自己看正文，也不长。\n","date":"Jan 12 20:07 +0800 2026","externalUrl":null,"permalink":"/articles/3d%E6%89%93%E5%8D%B0%E8%B8%A9%E5%9D%91%E5%85%89%E9%9D%A2pei%E6%9D%BF%E4%B8%80%E5%AE%9A%E8%A6%81%E6%B6%82%E8%83%B6/","section":"文章","summary":"涂胶是为了保护PEI膜，方便取下成品，而不是为了增强黏性。如果不涂胶就硬拆模型（尤其是PETG材质的），就等着PEI膜鼓包吧!","title":"3D打印踩坑——光面PEI板一定要涂胶","type":"articles"},{"content":"","date":"Jan 5 15:30 +0800 2026","externalUrl":null,"permalink":"/tags/markdown/","section":"Tags","summary":"","title":"Markdown","type":"tags"},{"content":" The Complete Guide of Readme Markdown Syntax Markdown is a syntax for styling all forms of writing on the GitHub platform. Mostly, it is just regular text with a few non-alphabetic characters thrown in, like git # or * You can use Markdown most places around GitHub:\nGists Comments in Issues and Pull Requests Files with the .md or .markdown extension Headers # # Heading 1 ## Heading 2 ### Heading 3 #### Heading 4 ##### Heading 5 ###### Heading 6 Heading 1 # Heading 2 # Heading 3 # Heading 4 # Heading 5 # Heading 6 # Font # *Italics* _This will also be italic_ **Bold text** __This will also be bold__ ***Bold and Italics*** _You **can** combine them_ ~~Striked Text~~ ***~~Italic, bold, and strikethrough1~~***\tItalics This will also be italic\nBold Text\nThis will also be bold\nBold and Italics\nYou can combine them\nStriked Text\nItalic, bold, and strikethrough1\nLists # Unordered\n* Item 1 * Item 2 * Item 1a * Item 2a * Item 1b * Item 2b Item 1 Item 2 Item 1a Item 2a Item 1b Item 2b OR - Item 1\nItem 1 Ordered\n1. First 2. jhg 1. Second 2. jhg 1. Third 2. jhg First jhg Second jhg Third jhg Links # * [Link with more info with various formatting options](https://docs.github.com/en/github/writing-on-github \u0026#34;more info\u0026#34;) * https://www.google.com/ * \u0026lt;https://www.google.com/\u0026gt; Link with more info with various formatting options https://www.google.com/ https://www.google.com/ Link Label # [My GitHub][GitHubLink] [My GitHub][GitHubLink]\nYou may define your link label anywhere in the document.\ne.g. put on bottom: -------------------------------- [GitHubLink]:https://github.com/darsaveli Links to the URLs in a repository # [Example document](/example/example.md) Example document\n[example](./example) example\nInserting Images or Gifs using links # ![alt](URL \u0026#34;title\u0026#34;) alt in square bracket indicates the replacement text when the image fails to display (can be omitted) parenthesis contains image source title in quotes indicates the text to display when the mouse hovers over the image (can be omitted) Nite: Dropping the image to the readme file will upload it automatically with this syntax; It\u0026rsquo;s the same as links, but add an exlamation mark (!) before opening square bracket; Image source can be either a location from the local machine or any valid image URL;\nExample\n![Octocat](https://user-images.githubusercontent.com/81953271/124010886-b571ca80-d9df-11eb-86ac-b358c48ac6aa.png \u0026#34;Github logo\u0026#34;) Github logo Resize images/Gifs # \u0026lt;img src=\u0026#34;https://github.com/darsaveli/Mariam/blob/main/1479814528_webarebears.gif\u0026#34; width=\u0026#34;385px\u0026#34; align=\u0026#34;center\u0026#34;\u0026gt; You can use HTML tags like width=\u0026ldquo;385px\u0026rdquo;, hight=\u0026ldquo;876px\u0026rdquo;, align=\u0026ldquo;center\u0026rdquo;, etc depending what you need. In this case this gif was once uploaded to the repository and the link was taken from there.\nOther options to resize:\n![](https:// link | width=100) Linking Image/Gif # To open another webpage when image is clicked, enclose the Markdown for the image in brackets, and then add the link in parentheses.\n[![Octocat](https://user-images.githubusercontent.com/81953271/124010886-b571ca80-d9df-11eb-86ac-b358c48ac6aa.png \u0026#34;GitHub Logo\u0026#34;)](https://github.com/) GitHub Logo Tables # |Header1|Header2|Header3| | --- | --- | --- | | This | is a | table | | This | is 2nd | row | | This | is 3rd | row | Header1 Header2 Header3 This is a table This is 2nd row This is 3rd row Align # You may specify alignment like this:\n| Align left | Centered | Align right | | :------------ |:---------------:| -----:| | col 3 is | some wordy text | $1600 | Align left Centered Align right aaa bbb ccc p.s. You can use alignment with \u0026lt;h1 (or 2 etc.) align=\u0026quot;center\u0026quot;\u0026gt; your text \u0026lt;/h1\u0026gt; tags or with \u0026lt;p align=\u0026quot;center\u0026quot;\u0026gt; your text\u0026lt;/p\u0026gt; tag to align plain text.\nCheckBox # * [ ] Checkbox1 * [ ] Checkbox2 * [x] Checkbox selected Checkbox1\nCheckbox2\nCheckbox selected\nYou may use this syntax in GitHub\u0026rsquo;s issue to check or uncheck the checkbox in real time without having to modify the original version of the issue.\nQuoting Text # \u0026gt; This is a block quoted text This is a block quoted text\nMulti-level blockquotes # \u0026gt; Asia \u0026gt;\u0026gt; China \u0026gt;\u0026gt;\u0026gt; Beijing \u0026gt;\u0026gt;\u0026gt;\u0026gt; Haidian \u0026gt;\u0026gt;\u0026gt;\u0026gt;\u0026gt; Tsinghua Look like # Asia\nChina\nBeijing\nHaidian\nTsinghua\nThese are fenced code blocks Text highlighting # `linux` `ubuntu` Using a pair of backquotes is suitable for making tags for articles linux ubuntu\nHorizontal Line # *** ___ --- All three will be rendered as:\np.s.\n\u0026lt;hr\u0026gt; works too Break between lines # \u0026lt;br\u0026gt; Visible markdown characters # ```git * __ \u0026lt;br\u0026gt; etc ``` Multi-line text # aaa, sss, ddd! Add 1 tab or 4 spaces at the beginning of several lines of text.\nOR\nUse three backticks:\nasd, sfd, wer! This syntax can also be used for code highlighting\nComments in Markdown # \u0026lt;!-- comment written in markdown --\u0026gt; They will be invisible on readme\nEmoji # :grinning:\tor just place the emoji 😀 \u0026#x1f600;\tor just place the emoji 😀\nTo see a list of every image Github supports, check out the Emoji Cheat Sheet\nCode Block # There are three ways to add code in markdown\nInline Code (single backtick) Whitespace `this` is an example of inline code. four spaces work too! Fenced code blocks With GFM you can wrap your code with three back quotes to create a code block without the leading spaces. Add annoptional language identifier and your code will get syntax highlighting. public static void main(String[]args){} //Java document.getElementById(\u0026#34;myH1\u0026#34;).innerHTML=\u0026#34;Welcome to my Homepage\u0026#34;; //javascipt Syntax Highlighting # If language name is mentioned after the end of first set of backticks, the code snippet will be highlighted according to the language.\n```js console.log('javascript') ``` ```python print('python') ``` ```java System.out.println('java') ``` ```json { \u0026quot;firstName\u0026quot;: \u0026quot;A\u0026quot;, \u0026quot;lastName\u0026quot;: \u0026quot;B \u0026quot;age\u0026quot;: 18 } ``` console.log(\u0026#39;javascript\u0026#39;) print(\u0026#39;python\u0026#39;) System.out.println(\u0026#39;java\u0026#39;) { \u0026#34;firstName\u0026#34;: \u0026#34;A\u0026#34;, \u0026#34;lastName\u0026#34;: \u0026#34;B\u0026#34;, \u0026#34;age\u0026#34;: 18 } diff syntax # In the version control system, the function of diff is indispensable, i.e., the addition and deletion of a file content is displayed. The diff effect that can be displayed in GFM. Green is for new, while red is for deleted.\nSyntax # The syntax is similar to code fenced code blocks, except that the diff is written after the three backticks. And in the content, the beginning of + indicates the addition, and the beginning of - indicates the deletion.\n+ Hello world! - This is useless. Use YAML: human friendly data serialization language for all programming languages # name: Mariam located_in: *** from: *** education: *** job: *** company: *** Anchor # In fact, each title is an anchor, similar to the HTML anchor (#), e.g.\nSyntax Look like [Back to top](#readme) Back to top Note that all the letters in the title are converted to lowercase letters.\nRender mathematical expressions in Markdown # You can now use LaTeX style syntax to render math expressions within Markdown inline (using $ delimiters) or in blocks (using $$ delimiters).\nWriting expressions as blocks To add math as a multiline block displayed separately from surrounding text, start a new line and delimit the expression with two dollar symbols $$.\n$$\\left( \\sum_{k=1}^n a_k b_k \\right)^2 \\leq \\left( \\sum_{k=1}^n a_k^2 \\right) \\left( \\sum_{k=1}^n b_k^2 \\right)$$$$\\left( \\sum_{k=1}^n a_k b_k \\right)^2 \\leq \\left( \\sum_{k=1}^n a_k^2 \\right) \\left( \\sum_{k=1}^n b_k^2 \\right)$$ Writing inline expressions # To include a math expression inline with your text, delimit the expression with a dollar symbol $.\nThis sentence uses $ delimiters to show math inline: \\( \\sqrt{3x-1}+(1+x)^2 \\)\nThis sentence uses `$` delimiters to show math inline: \\( \\sqrt{3x-1}+(1+x)^2$ \\) Markdown posts on GitHub # ","date":"Jan 5 15:30 +0800 2026","externalUrl":null,"permalink":"/articles/the-complete-guide-of-readme-markdown-syntax/","section":"文章","summary":"介绍了许多Markdown的基本语法，当然也可以用来测试显示效果","title":"Markdown基本语法","type":"articles"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":" 描述 # 该文件定义了 CH32V00x 系列微控制器 ADC 外设的固件库所有函数原型、常量、枚举和结构体。ADC（模数转换器）支持单通道与多通道扫描转换、注入通道、模拟看门狗、DMA 请求、软件与外部触发等多种模式，适用于高精度模拟信号采集场景。本库通过寄存器掩码操作实现灵活配置，所有常量均以 uint32_t 或 uint8_t 类型定义，确保与硬件寄存器位域精确匹配。函数设计遵循标准外设库风格，支持初始化、启动、中断、校准、偏移设置等完整功能链，适用于工业控制、传感器接口、电源管理等嵌入式应用。\n常量 # ADC_mode # 配置 ADC 工作模式为独立模式（仅支持单 ADC）\n名称 值 简述 ADC_Mode_Independent 0x00000000 ADC 工作在独立模式，不参与双 ADC 同步操作 该模式为单 ADC 系统的唯一选择，CH32V00x 仅含一个 ADC 模块，因此该常量实际为默认且唯一有效值。\nADC_external_trigger_sources_for_regular_channels_conversion # 配置常规通道转换的外部触发源\n名称 值 简述 ADC_ExternalTrigConv_T1_TRGO 0x00000000 定时器1的TRGO事件触发 ADC_ExternalTrigConv_T1_CC1 0x00020000 定时器1的捕获比较1事件触发 ADC_ExternalTrigConv_T1_CC2 0x00040000 定时器1的捕获比较2事件触发 ADC_ExternalTrigConv_T2_TRGO 0x00060000 定时器2的TRGO事件触发 ADC_ExternalTrigConv_T2_CC1 0x00080000 定时器2的捕获比较1事件触发 ADC_ExternalTrigConv_T2_CC2 0x000A0000 定时器2的捕获比较2事件触发 ADC_ExternalTrigConv_Ext_PD3_PC2 0x000C0000 外部引脚PD3或PC2的上升沿触发 ADC_ExternalTrigConv_None 0x000E0000 软件触发（无外部硬件触发） 所有值均为 CTLR2 寄存器中 EXTSEL[3:0] 字段的编码，用于选择触发源。None 模式下需配合 ADC_SoftwareStartConvCmd() 使用，实现纯软件控制采样。\nADC_data_align # 配置转换结果的数据对齐方式\n名称 值 简述 ADC_DataAlign_Right 0x00000000 右对齐，结果存于寄存器低10位 ADC_DataAlign_Left 0x00000800 左对齐，结果存于寄存器高10位 右对齐为默认模式，便于直接读取10位有效值；左对齐适用于需要与12位或16位数据对齐的后续处理，如DMA传输至缓冲区时保持字节对齐。\nADC_channels # ADC 通道编号定义（共10个通道）\n名称 值 简述 ADC_Channel_0 0x00 通道0（PA0） ADC_Channel_1 0x01 通道1（PA1） ADC_Channel_2 0x02 通道2（PA2） ADC_Channel_3 0x03 通道3（PA3） ADC_Channel_4 0x04 通道4（PA4） ADC_Channel_5 0x05 通道5（PA5） ADC_Channel_6 0x06 通道6（PA6） ADC_Channel_7 0x07 通道7（PA7） ADC_Channel_8 0x08 通道8（Vrefint） ADC_Channel_9 0x09 通道9（Vcalint） ADC_Channel_8 和 ADC_Channel_9 为内部参考电压通道，分别用于读取内部1.2V参考电压和校准电压，可用于系统电压监测或温度估算。\nADC_Channel_Vrefint 和 ADC_Channel_Vcalint # 内部参考电压通道别名定义\n名称 值 简述 ADC_Channel_Vrefint ADC_Channel_8 内部参考电压通道（1.2V） ADC_Channel_Vcalint ADC_Channel_9 内部校准电压通道（用于ADC校准） 这两个通道为系统级通道，不连接外部引脚，仅用于内部校准或电压监测，使用时需确保ADC时钟稳定。\nADC_sampling_time # 配置通道采样时间（单位：ADC时钟周期）\n名称 值 简述 ADC_SampleTime_3Cycles 0x00 3个ADC时钟周期 ADC_SampleTime_9Cycles 0x01 9个ADC时钟周期 ADC_SampleTime_15Cycles 0x02 15个ADC时钟周期 ADC_SampleTime_30Cycles 0x03 30个ADC时钟周期 ADC_SampleTime_43Cycles 0x04 43个ADC时钟周期 ADC_SampleTime_57Cycles 0x05 57个ADC时钟周期 ADC_SampleTime_73Cycles 0x06 73个ADC时钟周期 ADC_SampleTime_241Cycles 0x07 241个ADC时钟周期 采样时间越长，转换精度越高，尤其适用于高阻抗传感器。241Cycles 为最大采样时间，适合低频、高精度场景；3Cycles 适用于高速连续采样。\nADC_external_trigger_sources_for_injected_channels_conversion # 配置注入通道转换的外部触发源\n名称 值 简述 ADC_ExternalTrigInjecConv_T1_CC3 0x00000000 定时器1捕获比较3事件触发 ADC_ExternalTrigInjecConv_T1_CC4 0x00001000 定时器1捕获比较4事件触发 ADC_ExternalTrigInjecConv_T2_CC3 0x00002000 定时器2捕获比较3事件触发 ADC_ExternalTrigInjecConv_T2_CC4 0x00003000 定时器2捕获比较4事件触发 ADC_ExternalTrigInjecConv_Ext_PD1_PA2 0x00006000 外部引脚PD1或PA2上升沿触发 ADC_ExternalTrigInjecConv_None 0x00007000 软件触发（无外部硬件触发） 注入通道优先级高于常规通道，常用于中断式采样（如过流保护、快速响应）。None 模式下需配合 ADC_SoftwareStartInjectedConvCmd() 使用。\nADC_injected_channel_selection # 注入通道编号定义（用于设置偏移和读取结果）\n名称 值 简述 ADC_InjectedChannel_1 0x14 注入通道1（对应ISQR寄存器第1个位置） ADC_InjectedChannel_2 0x18 注入通道2（对应ISQR寄存器第2个位置） ADC_InjectedChannel_3 0x1C 注入通道3（对应ISQR寄存器第3个位置） ADC_InjectedChannel_4 0x20 注入通道4（对应ISQR寄存器第4个位置） 这些值并非通道编号，而是用于计算偏移地址的标识符，与 ADC_SetInjectedOffset() 和 ADC_GetInjectedConversionValue() 配合使用，通过地址偏移访问注入通道结果寄存器。\nADC_analog_watchdog_selection # 配置模拟看门狗监控模式\n名称 值 简述 ADC_AnalogWatchdog_SingleRegEnable 0x00800200 仅监控一个常规通道 ADC_AnalogWatchdog_SingleInjecEnable 0x00400200 仅监控一个注入通道 ADC_AnalogWatchdog_SingleRegOrInjecEnable 0x00C00200 监控任意一个常规或注入通道 ADC_AnalogWatchdog_AllRegEnable 0x00800000 监控所有常规通道 ADC_AnalogWatchdog_AllInjecEnable 0x00400000 监控所有注入通道 ADC_AnalogWatchdog_AllRegAllInjecEnable 0x00C00000 监控所有常规和注入通道 ADC_AnalogWatchdog_None 0x00000000 禁用模拟看门狗 看门狗通过比较转换值与设定的高低阈值触发中断或标志，适用于电压越限报警、电池电量监测等安全监控场景。SingleRegEnable 需配合 ADC_AnalogWatchdogSingleChannelConfig() 指定具体通道。\nADC_interrupts_definition # ADC 中断源定义（用于 ADC_ITConfig()）\n名称 值 简述 ADC_IT_EOC 0x0220 常规通道转换结束中断 ADC_IT_AWD 0x0140 模拟看门狗中断 ADC_IT_JEOC 0x0480 注入通道转换结束中断 中断掩码为 CTLR1 寄存器中对应位的组合，0x0220 = 0x0200 | 0x0020，其中 0x0200 为 EOC 位，0x0020 为中断使能位。使用时需确保 ADC_ITConfig() 的 NewState 为 ENABLE。\nADC_flags_definition # ADC 状态标志定义（用于 ADC_GetFlagStatus()）\n名称 值 简述 ADC_FLAG_AWD 0x01 模拟看门狗标志 ADC_FLAG_EOC 0x02 常规通道转换结束标志 ADC_FLAG_JEOC 0x04 注入通道转换结束标志 ADC_FLAG_JSTRT 0x08 注入通道转换启动标志 ADC_FLAG_STRT 0x10 常规通道转换启动标志 所有标志位位于 STATR 寄存器，可通过 ADC_ClearFlag() 清除。JSTRT 和 STRT 用于确认转换是否已启动，适用于轮询模式。\nADC_calibration_voltage_definition # ADC 校准电压选择（用于 ADC_Calibration_Vol()）\n名称 值 简述 ADC_CALVOL_50PERCENT 0x02000000 校准电压为 VDD 的 50% ADC_CALVOL_75PERCENT 0x04000000 校准电压为 VDD 的 75% 该功能用于在特定电压点校准 ADC，提高线性度。校准前需确保 VDD 稳定，校准后需调用 ADC_StartCalibration() 和 ADC_ResetCalibration() 完成完整流程。\nADC_external_trigger_sources_delay_channels_definition # 外部触发延迟通道选择（用于 ADC_ExternalTrig_DLY()）\n名称 值 简述 ADC_ExternalTrigRegul_DLY 0x00000000 延迟应用于常规通道触发 ADC_ExternalTrigInjec_DLY 0x00000200 延迟应用于注入通道触发 该功能允许在外部触发事件后插入可编程延迟（0~511个系统时钟周期），用于同步多个外设（如PWM与ADC采样），提升系统时序精度。\n枚举 # FunctionalState # 启用/禁用状态枚举（由 ch32v00x.h 定义）\n名称 值 DISABLE 0 ENABLE 1 该枚举广泛用于控制外设功能的开关，如 ADC_Cmd()、ADC_DMACmd() 等，其值直接映射为寄存器位的置位/复位操作。\n结构体 # ADC_InitTypeDef # ADC 初始化结构体定义\n名称 类型 简述 ADC_Mode uint32_t 配置 ADC 工作模式，仅支持 ADC_Mode_Independent ADC_ScanConvMode FunctionalState 启用扫描模式（多通道）或单通道模式 ADC_ContinuousConvMode FunctionalState 启用连续转换模式（自动重复）或单次转换模式 ADC_ExternalTrigConv uint32_t 选择常规通道的外部触发源，可为 ADC_ExternalTrigConv_* 常量之一 ADC_DataAlign uint32_t 设置转换结果对齐方式：右对齐或左对齐 ADC_NbrOfChannel uint8_t 设置常规通道序列中要转换的通道数量，范围 1~16 该结构体是 ADC_Init() 的核心输入参数，所有配置必须在调用 ADC_Init() 前完成。ADC_NbrOfChannel 与 ADC_RegularChannelConfig() 的 Rank 参数需一致，确保序列完整。\n函数 # ADC_DeInit # void ADC_DeInit(ADC_TypeDef *ADCx)\n将 ADCx 外设寄存器复位为默认复位值，通过复位 APB2 时钟实现。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 该函数通过 RCC_APB2PeriphResetCmd() 触发硬件复位，比直接写寄存器更彻底，适用于系统初始化或异常恢复。\nADC_Init # void ADC_Init(ADC_TypeDef *ADCx, ADC_InitTypeDef *ADC_InitStruct)\n根据 ADC_InitStruct 中的参数初始化 ADC 外设。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_InitStruct ADC_InitTypeDef * 指向包含配置参数的结构体指针 该函数会清除 CTLR1 和 CTLR2 的相关位，然后写入配置值。注意：ADC_NbrOfChannel 仅影响常规通道序列，注入通道需单独配置。\nADC_StructInit # void ADC_StructInit(ADC_InitTypeDef *ADC_InitStruct)\n将 ADC_InitTypeDef 结构体所有成员初始化为默认值。\n参数：\n名称 类型 简述 ADC_InitStruct ADC_InitTypeDef * 待初始化的结构体指针 默认值为：独立模式、单次转换、软件触发、右对齐、1个通道。建议在调用 ADC_Init() 前先调用此函数，避免未初始化变量导致异常。\nADC_Cmd # void ADC_Cmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用 ADC 外设。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启用，DISABLE 禁用 启用后 ADC 才能进行转换。禁用后可节省功耗，但需重新校准才能恢复精度。\nADC_DMACmd # void ADC_DMACmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用 ADC 转换结果的 DMA 请求。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启用，DISABLE 禁用 启用后，每次转换结束自动将结果写入指定内存缓冲区，减少 CPU 干预，适用于高速连续采样场景。\nADC_ITConfig # void ADC_ITConfig(ADC_TypeDef *ADCx, uint16_t ADC_IT, FunctionalState NewState)\n启用或禁用指定的 ADC 中断源。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_IT uint16_t 中断源，可为 ADC_IT_EOC、ADC_IT_AWD、ADC_IT_JEOC NewState FunctionalState ENABLE 启用，DISABLE 禁用 中断使能后需在 NVIC 中配置相应中断向量。ADC_IT_AWD 通常用于异常检测，ADC_IT_EOC 用于数据采集完成通知。\nADC_ResetCalibration # void ADC_ResetCalibration(ADC_TypeDef *ADCx)\n复位 ADC 校准寄存器，为校准做准备。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 必须在 ADC_StartCalibration() 前调用。复位后 CTLR2 的 RSTCAL 位被置位，需等待其自动清零。\nADC_GetResetCalibrationStatus # FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef *ADCx)\n获取 ADC 校准复位状态。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 返回值：\nSET：复位操作正在进行中；RESET：复位已完成。\n用于轮询校准复位是否完成，确保 ADC_StartCalibration() 在正确时机调用。\nADC_StartCalibration # void ADC_StartCalibration(ADC_TypeDef *ADCx)\n启动 ADC 校准过程。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 校准过程自动完成，期间 ADC 不能工作。校准完成后 CAL 位自动清零，需调用 ADC_GetCalibrationStatus() 确认。\nADC_GetCalibrationStatus # FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef *ADCx)\n获取 ADC 校准状态。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 返回值：\nSET：校准正在进行中；RESET：校准已完成。\n校准完成后 ADC 精度提升，建议在系统上电后、首次使用前执行完整校准流程（复位→启动→等待完成）。\nADC_SoftwareStartConvCmd # void ADC_SoftwareStartConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用常规通道的软件启动转换。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启动转换，DISABLE 停止 仅在 ADC_ExternalTrigConv 设置为 ADC_ExternalTrigConv_None 时有效。调用后立即启动一次转换。\nADC_GetSoftwareStartConvStatus # FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef *ADCx)\n获取常规通道软件启动转换状态。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 返回值：\nSET：软件启动信号有效；RESET：无效。\n用于确认转换是否已启动，适用于轮询模式下的状态监控。\nADC_DiscModeChannelCountConfig # void ADC_DiscModeChannelCountConfig(ADC_TypeDef *ADCx, uint8_t Number)\n配置常规通道不连续模式的通道数量。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 Number uint8_t 不连续模式下每组转换的通道数（1~8） 不连续模式下，ADC 每次只转换指定数量的通道，其余通道跳过，适用于降低功耗或提高采样速率。需配合 ADC_DiscModeCmd() 使用。\nADC_DiscModeCmd # void ADC_DiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用常规通道的不连续转换模式。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启用，DISABLE 禁用 启用后，ADC 按 ADC_DiscModeChannelCountConfig() 设置的通道数分组转换，每组后暂停，适合低功耗间歇采样。\nADC_RegularChannelConfig # void ADC_RegularChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)\n配置常规通道的序列顺序、采样时间。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_Channel uint8_t 通道编号，如 ADC_Channel_0~ADC_Channel_9 Rank uint8_t 在序列中的位置（1~16） ADC_SampleTime uint8_t 采样时间，如 ADC_SampleTime_3Cycles 序列由 RSQR3、RSQR2、RSQR1 三个寄存器组成，分别支持前6、6、4个通道。Rank 为1时为第一个采样通道。必须按顺序配置，否则序列错乱。\nADC_ExternalTrigConvCmd # void ADC_ExternalTrigConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用常规通道的外部触发转换。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启用，DISABLE 禁用 启用后，ADC 将等待外部触发事件（如定时器边沿）启动转换，适用于同步采集场景。\nADC_GetConversionValue # uint16_t ADC_GetConversionValue(ADC_TypeDef *ADCx)\n读取最近一次常规通道转换结果。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 返回值：\n转换结果值（0~1023，10位精度）\n仅在 ADC_FLAG_EOC 为 SET 时读取有效。若为左对齐，需右移6位获取有效值。\nADC_AutoInjectedConvCmd # void ADC_AutoInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用注入通道在常规通道转换后自动启动。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启用，DISABLE 禁用 启用后，每次常规通道序列完成，自动触发一次注入通道序列，适用于“主采样+辅助监测”场景。\nADC_InjectedDiscModeCmd # void ADC_InjectedDiscModeCmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用注入通道的不连续转换模式。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启用，DISABLE 禁用 注入通道最多支持4个，不连续模式下可跳过部分通道，提升响应速度。\nADC_ExternalTrigInjectedConvConfig # void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef *ADCx, uint32_t ADC_ExternalTrigInjecConv)\n配置注入通道的外部触发源。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_ExternalTrigInjecConv uint32_t 触发源，如 ADC_ExternalTrigInjecConv_T1_CC3 与常规通道触发源独立，可配置不同事件触发注入转换，实现多任务同步。\nADC_ExternalTrigInjectedConvCmd # void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用注入通道的外部触发转换。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启用，DISABLE 禁用 启用后，注入通道仅在外部事件触发时转换，否则需软件启动。\nADC_SoftwareStartInjectedConvCmd # void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef *ADCx, FunctionalState NewState)\n启用或禁用注入通道的软件启动转换。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 NewState FunctionalState ENABLE 启动，DISABLE 停止 仅在 ADC_ExternalTrigInjecConv 为 None 时有效，用于手动触发高优先级采样。\nADC_GetSoftwareStartInjectedConvCmdStatus # FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef *ADCx)\n获取注入通道软件启动状态。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 返回值：\nSET：软件启动信号有效；RESET：无效。\n用于确认注入转换是否已启动，适用于轮询模式。\nADC_InjectedChannelConfig # void ADC_InjectedChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)\n配置注入通道的序列顺序和采样时间。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_Channel uint8_t 通道编号，如 ADC_Channel_0~ADC_Channel_9 Rank uint8_t 在注入序列中的位置（1~4） ADC_SampleTime uint8_t 采样时间，如 ADC_SampleTime_3Cycles 注入通道序列由 ISQR 寄存器管理，最多支持4个通道。Rank 为1时为第一个注入通道。采样时间与常规通道独立配置。\nADC_InjectedSequencerLengthConfig # void ADC_InjectedSequencerLengthConfig(ADC_TypeDef *ADCx, uint8_t Length)\n配置注入通道序列长度。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 Length uint8_t 序列中通道数量（1~4） 该值决定 ISQR 寄存器中实际使用的通道数，超出部分将被忽略。必须与 ADC_InjectedChannelConfig() 配置的通道数一致。\nADC_SetInjectedOffset # void ADC_SetInjectedOffset(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)\n设置注入通道的转换结果偏移值。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_InjectedChannel uint8_t 注入通道标识符，如 ADC_InjectedChannel_1 Offset uint16_t 偏移值（0~1023），10位有效 偏移值将被加到实际转换结果上，用于补偿传感器零点漂移或系统误差。偏移寄存器地址通过 ADC_InjectedChannel 值计算。\nADC_GetInjectedConversionValue # uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef *ADCx, uint8_t ADC_InjectedChannel)\n读取指定注入通道的转换结果。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_InjectedChannel uint8_t 注入通道标识符，如 ADC_InjectedChannel_1 返回值：\n转换结果值（0~1023，10位精度）\n仅在 ADC_FLAG_JEOC 为 SET 时读取有效。结果寄存器地址为 ADCx + 0x28 + ADC_InjectedChannel。\nADC_AnalogWatchdogCmd # void ADC_AnalogWatchdogCmd(ADC_TypeDef *ADCx, uint32_t ADC_AnalogWatchdog)\n启用或禁用模拟看门狗，并选择监控模式。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_AnalogWatchdog uint32_t 看门狗模式，如 ADC_AnalogWatchdog_SingleRegEnable 该函数设置 CTLR1 的 AWDEN 和 AWDSGL 位，决定监控范围。必须配合 ADC_AnalogWatchdogThresholdsConfig() 设置阈值。\nADC_AnalogWatchdogThresholdsConfig # void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef *ADCx, uint16_t HighThreshold, uint16_t LowThreshold)\n配置模拟看门狗的高低阈值。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 HighThreshold uint16_t 高阈值（0~1023） LowThreshold uint16_t 低阈值（0~1023） 当转换值超出 [Low, High] 区间时触发 ADC_FLAG_AWD 和中断。高阈值必须大于低阈值，否则行为未定义。\nADC_AnalogWatchdogSingleChannelConfig # void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef *ADCx, uint8_t ADC_Channel)\n配置模拟看门狗监控的单个通道（仅在 SingleRegEnable 或 SingleInjecEnable 模式下有效）。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_Channel uint8_t 通道编号，如 ADC_Channel_0~ADC_Channel_9 该函数设置 CTLR1 的 AWDCH[4:0] 字段，指定被监控的通道。必须在 ADC_AnalogWatchdogCmd() 之后调用。\nADC_GetFlagStatus # FlagStatus ADC_GetFlagStatus(ADC_TypeDef *ADCx, uint8_t ADC_FLAG)\n检查指定 ADC 标志是否置位。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_FLAG uint8_t 标志位，如 ADC_FLAG_EOC 返回值：\nSET：标志置位；RESET：标志未置位。\n用于轮询模式判断转换是否完成或异常是否发生，避免中断开销。\nADC_ClearFlag # void ADC_ClearFlag(ADC_TypeDef *ADCx, uint8_t ADC_FLAG)\n清除指定的 ADC 标志位。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_FLAG uint8_t 标志位，如 ADC_FLAG_EOC 通过向 STATR 寄存器写入1清除标志。必须在中断服务程序或轮询处理后清除，否则会重复触发。\nADC_GetITStatus # ITStatus ADC_GetITStatus(ADC_TypeDef *ADCx, uint16_t ADC_IT)\n检查指定的 ADC 中断是否发生。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_IT uint16_t 中断源，如 ADC_IT_EOC 返回值：\nSET：中断发生；RESET：未发生。\n该函数同时检查中断使能位和状态标志位，确保中断确实被触发，而非仅标志置位。\nADC_ClearITPendingBit # void ADC_ClearITPendingBit(ADC_TypeDef *ADCx, uint16_t ADC_IT)\n清除指定的 ADC 中断挂起位。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_IT uint16_t 中断源，如 ADC_IT_EOC 通过清除 STATR 中对应标志位实现，必须在中断服务程序末尾调用，防止重复进入中断。\nADC_Calibration_Vol # void ADC_Calibration_Vol(ADC_TypeDef *ADCx, uint32_t ADC_CALVOL)\n设置 ADC 校准电压参考点。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 ADC_CALVOL uint32_t 校准电压，ADC_CALVOL_50PERCENT 或 ADC_CALVOL_75PERCENT 该功能用于在特定电压点校准 ADC，提高线性度。校准前需确保 VDD 稳定，校准后需调用 ADC_StartCalibration() 和 ADC_ResetCalibration() 完成完整流程。\nADC_ExternalTrig_DLY # void ADC_ExternalTrig_DLY(ADC_TypeDef *ADCx, uint32_t channel, uint16_t DelayTim)\n配置外部触发延迟通道和延迟时间。\n参数：\n名称 类型 简述 ADCx ADC_TypeDef * 选择 ADC 外设，仅支持 ADC1 channel uint32_t 触发通道，ADC_ExternalTrigRegul_DLY 或 ADC_ExternalTrigInjec_DLY DelayTim uint16_t 延迟时间（0~511个系统时钟周期） 该功能用于精确同步 ADC 采样与外部事件（如 PWM 边沿），延迟范围 0~511 个系统时钟周期，可实现微秒级同步控制。\n","externalUrl":null,"permalink":"/ch32v003_doc/4.ch32v00x_adc.h/","section":"CH32V00x的软件文档","summary":"该文件定义了 CH32V00x 系列微控制器 ADC 外设的固件库所有函数原型、常量、枚举和结构体。ADC（模数转换器）支持单通道与多通道扫描转换、注入通道、模拟看门狗、DMA 请求、软件与外部触发等多种模式，适用于高精度模拟信号采集场景。本库通过寄存器掩码操作实现灵活配置，所有常量均以 uint32_t 或 uint8_t 类型定义，确保与硬件寄存器位域精确匹配。函数设计遵循标准外设库风格，支持初始化、启动、中断、校准、偏移设置等完整功能链，适用于工业控制、传感器接口、电源管理等嵌入式应用。","title":"ch32v00x_adc.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含 DBGMCU（调试监控单元）固件库的所有函数原型与常量定义，用于在调试模式下控制外设行为，如暂停看门狗、定时器等，以方便开发与调试。DBGMCU 允许在 CPU 停止时保持某些外设的暂停状态，避免调试过程中触发意外复位或计数，是嵌入式调试环境中关键的低层控制接口。所有配置均通过写入调试控制寄存器（DEBUG_CR，地址 0x7C0）实现，该寄存器由 CPU 的 CSR 指令直接访问，具有极低的延迟和硬件级控制能力。\n常量 # DBGMCU_Periph_Config # 调试模式下外设行为控制常量，用于配置当 CPU 停止时哪些外设应被暂停。这些常量为位掩码，可组合使用以同时控制多个外设。\n名称 值 简述 DBGMCU_IWDG_STOP 0x00000001 当核心暂停时，独立看门狗（IWDG）停止计数 DBGMCU_WWDG_STOP 0x00000002 当核心暂停时，窗口看门狗（WWDG）停止计数 DBGMCU_TIM1_STOP 0x00000010 当核心暂停时，TIM1 计数器停止 DBGMCU_TIM2_STOP 0x00000020 当核心暂停时，TIM2 计数器停止 以上所有值均为 uint32_t 类型的位掩码，支持按位或（|）组合使用，例如：DBGMCU_IWDG_STOP | DBGMCU_TIM1_STOP 可同时暂停 IWDG 和 TIM1。\n函数 # DBGMCU_GetREVID # uint32_t DBGMCU_GetREVID(void)\n读取芯片的修订版本号（Revision ID），该值存储在芯片的唯一 ID 寄存器的高 16 位中，可用于区分同一型号芯片的不同工程版本或生产批次。\n参数：\n无\n返回值：\n芯片修订版本号（16 位无符号整数），例如 0x0001 表示修订版 1。\nDBGMCU_GetDEVID # uint32_t DBGMCU_GetDEVID(void)\n读取芯片的设备标识符（Device ID），该值存储在芯片唯一 ID 寄存器的低 16 位中，用于识别芯片型号（如 CH32V003）。\n参数：\n无\n返回值：\n芯片设备标识符（16 位无符号整数），例如 0x05x0 表示 CH32V003 系列。\n__get_DEBUG_CR # uint32_t __get_DEBUG_CR(void)\n通过 RISC-V CSR 指令直接读取调试控制寄存器（DEBUG_CR）的当前值。该寄存器控制调试模式下各外设的行为，是 DBGMCU_Config 函数的底层实现基础。\n参数：\n无\n返回值：\nDEBUG_CR 寄存器的当前 32 位值，每一位对应一个外设的调试暂停使能状态。\n__set_DEBUG_CR # void __set_DEBUG_CR(uint32_t value)\n通过 RISC-V CSR 指令直接写入调试控制寄存器（DEBUG_CR），用于立即更新调试模式下外设的暂停行为。此函数为原子操作，无锁机制，适用于实时调试场景。\n参数：\n名称 类型 简述 value uint32_t 要写入 DEBUG_CR 的新值，应为 DBGMCU_Periph_Config 常量的组合。 返回值：\n无\nDBGMCU_Config # void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState)\n配置指定外设在调试模式下的行为。通过读取、修改、写回 DEBUG_CR 寄存器实现，支持启用或禁用多个外设的暂停功能。此函数封装了底层 CSR 操作，提供更安全、易用的接口。\n参数：\n名称 类型 简述 DBGMCU_Periph uint32_t 要配置的外设掩码，取值为 DBGMCU_IWDG_STOP、DBGMCU_WWDG_STOP、DBGMCU_TIM1_STOP 或 DBGMCU_TIM2_STOP，可组合使用。 NewState FunctionalState 启用（ENABLE）或禁用（DISABLE）该外设的调试暂停功能。 返回值：\n无\n注意：FunctionalState 为 ch32v00x.h 中定义的枚举类型，通常为 ENABLE（1）和 DISABLE（0）。\nDBGMCU_GetCHIPID # uint32_t DBGMCU_GetCHIPID(void)\n一次性读取芯片的完整唯一标识符（CHIP ID），该值为 32 位，包含设备 ID（低 16 位）与修订 ID（高 16 位），可用于芯片型号识别与固件差异化处理。\n参数：\n无\n返回值：\n芯片完整标识符（32 位），格式为：[高16位: Revision ID] | [低16位: Device ID]。\n示例：\n0x003005x0 → CH32V003F4P6 0x003105x0 → CH32V003F4U6 0x003205x0 → CH32V003A4M6 0x003305x0 → CH32V003J4M6 此函数返回值与 DBGMCU_GetDEVID() 和 DBGMCU_GetREVID() 的组合结果等价，但更高效，适用于需一次性获取完整芯片信息的场景。\n","externalUrl":null,"permalink":"/ch32v003_doc/5.ch32v00x_dbgmcu.h/","section":"CH32V00x的软件文档","summary":"该文件包含 DBGMCU（调试监控单元）固件库的所有函数原型与常量定义，用于在调试模式下控制外设行为，如暂停看门狗、定时器等，以方便开发与调试。DBGMCU 允许在 CPU 停止时保持某些外设的暂停状态，避免调试过程中触发意外复位或计数，是嵌入式调试环境中关键的低层控制接口。所有配置均通过写入调试控制寄存器（DEBUG_CR，地址 0x7C0）实现，该寄存器由 CPU 的 CSR 指令直接访问，具有极低的延迟和硬件级控制能力。","title":"ch32v00x_dbgmcu.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件定义了 CH32V00x 系列微控制器 DMA（直接存储器访问）外设的固件库函数原型、数据结构及常量宏。DMA 用于在不占用 CPU 资源的情况下实现外设与内存、内存与内存之间的高效数据传输，适用于高速数据采集、串口/ADC 缓冲、图像处理等场景。本库支持 7 个 DMA 通道，每个通道可独立配置传输方向、数据宽度、地址递增模式、优先级和循环模式，极大提升系统并发处理能力。\n常量 # DMA_data_transfer_direction # 指定 DMA 传输方向，决定外设与内存谁是源、谁是目标。\n在嵌入式系统中，通常外设（如 ADC、UART）作为数据源（SRC），内存作为目标（DST），但也可用于内存到内存的复制操作，如缓存刷新或数据搬移。\n名称 值 简述 DMA_DIR_PeripheralDST 0x00000010 外设为数据源，内存为目标（外设 → 内存） DMA_DIR_PeripheralSRC 0x00000000 内存为数据源，外设为目标（内存 → 外设） 以上所有值都强制转换为 uint32_t。\nDMA_peripheral_incremented_mode # 控制外设地址寄存器在每次传输后是否自增。\n适用于外设寄存器地址固定（如 ADC 数据寄存器）或需连续读取多个寄存器（如多通道 ADC）的场景。若地址不变，则可避免地址错误或重复读取。\n名称 值 简述 DMA_PeripheralInc_Enable 0x00000040 外设地址在每次传输后自动递增 DMA_PeripheralInc_Disable 0x00000000 外设地址保持不变 以上所有值都强制转换为 uint32_t。\nDMA_memory_incremented_mode # 控制内存地址寄存器在每次传输后是否自增。\n这是最常用模式，用于连续写入或读取数组、缓冲区。若禁用，则所有数据都写入/读取同一内存地址，通常用于单点寄存器操作或特殊硬件接口。\n名称 值 简述 DMA_MemoryInc_Enable 0x00000080 内存地址在每次传输后自动递增 DMA_MemoryInc_Disable 0x00000000 内存地址保持不变 以上所有值都强制转换为 uint32_t。\nDMA_peripheral_data_size # 定义外设端的数据宽度，影响单次传输的数据量。\n选择与外设寄存器实际宽度匹配的值可避免数据截断或对齐错误。例如，UART 发送缓冲区通常为字节，而 ADC 通常为半字（16 位）。\n名称 值 简述 DMA_PeripheralDataSize_Byte 0x00000000 外设数据宽度为 8 位（字节） DMA_PeripheralDataSize_HalfWord 0x00000100 外设数据宽度为 16 位（半字） DMA_PeripheralDataSize_Word 0x00000200 外设数据宽度为 32 位（字） 以上所有值都强制转换为 uint32_t。\nDMA_memory_data_size # 定义内存端的数据宽度，需与外设端匹配以保证传输一致性。\n若内存与外设宽度不一致，DMA 控制器会自动进行数据扩展或截断，但可能导致性能下降或数据错误，建议严格对齐。\n名称 值 简述 DMA_MemoryDataSize_Byte 0x00000000 内存数据宽度为 8 位（字节） DMA_MemoryDataSize_HalfWord 0x00000400 内存数据宽度为 16 位（半字） DMA_MemoryDataSize_Word 0x00000800 内存数据宽度为 32 位（字） 以上所有值都强制转换为 uint32_t。\nDMA_circular_normal_mode # 设置 DMA 传输模式，决定传输完成后是否自动重置并重复。\n循环模式适用于持续采集（如 ADC 连续采样、音频流），可避免 CPU 频繁干预；正常模式适用于一次性传输，完成后自动停止。\n名称 值 简述 DMA_Mode_Circular 0x00000020 传输完成后自动重置缓冲区指针，进入循环模式 DMA_Mode_Normal 0x00000000 传输完成后停止，需软件重新启动 以上所有值都强制转换为 uint32_t。\nDMA_priority_level # 设置 DMA 通道的软件优先级，用于多通道竞争时的调度。\n高优先级通道在总线冲突时优先获得访问权，适用于实时性要求高的外设（如高速串口、定时器触发 ADC）。低优先级通道适合后台数据搬运。\n名称 值 简述 DMA_Priority_VeryHigh 0x00003000 最高优先级，抢占其他通道 DMA_Priority_High 0x00002000 高优先级，优先于中低 DMA_Priority_Medium 0x00001000 中等优先级 DMA_Priority_Low 0x00000000 最低优先级，仅在总线空闲时执行 以上所有值都强制转换为 uint32_t。\nDMA_memory_to_memory # 启用或禁用内存到内存的传输模式。\n此模式下 DMA 不依赖外设，仅在两个内存区域间搬运数据，常用于快速内存拷贝、缓冲区交换等场景。注意：循环模式不支持内存到内存传输。\n名称 值 简述 DMA_M2M_Enable 0x00004000 启用内存到内存传输模式 DMA_M2M_Disable 0x00000000 禁用内存到内存传输（默认） 以上所有值都强制转换为 uint32_t。\nDMA_interrupts_definition # 定义 DMA 通道的中断使能位，用于触发中断服务函数。\n这些位与 DMA_ITConfig() 配合使用，可分别使能传输完成、半传输、传输错误中断，便于实现分段处理或错误恢复。\n名称 值 简述 DMA_IT_TC 0x00000002 传输完成中断使能 DMA_IT_HT 0x00000004 半传输中断使能（缓冲区一半完成） DMA_IT_TE 0x00000008 传输错误中断使能 以上所有值都强制转换为 uint32_t。\nDMA1_IT_GL1 至 DMA1_IT_TE7 # DMA1 每个通道的独立中断标志位，用于中断服务程序中判断具体中断源。\n每个通道有 4 个标志：全局（GL）、传输完成（TC）、半传输（HT）、传输错误（TE）。通过位掩码可快速定位中断来源，避免轮询。\n名称 值 简述 DMA1_IT_GL1 0x00000001 DMA1 通道1 全局中断标志 DMA1_IT_TC1 0x00000002 DMA1 通道1 传输完成中断标志 DMA1_IT_HT1 0x00000004 DMA1 通道1 半传输中断标志 DMA1_IT_TE1 0x00000008 DMA1 通道1 传输错误中断标志 DMA1_IT_GL2 0x00000010 DMA1 通道2 全局中断标志 DMA1_IT_TC2 0x00000020 DMA1 通道2 传输完成中断标志 DMA1_IT_HT2 0x00000040 DMA1 通道2 半传输中断标志 DMA1_IT_TE2 0x00000080 DMA1 通道2 传输错误中断标志 DMA1_IT_GL3 0x00000100 DMA1 通道3 全局中断标志 DMA1_IT_TC3 0x00000200 DMA1 通道3 传输完成中断标志 DMA1_IT_HT3 0x00000400 DMA1 通道3 半传输中断标志 DMA1_IT_TE3 0x00000800 DMA1 通道3 传输错误中断标志 DMA1_IT_GL4 0x00001000 DMA1 通道4 全局中断标志 DMA1_IT_TC4 0x00002000 DMA1 通道4 传输完成中断标志 DMA1_IT_HT4 0x00004000 DMA1 通道4 半传输中断标志 DMA1_IT_TE4 0x00008000 DMA1 通道4 传输错误中断标志 DMA1_IT_GL5 0x00010000 DMA1 通道5 全局中断标志 DMA1_IT_TC5 0x00020000 DMA1 通道5 传输完成中断标志 DMA1_IT_HT5 0x00040000 DMA1 通道5 半传输中断标志 DMA1_IT_TE5 0x00080000 DMA1 通道5 传输错误中断标志 DMA1_IT_GL6 0x00100000 DMA1 通道6 全局中断标志 DMA1_IT_TC6 0x00200000 DMA1 通道6 传输完成中断标志 DMA1_IT_HT6 0x00400000 DMA1 通道6 半传输中断标志 DMA1_IT_TE6 0x00800000 DMA1 通道6 传输错误中断标志 DMA1_IT_GL7 0x01000000 DMA1 通道7 全局中断标志 DMA1_IT_TC7 0x02000000 DMA1 通道7 传输完成中断标志 DMA1_IT_HT7 0x04000000 DMA1 通道7 半传输中断标志 DMA1_IT_TE7 0x08000000 DMA1 通道7 传输错误中断标志 以上所有值都强制转换为 uint32_t。\nDMA1_FLAG_GL1 至 DMA1_FLAG_TE7 # DMA1 每个通道的状态标志位，用于轮询查询传输状态。\n与中断标志位一一对应，但用于非中断模式下的状态检测，如轮询等待传输完成或检查错误。\n名称 值 简述 DMA1_FLAG_GL1 0x00000001 DMA1 通道1 全局状态标志 DMA1_FLAG_TC1 0x00000002 DMA1 通道1 传输完成状态标志 DMA1_FLAG_HT1 0x00000004 DMA1 通道1 半传输状态标志 DMA1_FLAG_TE1 0x00000008 DMA1 通道1 传输错误状态标志 DMA1_FLAG_GL2 0x00000010 DMA1 通道2 全局状态标志 DMA1_FLAG_TC2 0x00000020 DMA1 通道2 传输完成状态标志 DMA1_FLAG_HT2 0x00000040 DMA1 通道2 半传输状态标志 DMA1_FLAG_TE2 0x00000080 DMA1 通道2 传输错误状态标志 DMA1_FLAG_GL3 0x00000100 DMA1 通道3 全局状态标志 DMA1_FLAG_TC3 0x00000200 DMA1 通道3 传输完成状态标志 DMA1_FLAG_HT3 0x00000400 DMA1 通道3 半传输状态标志 DMA1_FLAG_TE3 0x00000800 DMA1 通道3 传输错误状态标志 DMA1_FLAG_GL4 0x00001000 DMA1 通道4 全局状态标志 DMA1_FLAG_TC4 0x00002000 DMA1 通道4 传输完成状态标志 DMA1_FLAG_HT4 0x00004000 DMA1 通道4 半传输状态标志 DMA1_FLAG_TE4 0x00008000 DMA1 通道4 传输错误状态标志 DMA1_FLAG_GL5 0x00010000 DMA1 通道5 全局状态标志 DMA1_FLAG_TC5 0x00020000 DMA1 通道5 传输完成状态标志 DMA1_FLAG_HT5 0x00040000 DMA1 通道5 半传输状态标志 DMA1_FLAG_TE5 0x00080000 DMA1 通道5 传输错误状态标志 DMA1_FLAG_GL6 0x00100000 DMA1 通道6 全局状态标志 DMA1_FLAG_TC6 0x00200000 DMA1 通道6 传输完成状态标志 DMA1_FLAG_HT6 0x00400000 DMA1 通道6 半传输状态标志 DMA1_FLAG_TE6 0x00800000 DMA1 通道6 传输错误状态标志 DMA1_FLAG_GL7 0x01000000 DMA1 通道7 全局状态标志 DMA1_FLAG_TC7 0x02000000 DMA1 通道7 传输完成状态标志 DMA1_FLAG_HT7 0x04000000 DMA1 通道7 半传输状态标志 DMA1_FLAG_TE7 0x08000000 DMA1 通道7 传输错误状态标志 以上所有值都强制转换为 uint32_t。\n枚举 # 无\n结构体 # DMA_InitTypeDef # DMA 通道初始化结构体，用于配置一次完整的 DMA 传输任务。\n该结构体封装了所有必要参数，通过 DMA_Init() 一次性写入寄存器，极大简化了配置流程。开发者只需填充结构体，无需直接操作寄存器，提高代码可读性与可移植性。\n名称 类型 简述 DMA_PeripheralBaseAddr uint32_t 外设寄存器的基地址，如 ADC1_DR、USART1_DR 等 DMA_MemoryBaseAddr uint32_t 内存缓冲区的起始地址，通常为数组或变量地址 DMA_DIR uint32_t 传输方向，参见 DMA_data_transfer_direction 宏定义 DMA_BufferSize uint32_t 传输的数据单元数量，每个单元大小由 DMA_PeripheralDataSize 或 DMA_MemoryDataSize 决定 DMA_PeripheralInc uint32_t 外设地址是否递增，参见 DMA_peripheral_incremented_mode DMA_MemoryInc uint32_t 内存地址是否递增，参见 DMA_memory_incremented_mode DMA_PeripheralDataSize uint32_t 外设数据宽度，参见 DMA_peripheral_data_size DMA_MemoryDataSize uint32_t 内存数据宽度，参见 DMA_memory_data_size DMA_Mode uint32_t 传输模式，循环或正常，参见 DMA_circular_normal_mode DMA_Priority uint32_t 通道优先级，参见 DMA_priority_level DMA_M2M uint32_t 是否启用内存到内存模式，参见 DMA_memory_to_memory 函数 # DMA_DeInit # void DMA_DeInit(DMA_Channel_TypeDef *DMAy_Channelx)\n将指定 DMA 通道的所有寄存器恢复为复位默认值，停止当前传输并清除所有中断标志。\n此函数通过清零控制寄存器和计数器实现重置，同时清除对应通道的中断挂起标志，确保通道处于干净状态，适合在重新配置前调用。\n参数：\n名称 类型 简述 DMAy_Channelx DMA_Channel_TypeDef * DMA 通道指针，y 为 1（仅支持 DMA1），x 为 1~7，如 DMA1_Channel1 返回值：\n无\nDMA_Init # void DMA_Init(DMA_Channel_TypeDef *DMAy_Channelx, DMA_InitTypeDef *DMA_InitStruct)\n根据传入的初始化结构体配置指定 DMA 通道的全部参数。\n此函数将结构体中的所有字段写入 DMA 控制寄存器（CFGR、CNTR、PADDR、MADDR），完成一次完整的通道配置。调用前必须确保时钟已使能（RCC），且结构体已正确初始化。\n参数：\n名称 类型 简述 DMAy_Channelx DMA_Channel_TypeDef * DMA 通道指针，如 DMA1_Channel3 DMA_InitStruct DMA_InitTypeDef * 指向已填充配置参数的结构体指针 返回值：\n无\nDMA_StructInit # void DMA_StructInit(DMA_InitTypeDef *DMA_InitStruct)\n将 DMA 初始化结构体的所有成员设置为默认值，便于快速初始化。\n此函数为开发者提供“安全起点”，避免因未初始化字段导致不可预测行为。默认配置为：内存到外设、字节宽度、低优先级、非循环、非内存到内存模式。\n参数：\n名称 类型 简述 DMA_InitStruct DMA_InitTypeDef * 待初始化的结构体指针 返回值：\n无\nDMA_Cmd # void DMA_Cmd(DMA_Channel_TypeDef *DMAy_Channelx, FunctionalState NewState)\n启用或禁用指定 DMA 通道的传输功能。\n仅在使能后，DMA 才会响应传输请求。禁用通道不会清除配置，仅暂停传输，适合动态启停（如按需触发 ADC 采样）。\n参数：\n名称 类型 简述 DMAy_Channelx DMA_Channel_TypeDef * DMA 通道指针，如 DMA1_Channel5 NewState FunctionalState ENABLE（启用）或 DISABLE（禁用） 返回值：\n无\nDMA_ITConfig # void DMA_ITConfig(DMA_Channel_TypeDef *DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState)\n启用或禁用指定 DMA 通道的中断源（传输完成、半传输、传输错误）。\n中断可触发中断服务函数（ISR），用于处理缓冲区满、数据错误或分段处理。注意：需在 NVIC 中使能对应中断线。\n参数：\n名称 类型 简述 DMAy_Channelx DMA_Channel_TypeDef * DMA 通道指针，如 DMA1_Channel2 DMA_IT uint32_t 中断源，如 DMA_IT_TC、DMA_IT_HT、DMA_IT_TE NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\nDMA_SetCurrDataCounter # void DMA_SetCurrDataCounter(DMA_Channel_TypeDef *DMAy_Channelx, uint16_t DataNumber)\n动态修改当前 DMA 通道的剩余数据计数器值。\n可用于运行时调整传输长度，如在循环模式中动态改变缓冲区大小，或在中断中重置剩余计数以实现自适应传输。\n参数：\n名称 类型 简述 DMAy_Channelx DMA_Channel_TypeDef * DMA 通道指针 DataNumber uint16_t 新的剩余数据单元数量（0~65535） 返回值：\n无\nDMA_GetCurrDataCounter # uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef *DMAy_Channelx)\n读取当前 DMA 通道剩余未传输的数据单元数量。\n可用于监控传输进度，如在循环模式中判断缓冲区填充程度，或在非循环模式中确认是否完成。\n参数：\n名称 类型 简述 DMAy_Channelx DMA_Channel_TypeDef * DMA 通道指针 返回值：\n当前剩余数据单元数（0 表示传输完成）\nDMA_GetFlagStatus # FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG)\n查询指定 DMA 标志位的状态（SET 或 RESET），用于轮询方式检测传输状态。\n适用于无中断系统或调试阶段，可判断是否完成、是否出错等。\n参数：\n名称 类型 简述 DMAy_FLAG uint32_t 标志位，如 DMA1_FLAG_TC3、DMA1_FLAG_TE1 返回值：\nSET（标志置位）或 RESET（标志清零）\nDMA_ClearFlag # void DMA_ClearFlag(uint32_t DMAy_FLAG)\n清除指定的 DMA 状态标志位。\n必须在处理完中断或轮询事件后手动清除，否则标志将一直置位，导致重复触发或误判。\n参数：\n名称 类型 简述 DMAy_FLAG uint32_t 要清除的标志，如 DMA1_FLAG_HT5 返回值：\n无\nDMA_GetITStatus # ITStatus DMA_GetITStatus(uint32_t DMAy_IT)\n查询指定 DMA 中断标志是否被触发（SET 或 RESET），用于中断服务函数中判断中断来源。\n与 DMA_GetFlagStatus 功能类似，但用于中断上下文，通常与 DMA_ClearITPendingBit 配合使用。\n参数：\n名称 类型 简述 DMAy_IT uint32_t 中断标志，如 DMA1_IT_TC4、DMA1_IT_TE7 返回值：\nSET（中断发生）或 RESET（未发生）\nDMA_ClearITPendingBit # void DMA_ClearITPendingBit(uint32_t DMAy_IT)\n清除指定的 DMA 中断挂起位，防止重复进入中断服务程序。\n在中断服务函数末尾必须调用此函数，否则中断会持续触发，导致系统死循环。\n参数：\n名称 类型 简述 DMAy_IT uint32_t 要清除的中断标志，如 DMA1_IT_TC2 返回值：\n无\n","externalUrl":null,"permalink":"/ch32v003_doc/6.ch32v00x_dma.h/","section":"CH32V00x的软件文档","summary":"该文件定义了 CH32V00x 系列微控制器 DMA（直接存储器访问）外设的固件库函数原型、数据结构及常量宏。DMA 用于在不占用 CPU 资源的情况下实现外设与内存、内存与内存之间的高效数据传输，适用于高速数据采集、串口/ADC 缓冲、图像处理等场景。本库支持 7 个 DMA 通道，每个通道可独立配置传输方向、数据宽度、地址递增模式、优先级和循环模式，极大提升系统并发处理能力。","title":"ch32v00x_dma.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含外部中断（EXTI）固件库的所有函数原型与数据类型定义，用于配置和管理微控制器的外部中断与事件线。EXTI 模块允许将 GPIO 引脚或其他片上事件（如 PVD 输出、电源唤醒）映射为独立的中断或事件通道，支持边沿触发（上升沿、下降沿或双边沿）和中断/事件模式分离，实现低功耗下的高效事件响应。所有配置通过结构体初始化和寄存器位操作完成，符合标准外设库设计范式。\n常量 # EXTI_LINENONE # 无中断选择\n用于结构体初始化时的默认值，表示未启用任何中断线。在 EXTI_StructInit() 中被用作初始值，确保未显式配置的线路处于禁用状态，避免意外触发。\n名称 值 简述 EXTI_LINENONE 0x00000 表示无任何外部中断线被选中 以上所有值都强制转换为 uint32_t。\nEXTI_Lines # 外部中断线定义\n每个宏代表一个可独立配置的外部中断/事件通道，支持位掩码组合，允许同时启用多个线路。部分线路与片上外设（如PVD、电源唤醒）绑定，实现系统级事件联动。\n名称 值 简述 EXTI_Line0 0x00001 外部中断线 0 EXTI_Line1 0x00002 外部中断线 1 EXTI_Line2 0x00004 外部中断线 2 EXTI_Line3 0x00008 外部中断线 3 EXTI_Line4 0x00010 外部中断线 4 EXTI_Line5 0x00020 外部中断线 5 EXTI_Line6 0x00040 外部中断线 6 EXTI_Line7 0x00080 外部中断线 7 EXTI_Line8 0x00100 外部中断线 8，连接到PVD输出 EXTI_Line9 0x00200 外部中断线 9，连接到电源自动唤醒事件 以上所有值都强制转换为 uint32_t。\n枚举 # EXTIMode_TypeDef # 外部中断模式选择\n定义中断线的工作模式：中断模式（触发CPU中断）或事件模式（仅触发脉冲，不触发中断，常用于唤醒或触发DMA）。两者互斥，需根据应用需求选择。\n名称 值 简述 EXTI_Mode_Interrupt 0x00 配置为中断模式，触发时产生CPU中断 EXTI_Mode_Event 0x04 配置为事件模式，仅生成脉冲信号，不中断CPU EXTITrigger_TypeDef # 触发边沿类型选择\n定义中断或事件的触发条件，支持单边沿或双边沿触发。双边沿触发适用于按键抖动消除或双向信号检测等场景。\n名称 值 简述 EXTI_Trigger_Rising 0x08 上升沿触发 EXTI_Trigger_Falling 0x0C 下降沿触发 EXTI_Trigger_Rising_Falling 0x10 上升沿和下降沿均触发（双边沿） 结构体 # EXTI_InitTypeDef # EXTI 初始化结构体定义\n用于集中配置一条或多条外部中断线的参数，通过 EXTI_Init() 函数写入硬件寄存器。结构体字段支持组合配置，允许灵活控制中断行为。\n名称 类型 简述 EXTI_Line uint32_t 指定要配置的EXTI线路，可为多个 EXTI_LineX 的位或组合（如 `EXTI_Line0 EXTI_Mode EXTIMode_TypeDef 选择中断或事件模式，决定是否触发CPU中断 EXTI_Trigger EXTITrigger_TypeDef 设置触发边沿类型，支持上升、下降或双边沿 EXTI_LineCmd FunctionalState 启用或禁用指定线路，ENABLE 开启，DISABLE 关闭 FunctionalState 为标准库类型，定义为 ENABLE（1）和 DISABLE（0）。\n函数 # EXTI_DeInit # void EXTI_DeInit(void)\n将所有EXTI寄存器恢复为复位默认值，禁用所有中断和事件线路，清除挂起标志。此函数用于系统初始化或错误恢复时彻底重置EXTI模块，避免遗留配置干扰。\n参数：\n无\n返回值：\n无\nEXTI_Init # void EXTI_Init(EXTI_InitTypeDef *EXTI_InitStruct)\n根据传入的初始化结构体配置EXTI外设。支持动态启用/禁用线路、设置触发模式和边沿类型。内部通过地址偏移计算访问对应的中断使能、事件使能、上升沿/下降沿触发寄存器，实现高效位操作。若 EXTI_LineCmd 为 DISABLE，则仅禁用线路而不修改触发配置。\n参数：\n名称 类型 简述 EXTI_InitStruct EXTI_InitTypeDef * 指向包含配置参数的结构体指针 返回值：\n无\nEXTI_StructInit # void EXTI_StructInit(EXTI_InitTypeDef *EXTI_InitStruct)\n将EXTI初始化结构体的所有成员设置为默认复位值：禁用所有线路、使用下降沿触发、中断模式。用于在调用 EXTI_Init() 前清空结构体，避免未初始化变量导致的不可预测行为。\n参数：\n名称 类型 简述 EXTI_InitStruct EXTI_InitTypeDef * 指向待初始化的结构体指针 返回值：\n无\nEXTI_GenerateSWInterrupt # void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line)\n软件生成指定EXTI线路的中断请求，模拟硬件触发。常用于测试中断服务例程（ISR）或在无外部信号时触发事件。写入 SWIEVR 寄存器即可触发，无需硬件引脚变化。\n参数：\n名称 类型 简述 EXTI_Line uint32_t 要触发的EXTI线路掩码（如 EXTI_Line0） 返回值：\n无\nEXTI_GetFlagStatus # FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)\n读取指定EXTI线路的挂起标志状态，用于轮询方式判断是否发生中断事件。返回值为 SET（已挂起）或 RESET（未挂起），仅反映硬件标志位，不检查中断是否使能。\n参数：\n名称 类型 简述 EXTI_Line uint32_t 要查询的EXTI线路掩码 返回值：\nFlagStatus 类型，表示线路是否挂起（SET 或 RESET）\nEXTI_ClearFlag # void EXTI_ClearFlag(uint32_t EXTI_Line)\n清除指定EXTI线路的挂起标志。必须在中断服务函数中调用此函数，否则中断会持续触发。写入 INTFR 寄存器的对应位可自动清除标志，为写1清零机制。\n参数：\n名称 类型 简述 EXTI_Line uint32_t 要清除的EXTI线路掩码 返回值：\n无\nEXTI_GetITStatus # ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)\n综合判断指定EXTI线路是否被触发并使能。需同时满足两个条件：1）挂起标志为 SET；2）中断使能位（INTENR）为 1。适用于中断服务入口前的条件判断，避免误判事件模式触发。\n参数：\n名称 类型 简述 EXTI_Line uint32_t 要检查的EXTI线路掩码 返回值：\nITStatus 类型，表示中断是否有效触发（SET 或 RESET）\nEXTI_ClearITPendingBit # void EXTI_ClearITPendingBit(uint32_t EXTI_Line)\n清除指定EXTI线路的中断挂起位，与 EXTI_ClearFlag() 功能完全相同。此函数为语义化命名，专用于中断服务中清除中断标志，提高代码可读性。\n参数：\n名称 类型 简述 EXTI_Line uint32_t 要清除的EXTI线路掩码 返回值：\n无\n","externalUrl":null,"permalink":"/ch32v003_doc/7.ch32v00x_exti.h/","section":"CH32V00x的软件文档","summary":"该文件包含外部中断（EXTI）固件库的所有函数原型与数据类型定义，用于配置和管理微控制器的外部中断与事件线。EXTI 模块允许将 GPIO 引脚或其他片上事件（如 PVD 输出、电源唤醒）映射为独立的中断或事件通道，支持边沿触发（上升沿、下降沿或双边沿）和中断/事件模式分离，实现低功耗下的高效事件响应。所有配置通过结构体初始化和寄存器位操作完成，符合标准外设库设计范式。","title":"ch32v00x_exti.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件定义了 CH32V00x 系列微控制器 Flash 存储器固件库的所有常量、枚举、结构体声明及函数原型，涵盖 Flash 操作的核心功能，包括擦除、编程、写保护、选项字配置、中断与状态管理。所有操作均通过直接访问 Flash 控制寄存器实现，支持标准模式与高速模式，适用于系统启动配置、固件升级、参数存储等关键应用场景。本库特别针对 CH32V00x 的 64 字节页大小架构优化，提供细粒度控制能力，同时集成读保护、写保护、复位行为等安全选项，确保嵌入式系统在断电或异常情况下的数据完整性与安全性。\n常量 # Flash_Latency # Flash 访问延迟配置，用于平衡性能与功耗。延迟周期数越高，Flash 读取速度越慢，但系统在高主频下更稳定。\n名称 值 简述 FLASH_Latency_0 0x00000000 Flash 零延迟周期 FLASH_Latency_1 0x00000001 Flash 一个延迟周期 FLASH_Latency_2 0x00000002 Flash 两个延迟周期 以上所有值都强制转换为 uint32_t\nFLASH_WRProt_Pages # Flash 写保护页掩码，用于设置特定页范围的写保护。每个位对应一组连续的 64 字节页（CH32V00x 为 64B/页），支持按块启用写保护。\n名称 值 简述 FLASH_WRProt_Pages0to15 0x00000001 写保护页 0 至 15 FLASH_WRProt_Pages16to31 0x00000002 写保护页 16 至 31 FLASH_WRProt_Pages32to47 0x00000004 写保护页 32 至 47 FLASH_WRProt_Pages48to63 0x00000008 写保护页 48 至 63 FLASH_WRProt_Pages64to79 0x00000010 写保护页 64 至 79 FLASH_WRProt_Pages80to95 0x00000020 写保护页 80 至 95 FLASH_WRProt_Pages96to111 0x00000040 写保护页 96 至 111 FLASH_WRProt_Pages112to127 0x00000080 写保护页 112 至 127 FLASH_WRProt_Pages128to143 0x00000100 写保护页 128 至 143（中密度） FLASH_WRProt_Pages144to159 0x00000200 写保护页 144 至 159（中密度） FLASH_WRProt_Pages160to175 0x00000400 写保护页 160 至 175（中密度） FLASH_WRProt_Pages176to191 0x00000800 写保护页 176 至 191（中密度） FLASH_WRProt_Pages192to207 0x00001000 写保护页 192 至 207（中密度） FLASH_WRProt_Pages208to223 0x00002000 写保护页 208 至 223（中密度） FLASH_WRProt_Pages224to239 0x00004000 写保护页 224 至 239（中密度） FLASH_WRProt_Pages240to255 0x00008000 写保护页 240 至 255（中密度） FLASH_WRProt_AllPages 0x0000FFFF 写保护所有页（16位掩码，覆盖全部256页） 以上所有值都强制转换为 uint32_t\nOption_Bytes_IWatchdog # 独立看门狗（IWDG）模式选择，决定看门狗由软件还是硬件控制。\n名称 值 简述 OB_IWDG_SW 0x0001 软件看门狗（可由程序关闭） OB_IWDG_HW 0x0000 硬件看门狗（不可关闭，增强系统可靠性） 以上所有值都强制转换为 uint16_t\nOption_Bytes_nRST_STOP # 进入 STOP 模式时是否产生复位。\n名称 值 简述 OB_STOP_NoRST 0x0002 进入 STOP 模式不复位（保持状态） OB_STOP_RST 0x0000 进入 STOP 模式时复位系统 以上所有值都强制转换为 uint16_t\nOption_Bytes_nRST_STDBY # 进入 STANDBY 模式时是否产生复位。\n名称 值 简述 OB_STDBY_NoRST 0x0004 进入 STANDBY 模式不复位 OB_STDBY_RST 0x0000 进入 STANDBY 模式时复位系统 以上所有值都强制转换为 uint16_t\nOption_Bytes_RST_ENandDT # 复位引脚（PD7）使能及复位延迟时间配置。\n名称 值 简述 OB_RST_NoEN 0x0018 禁用复位引脚（PD7） OB_RST_EN_DT12ms 0x0010 启用复位引脚，延迟 12ms OB_RST_EN_DT1ms 0x0008 启用复位引脚，延迟 1ms OB_RST_EN_DT128us 0x0000 启用复位引脚，延迟 128us 以上所有值都强制转换为 uint16_t\nOption_Bytes_Power_ON_Start_Mode # 上电启动模式选择，决定系统复位后从用户区还是 Boot 区启动。\n名称 值 简述 OB_PowerON_Start_Mode_BOOT 0x0020 上电后从 Boot 区启动（用于固件更新） OB_PowerON_Start_Mode_USER 0x0000 上电后从用户程序区启动（正常运行模式） 以上所有值都强制转换为 uint16_t\nFLASH_Interrupts # Flash 操作中断源标识符，用于使能或禁用中断。\n名称 值 简述 FLASH_IT_ERROR 0x00000400 Flash 错误中断源（如写保护、地址错误） FLASH_IT_EOP 0x00001000 Flash 操作完成中断源（擦除/编程结束） FLASH_IT_BANK1_ERROR FLASH_IT_ERROR Bank1 错误中断（与 FLASH_IT_ERROR 相同） FLASH_IT_BANK1_EOP FLASH_IT_EOP Bank1 操作完成中断（与 FLASH_IT_EOP 相同） 以上所有值都强制转换为 uint32_t\nFLASH_Flags # Flash 状态标志位，用于查询操作状态或清除标志。\n名称 值 简述 FLASH_FLAG_BSY 0x00000001 Flash 忙标志（操作进行中） FLASH_FLAG_EOP 0x00000020 Flash 操作结束标志 FLASH_FLAG_WRPRTERR 0x00000010 Flash 写保护错误标志 FLASH_FLAG_OPTERR 0x00000001 Flash 选项字错误标志（如选项字写入失败） FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY Bank1 忙标志（与 FLASH_FLAG_BSY 相同） FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP Bank1 操作结束标志（与 FLASH_FLAG_EOP 相同） FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR Bank1 写保护错误标志（与 FLASH_FLAG_WRPRTERR 相同） 以上所有值都强制转换为 uint32_t\nSystem_Reset_Start_Mode # 系统复位后的启动模式，通过寄存器位控制。\n名称 值 简述 Start_Mode_USER 0x00000000 复位后从用户程序区启动 Start_Mode_BOOT 0x00004000 复位后从 Boot 区启动 以上所有值都强制转换为 uint32_t\n枚举 # FLASH_Status # Flash 操作状态返回值，所有函数均返回此枚举类型以指示操作结果。\n名称 值 简述 FLASH_BUSY 1 Flash 正在执行操作（忙） FLASH_ERROR_PG 2 编程错误（如地址无效、未解锁） FLASH_ERROR_WRP 3 写保护错误（尝试写入受保护区域） FLASH_COMPLETE 4 操作成功完成 FLASH_TIMEOUT 5 操作超时（未在规定时间内完成） FLASH_OP_RANGE_ERROR 0xFD 操作范围超出 Flash 地址空间 FLASH_ALIGN_ERROR 0xFE 地址未对齐（必须为 64 字节对齐） FLASH_ADR_RANGE_ERROR 0xFF 起始地址超出有效 Flash 区域 结构体 # FLASH_InitTypeDef # 无此结构体。CH32V00x Flash 库未定义初始化结构体，所有配置通过直接调用函数完成，如 FLASH_SetLatency()、FLASH_UserOptionByteConfig() 等，采用“函数式配置”而非“结构体配置”风格，简化了接口但要求开发者明确掌握寄存器含义。\n函数 # FLASH_SetLatency # void FLASH_SetLatency(uint32_t FLASH_Latency)\n设置 Flash 访问延迟周期，以匹配系统时钟频率。延迟周期数需根据主频调整，否则可能导致指令预取错误或系统崩溃。\n参数：\n名称 类型 简述 FLASH_Latency uint32_t 延迟周期值，取值为 FLASH_Latency_0、FLASH_Latency_1 或 FLASH_Latency_2 返回值：\n无\nFLASH_Unlock # void FLASH_Unlock(void)\n解锁 Flash 程序/擦除控制器（FPEC），允许后续写入或擦除操作。必须在执行任何编程/擦除前调用，否则操作将被忽略。\n参数：\n无\n返回值：\n无\nFLASH_Lock # void FLASH_Lock(void)\n锁定 Flash 程序/擦除控制器，防止意外写入或擦除。建议在完成所有 Flash 操作后立即调用，增强系统安全性。\n参数：\n无\n返回值：\n无\nFLASH_ErasePage # FLASH_Status FLASH_ErasePage(uint32_t Page_Address)\n擦除指定地址所在的 Flash 页（64 字节）。地址必须为 64 字节对齐，否则行为未定义。\n参数：\n名称 类型 简述 Page_Address uint32_t 要擦除的页起始地址，必须为 64 字节对齐（如 0x08000000、0x08000040） 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_EraseAllPages # FLASH_Status FLASH_EraseAllPages(void)\n擦除整个 Flash 存储器（所有页）。此操作不可逆，会清除所有用户程序与数据，仅在固件更新或安全清除时使用。\n参数：\n无\n返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_EraseOptionBytes # FLASH_Status FLASH_EraseOptionBytes(void)\n擦除所有选项字节（包括读保护、写保护、复位配置等）。擦除后所有选项字恢复默认值（如读保护关闭、IWDG 为硬件模式）。\n参数：\n无\n返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_ProgramWord # FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data)\n在指定地址写入一个 32 位字（4 字节）。地址必须为 4 字节对齐，且 Flash 必须已擦除（写入前必须为 0xFFFFFFFF）。\n参数：\n名称 类型 简述 Address uint32_t 目标地址，必须为 4 字节对齐 Data uint32_t 要写入的 32 位数据 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_PG、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_ProgramHalfWord # FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)\n在指定地址写入一个 16 位半字（2 字节）。地址必须为 2 字节对齐。\n参数：\n名称 类型 简述 Address uint32_t 目标地址，必须为 2 字节对齐 Data uint16_t 要写入的 16 位数据 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_PG、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_ProgramOptionByteData # FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)\n向选项字节区域写入单字节数据。通常用于配置 IWDG、复位行为等选项字。\n参数：\n名称 类型 简述 Address uint32_t 选项字节地址（如 OB-\u0026gt;WRPR0、OB-\u0026gt;RDPR） Data uint8_t 要写入的 8 位数据 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_PG、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_EnableWriteProtection # FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages)\n启用指定页范围的写保护。写保护后，这些页将无法被擦除或编程，直到通过 FLASH_EraseOptionBytes() 清除保护。\n参数：\n名称 类型 简述 FLASH_Pages uint32_t 要写保护的页掩码，使用 FLASH_WRProt_PagesXtoY 组合（如 `FLASH_WRProt_Pages0to15 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_PG、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_ReadOutProtection # FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState)\n启用或禁用 Flash 读保护。启用后，外部调试器无法读取 Flash 内容，且无法通过编程方式擦除 Flash，除非先执行全片擦除。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE 启用读保护，DISABLE 禁用读保护 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_UserOptionByteConfig # FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STDBY, uint16_t OB_RST, uint16_t OB_PowerON_Start_Mode)\n一次性配置所有用户选项字：看门狗模式、STOP/STANDBY 复位行为、复位引脚延迟、上电启动模式。\n参数：\n名称 类型 简述 OB_IWDG uint16_t IWDG 模式，取值为 OB_IWDG_SW 或 OB_IWDG_HW OB_STDBY uint16_t STANDBY 模式复位行为，取值为 OB_STDBY_NoRST 或 OB_STDBY_RST OB_RST uint16_t 复位引脚配置，取值为 OB_RST_NoEN、OB_RST_EN_DT12ms、OB_RST_EN_DT1ms、OB_RST_EN_DT128us OB_PowerON_Start_Mode uint16_t 上电启动模式，取值为 OB_PowerON_Start_Mode_BOOT 或 OB_PowerON_Start_Mode_USER 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_ERROR_PG、FLASH_ERROR_WRP、FLASH_TIMEOUT 等）\nFLASH_GetUserOptionByte # uint32_t FLASH_GetUserOptionByte(void)\n读取当前用户选项字的值，包含 IWDG、STOP、STANDBY 配置位。\n参数：\n无\n返回值：\n用户选项字值（Bit0=IWDG, Bit1=STOP, Bit2=STDBY）\nFLASH_GetWriteProtectionOptionByte # uint32_t FLASH_GetWriteProtectionOptionByte(void)\n读取当前写保护配置寄存器的值，返回各页的写保护状态。\n参数：\n无\n返回值：\n写保护选项字值（每一位对应一组页的保护状态）\nFLASH_GetReadOutProtectionStatus # FlagStatus FLASH_GetReadOutProtectionStatus(void)\n检查当前是否启用了 Flash 读保护。\n参数：\n无\n返回值：\nSET 表示读保护已启用，RESET 表示未启用\nFLASH_ITConfig # void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState)\n使能或禁用 Flash 操作中断（EOP 或 ERROR）。需配合 NVIC 配置中断向量。\n参数：\n名称 类型 简述 FLASH_IT uint32_t 中断源，取值为 FLASH_IT_EOP 或 FLASH_IT_ERROR NewState FunctionalState ENABLE 使能，DISABLE 禁用 返回值：\n无\nFLASH_GetFlagStatus # FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG)\n查询 Flash 状态标志位，用于轮询操作状态。\n参数：\n名称 类型 简述 FLASH_FLAG uint32_t 要查询的标志，如 FLASH_FLAG_BSY、FLASH_FLAG_EOP、FLASH_FLAG_OPTERR 返回值：\nSET 表示标志置位，RESET 表示标志清零\nFLASH_ClearFlag # void FLASH_ClearFlag(uint32_t FLASH_FLAG)\n清除 Flash 操作完成或错误标志。必须在中断服务程序中调用，以清除中断源。\n参数：\n名称 类型 简述 FLASH_FLAG uint32_t 要清除的标志，如 FLASH_FLAG_EOP、FLASH_FLAG_WRPRTERR 返回值：\n无\nFLASH_GetStatus # FLASH_Status FLASH_GetStatus(void)\n获取 Flash 当前操作状态（忙、错误、完成）。适用于轮询模式。\n参数：\n无\n返回值：\nFlash 操作状态（FLASH_BUSY、FLASH_ERROR_WRP、FLASH_COMPLETE）\nFLASH_WaitForLastOperation # FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)\n等待 Flash 操作完成，或超时返回。用于同步等待擦除/编程结束，避免立即读取未完成的数据。\n参数：\n名称 类型 简述 Timeout uint32_t 最大等待循环次数，超时后返回 FLASH_TIMEOUT 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_BUSY、FLASH_TIMEOUT）\nFLASH_Unlock_Fast # void FLASH_Unlock_Fast(void)\n解锁 Flash 高速编程模式，允许使用 FLASH_BufLoad、FLASH_ProgramPage_Fast 等高速函数。\n参数：\n无\n返回值：\n无\nFLASH_Lock_Fast # void FLASH_Lock_Fast(void)\n锁定 Flash 高速编程模式，防止意外使用高速操作。\n参数：\n无\n返回值：\n无\nFLASH_BufReset # void FLASH_BufReset(void)\n重置 Flash 缓冲区，清空内部写入缓存，为下一次批量写入做准备。\n参数：\n无\n返回值：\n无\nFLASH_BufLoad # void FLASH_BufLoad(uint32_t Address, uint32_t Data0)\n将 4 字节数据加载到 Flash 缓冲区，用于后续高速编程。地址必须在有效范围内。\n参数：\n名称 类型 简述 Address uint32_t 目标地址（64 字节对齐） Data0 uint32_t 要加载到缓冲区的 32 位数据 返回值：\n无\nFLASH_ErasePage_Fast # void FLASH_ErasePage_Fast(uint32_t Page_Address)\n使用高速模式擦除指定页（64 字节）。比 FLASH_ErasePage 更快，但必须先调用 FLASH_Unlock_Fast()。\n参数：\n名称 类型 简述 Page_Address uint32_t 要擦除的页地址（64 字节对齐） 返回值：\n无\nFLASH_ProgramPage_Fast # void FLASH_ProgramPage_Fast(uint32_t Page_Address)\n使用高速模式编程指定页（64 字节）。必须先调用 FLASH_BufLoad 加载数据，再调用此函数。\n参数：\n名称 类型 简述 Page_Address uint32_t 要编程的页地址（64 字节对齐） 返回值：\n无\nSystemReset_StartMode # void SystemReset_StartMode(uint32_t Mode)\n配置系统复位后的启动模式（用户区或 Boot 区），通过修改 Flash 的 BOOT_MODE 寄存器实现。\n参数：\n名称 类型 简述 Mode uint32_t 启动模式，取值为 Start_Mode_USER 或 Start_Mode_BOOT 返回值：\n无\nFLASH_ROM_ERASE # FLASH_Status FLASH_ROM_ERASE(uint32_t StartAddr, uint32_t Length)\n擦除指定地址范围的 Flash，支持 64 字节和 1KB 两种粒度自动混合擦除。地址和长度必须为 64 字节对齐。\n参数：\n名称 类型 简述 StartAddr uint32_t 擦除起始地址，必须为 64 字节对齐 Length uint32_t 擦除长度（字节），必须为 64 字节对齐且 \u0026gt;0 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_ADR_RANGE_ERROR、FLASH_ALIGN_ERROR、FLASH_OP_RANGE_ERROR）\nFLASH_ROM_WRITE # FLASH_Status FLASH_ROM_WRITE(uint32_t StartAddr, uint32_t *pbuf, uint32_t Length)\n向 Flash 编程指定长度的数据块，使用 64 字节缓冲区批量写入，效率高于逐字写入。地址和长度必须为 64 字节对齐。\n参数：\n名称 类型 简述 StartAddr uint32_t 写入起始地址，必须为 64 字节对齐 pbuf uint32_t * 指向数据缓冲区的指针（32 位对齐） Length uint32_t 写入数据长度（字节），必须为 64 字节对齐且 \u0026gt;0 返回值：\nFlash 操作状态（FLASH_COMPLETE、FLASH_ADR_RANGE_ERROR、FLASH_ALIGN_ERROR、FLASH_OP_RANGE_ERROR）\n","externalUrl":null,"permalink":"/ch32v003_doc/8.ch32v00x_flash.h/","section":"CH32V00x的软件文档","summary":"该文件定义了 CH32V00x 系列微控制器 Flash 存储器固件库的所有常量、枚举、结构体声明及函数原型，涵盖 Flash 操作的核心功能，包括擦除、编程、写保护、选项字配置、中断与状态管理。所有操作均通过直接访问 Flash 控制寄存器实现，支持标准模式与高速模式，适用于系统启动配置、固件升级、参数存储等关键应用场景。本库特别针对 CH32V00x 的 64 字节页大小架构优化，提供细粒度控制能力，同时集成读保护、写保护、复位行为等安全选项，确保嵌入式系统在断电或异常情况下的数据完整性与安全性。","title":"ch32v00x_flash.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含 CH32V00x 系列微控制器 GPIO 固件库的所有函数原型、常量定义、枚举类型和结构体定义。本库提供对 GPIO 引脚的初始化、读写、复用映射、外部中断配置等完整控制功能，支持推挽输出、开漏输出、上拉/下拉输入、模拟输入等多种工作模式，并兼容复用功能（AF）和引脚重映射（Remap）机制。所有引脚操作均基于位掩码设计，支持单引脚或组合引脚操作，适用于嵌入式系统中对 I/O 端口的高效、精确控制。\n常量 # GPIO_pins_define # GPIO 引脚选择掩码，每个引脚对应一个独立的位掩码，支持组合使用（如 GPIO_Pin_0 | GPIO_Pin_2）以同时配置多个引脚。GPIO_Pin_All 用于一次性配置所有可用引脚（0~7），适用于初始化或复位场景。该设计兼容标准 STM32 GPIO 模型，便于代码移植。\n名称 值 简述 GPIO_Pin_0 0x0001 选择引脚 0 GPIO_Pin_1 0x0002 选择引脚 1 GPIO_Pin_2 0x0004 选择引脚 2 GPIO_Pin_3 0x0008 选择引脚 3 GPIO_Pin_4 0x0010 选择引脚 4 GPIO_Pin_5 0x0020 选择引脚 5 GPIO_Pin_6 0x0040 选择引脚 6 GPIO_Pin_7 0x0080 选择引脚 7 GPIO_Pin_All 0xFFFF 选择所有引脚（0~7） 以上所有值都强制转换为 uint16_t\nGPIO_Remap_define # 引脚复用映射配置常量，用于重新映射外设信号到其他 GPIO 引脚，实现灵活的 PCB 布局。每个映射常量包含位置信息与映射类型，通过 GPIO_PinRemapConfig() 函数启用或禁用。部分映射（如 I2C1、USART1、TIM1/2）支持部分重映射（Partial）和完全重映射（Full），以适应不同封装引脚分布。GPIO_Remap_SDI_Disable 用于禁用 SDI 功能，避免与用户引脚冲突。\n名称 值 简述 GPIO_Remap_SPI1 0x00000001 SPI1 重映射 GPIO_PartialRemap_I2C1 0x10000002 I2C1 部分重映射 GPIO_FullRemap_I2C1 0x10400002 I2C1 完全重映射 GPIO_PartialRemap1_USART1 0x80000004 USART1 部分重映射1 GPIO_PartialRemap2_USART1 0x80200000 USART1 部分重映射2 GPIO_FullRemap_USART1 0x80200004 USART1 完全重映射 GPIO_PartialRemap1_TIM1 0x00160040 TIM1 部分重映射1 GPIO_PartialRemap2_TIM1 0x00160080 TIM1 部分重映射2 GPIO_FullRemap_TIM1 0x001600C0 TIM1 完全重映射 GPIO_PartialRemap1_TIM2 0x00180100 TIM2 部分重映射1 GPIO_PartialRemap2_TIM2 0x00180200 TIM2 部分重映射2 GPIO_FullRemap_TIM2 0x00180300 TIM2 完全重映射 GPIO_Remap_PA1PA2 0x00008000 PA1 和 PA2 重映射 GPIO_Remap_ADC1_ETRGINJ 0x00200002 ADC1 注入通道外部触发重映射 GPIO_Remap_ADC1_ETRGREG 0x00200004 ADC1 常规通道外部触发重映射 GPIO_Remap_LSI_CAL 0x00200080 LSI 校准信号重映射 GPIO_Remap_SDI_Disable 0x00300400 禁用 SDI 功能 GPIO_Remap_PA1_2 GPIO_Remap_PA1PA2 GPIO_Remap_PA1PA2 的别名 以上所有值都强制转换为 uint32_t\nGPIO_Port_Sources # 外部中断（EXTI）或事件输出（Event Output）的端口源选择，用于指定哪个 GPIO 端口作为 EXTI 线的输入源。仅支持 A、C、D 三个端口，B 端口未被定义，可能因芯片引脚限制或功能保留。\n名称 值 简述 GPIO_PortSourceGPIOA 0x00 选择 GPIOA 作为端口源 GPIO_PortSourceGPIOC 0x02 选择 GPIOC 作为端口源 GPIO_PortSourceGPIOD 0x03 选择 GPIOD 作为端口源 以上所有值都强制转换为 uint8_t\nGPIO_Pin_sources # 外部中断（EXTI）的引脚源选择，与 GPIO_Port_Sources 配合使用，指定具体哪一位（07）连接到 EXTI 线。每个引脚源对应一个 EXTI 线（EXTI0EXTI7），实现独立中断触发。\n名称 值 简述 GPIO_PinSource0 0x00 选择引脚 0 作为 EXTI 源 GPIO_PinSource1 0x01 选择引脚 1 作为 EXTI 源 GPIO_PinSource2 0x02 选择引脚 2 作为 EXTI 源 GPIO_PinSource3 0x03 选择引脚 3 作为 EXTI 源 GPIO_PinSource4 0x04 选择引脚 4 作为 EXTI 源 GPIO_PinSource5 0x05 选择引脚 5 作为 EXTI 源 GPIO_PinSource6 0x06 选择引脚 6 作为 EXTI 源 GPIO_PinSource7 0x07 选择引脚 7 作为 EXTI 源 以上所有值都强制转换为 uint8_t\n枚举 # GPIOSpeed_TypeDef # 输出引脚的最大切换频率配置，直接影响驱动能力和功耗。频率越高，驱动能力越强，但电磁干扰（EMI）和功耗也越高。GPIO_Speed_50MHz 是对 GPIO_Speed_30MHz 的别名，用于兼容部分文档或代码习惯，实际硬件最大支持 30MHz。\n名称 值 GPIO_Speed_10MHz 1 GPIO_Speed_2MHz 2 GPIO_Speed_30MHz 3 GPIOMode_TypeDef # GPIO 引脚工作模式配置，决定引脚的电气行为。输入模式（AIN、IN_FLOATING、IPD、IPU）用于读取外部信号；输出模式（Out_OD、Out_PP）用于驱动负载；复用模式（AF_OD、AF_PP）用于连接内部外设（如 UART、SPI）。注意：GPIO_Mode_AIN 会禁用数字输入缓冲器，适用于模拟采集场景。\n名称 值 GPIO_Mode_AIN 0x0 GPIO_Mode_IN_FLOATING 0x04 GPIO_Mode_IPD 0x28 GPIO_Mode_IPU 0x48 GPIO_Mode_Out_OD 0x14 GPIO_Mode_Out_PP 0x10 GPIO_Mode_AF_OD 0x1C GPIO_Mode_AF_PP 0x18 BitAction # 位操作状态枚举，用于 GPIO_WriteBit() 等函数中指定写入值。Bit_SET 表示置高（输出 1），Bit_RESET 表示置低（输出 0），与标准库命名一致，提高代码可读性。\n名称 值 Bit_RESET 0 Bit_SET 1 结构体 # GPIO_InitTypeDef # GPIO 初始化结构体，用于批量配置一个或多个引脚的模式、速度和引脚选择。该结构体是 GPIO_Init() 函数的唯一输入参数，通过 GPIO_StructInit() 可初始化为默认值（浮空输入、2MHz 速度、所有引脚），便于快速配置。\n名称 类型 简述 GPIO_Pin uint16_t 指定要配置的 GPIO 引脚，可为 GPIO_Pin_0~GPIO_Pin_7 的组合或 GPIO_Pin_All GPIO_Speed GPIOSpeed_TypeDef 指定引脚输出速度，影响驱动能力和功耗 GPIO_Mode GPIOMode_TypeDef 指定引脚工作模式，决定电气行为（输入/输出/复用） 函数 # GPIO_DeInit # void GPIO_DeInit(GPIO_TypeDef *GPIOx)\n将指定 GPIO 外设（A、C、D）的所有寄存器恢复为复位默认值。通过复位时钟实现，而非直接写寄存器，确保完全清除所有配置状态，避免残留设置干扰新配置。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要复位的 GPIO 外设，x 可为 A、C、D（B 未实现） 返回值：\n无\nGPIO_AFIODeInit # void GPIO_AFIODeInit(void)\n将复用功能（AFIO）寄存器（包括引脚重映射、EXTI 配置、事件输出）恢复为复位默认值。用于系统初始化阶段或切换功能前清除所有映射配置，防止冲突。\n参数：\n无\n返回值：\n无\nGPIO_Init # void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)\n根据 GPIO_InitTypeDef 结构体配置指定 GPIO 外设的引脚模式、速度和引脚选择。支持同时配置多个引脚（通过位掩码），并自动处理上拉/下拉配置（IPU/IPD）。输出模式下，速度由 GPIO_Speed 字段决定；复用模式下，需确保 AFIO 已正确配置。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要配置的 GPIO 外设（A、C、D） GPIO_InitStruct GPIO_InitTypeDef * 指向包含配置参数的结构体指针 返回值：\n无\nGPIO_StructInit # void GPIO_StructInit(GPIO_InitTypeDef *GPIO_InitStruct)\n将 GPIO_InitTypeDef 结构体的所有成员初始化为默认值：所有引脚（GPIO_Pin_All）、2MHz 速度、浮空输入模式。用于避免结构体中未初始化成员导致的不可预测行为。\n参数：\n名称 类型 简述 GPIO_InitStruct GPIO_InitTypeDef * 指向待初始化的结构体指针 返回值：\n无\nGPIO_ReadInputDataBit # uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)\n读取指定 GPIO 引脚的当前输入电平。仅适用于输入模式（包括浮空、上拉、下拉、模拟），读取结果为 Bit_SET（高）或 Bit_RESET（低）。不适用于输出模式引脚。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设（A、C、D） GPIO_Pin uint16_t 指定要读取的引脚（0~7） 返回值：\n输入引脚的电平状态（Bit_SET 或 Bit_RESET）\nGPIO_ReadInputData # uint16_t GPIO_ReadInputData(GPIO_TypeDef *GPIOx)\n一次性读取指定 GPIO 外设所有引脚（0~7）的输入电平，返回 16 位值，低 8 位有效。适用于需要批量读取多个输入状态的场景，如按键矩阵扫描。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设（A、C、D） 返回值：\n当前所有引脚的输入状态（低 8 位有效）\nGPIO_ReadOutputDataBit # uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)\n读取指定 GPIO 引脚的输出锁存器值，即最后一次写入的值，而非实际引脚电平。适用于调试或确认输出状态，但不能反映外部负载影响（如开漏输出被拉低时）。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设（A、C、D） GPIO_Pin uint16_t 指定要读取的引脚（0~7） 返回值：\n输出锁存器的值（Bit_SET 或 Bit_RESET）\nGPIO_ReadOutputData # uint16_t GPIO_ReadOutputData(GPIO_TypeDef *GPIOx)\n读取指定 GPIO 外设所有引脚的输出锁存器值，返回 16 位值，低 8 位有效。用于批量确认输出状态，常用于状态回读或调试。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设（A、C、D） 返回值：\n所有引脚的输出锁存器值（低 8 位有效）\nGPIO_SetBits # void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)\n将指定引脚置高（输出 1），不影响其他引脚。内部使用 BSHR 寄存器实现，为原子操作，安全高效。支持多引脚同时置高。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设（A、C、D） GPIO_Pin uint16_t 指定要置高的引脚（可组合） 返回值：\n无\nGPIO_ResetBits # void GPIO_ResetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)\n将指定引脚置低（输出 0），不影响其他引脚。内部使用 BCR 寄存器实现，为原子操作。支持多引脚同时置低。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设（A、C、D） GPIO_Pin uint16_t 指定要置低的引脚（可组合） 返回值：\n无\nGPIO_WriteBit # void GPIO_WriteBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal)\n根据 BitVal 的值（Bit_SET 或 Bit_RESET）写入指定引脚。是 GPIO_SetBits() 和 GPIO_ResetBits() 的封装，适用于单引脚精确控制，代码语义清晰。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设（A、C、D） GPIO_Pin uint16_t 指定要写入的引脚（0~7） BitVal BitAction 写入值：Bit_SET（高）或 Bit_RESET（低） 返回值：\n无\nGPIO_Write # void GPIO_Write(GPIO_TypeDef *GPIOx, uint16_t PortVal)\n一次性写入整个端口的输出值。PortVal 的低 8 位对应引脚 0~7，高 8 位被忽略。适用于需要快速更新多个输出引脚的场景（如 LED 显示、DAC 模拟输出）。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设（A、C、D） PortVal uint16_t 要写入的端口值（低 8 位有效） 返回值：\n无\nGPIO_PinLockConfig # void GPIO_PinLockConfig(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)\n锁定指定引脚的配置寄存器，防止运行时被意外修改。一旦锁定，除非复位芯片，否则无法更改该引脚的模式或速度。常用于安全关键应用（如启动配置、调试接口保护）。\n参数：\n名称 类型 简述 GPIOx GPIO_TypeDef * 选择要锁定的 GPIO 外设（A、C、D） GPIO_Pin uint16_t 指定要锁定的引脚（可组合） 返回值：\n无\nGPIO_PinRemapConfig # void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)\n启用或禁用指定的引脚重映射功能。通过修改 AFIO 的 PCFR1 寄存器实现，支持 SPI1、I2C1、USART1、TIM1/2 等外设的引脚重定位。注意：重映射必须在 GPIO 初始化前完成，否则可能无效。\n参数：\n名称 类型 简述 GPIO_Remap uint32_t 选择要配置的重映射常量（如 GPIO_Remap_SPI1） NewState FunctionalState ENABLE（启用）或 DISABLE（禁用） 返回值：\n无\nGPIO_EXTILineConfig # void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)\n配置指定 GPIO 引脚作为外部中断（EXTI）线的输入源。必须与 EXTI 模块配合使用，用于触发中断。每个 EXTI 线（0~7）只能绑定一个端口，需在初始化前调用。\n参数：\n名称 类型 简述 GPIO_PortSource uint8_t 选择端口源（GPIO_PortSourceGPIOA 等） GPIO_PinSource uint8_t 选择引脚源（GPIO_PinSource0~GPIO_PinSource7） 返回值：\n无\nGPIO_IPD_Unused # void GPIO_IPD_Unused(void)\n为未使用的 GPIO 引脚配置为上拉输入，防止悬空引脚引入噪声或增加功耗。根据芯片型号（通过内部 ID 判断）自动配置不同端口的引脚，适用于量产固件，提升系统稳定性。\n参数：\n无\n返回值：\n无\n","externalUrl":null,"permalink":"/ch32v003_doc/9.ch32v00x_gpio.h/","section":"CH32V00x的软件文档","summary":"该文件包含 CH32V00x 系列微控制器 GPIO 固件库的所有函数原型、常量定义、枚举类型和结构体定义。本库提供对 GPIO 引脚的初始化、读写、复用映射、外部中断配置等完整控制功能，支持推挽输出、开漏输出、上拉/下拉输入、模拟输入等多种工作模式，并兼容复用功能（AF）和引脚重映射（Remap）机制。所有引脚操作均基于位掩码设计，支持单引脚或组合引脚操作，适用于嵌入式系统中对 I/O 端口的高效、精确控制。","title":"ch32v00x_gpio.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件定义了 CH32V00x 系列微控制器 I2C 外设的固件库函数原型、常量、枚举和结构体，用于实现 I2C 主从模式通信。支持标准模式（100kHz）和快速模式（最高 400kHz），提供完整的事件状态监控机制，适用于与传感器、EEPROM、RTC 等 I2C 设备的可靠通信。所有寄存器操作均通过位掩码和预定义常量封装，提升代码可读性与移植性。事件定义遵循 I2C 协议状态机，便于开发者按通信流程进行状态轮询或中断处理。\n常量 # I2C_mode # I2C 工作模式选择\n仅支持标准 I2C 模式，无 SMBus 或其他扩展模式。该常量用于初始化结构体，启用 I2C 功能。\n名称 值 简述 I2C_Mode_I2C 0x0000 启用标准 I2C 模式 以上所有值都强制转换为 uint16_t。\nI2C_duty_cycle_in_fast_mode # 快速模式下 Tlow/Thigh 占空比配置\n用于在 400kHz 快速模式下调整 SCL 时钟的高低电平比例，影响总线时序和稳定性。\n名称 值 简述 I2C_DutyCycle_16_9 0x4000 Tlow/Thigh = 16/9，适用于高负载总线 I2C_DutyCycle_2 0xBFFF Tlow/Thigh = 2，适用于低延迟场景 以上所有值都强制转换为 uint16_t。\nI2C_acknowledgement # 应答使能控制\n用于配置主设备在接收数据时是否发送 ACK（应答）信号，影响通信可靠性。\n名称 值 简述 I2C_Ack_Enable 0x0400 启用应答机制，接收方发送 ACK I2C_Ack_Disable 0x0000 禁用应答机制，接收方发送 NACK 以上所有值都强制转换为 uint16_t。\nI2C_transfer_direction # 主设备传输方向\n在发送从机地址时指定后续数据传输方向，决定从机是作为接收端还是发送端。\n名称 值 简述 I2C_Direction_Transmitter 0x00 主设备将向从机发送数据（写操作） I2C_Direction_Receiver 0x01 主设备将从从机读取数据（读操作） 以上所有值均为 uint8_t 类型。\nI2C_acknowledged_address # 从机地址长度配置\n指定从机地址是 7 位还是 10 位格式，影响地址寄存器的解析方式。\n名称 值 简述 I2C_AcknowledgedAddress_7bit 0x4000 启用 7 位地址模式（默认） I2C_AcknowledgedAddress_10bit 0xC000 启用 10 位地址模式（需额外地址字节） 以上所有值都强制转换为 uint16_t。\nI2C_registers # I2C 寄存器偏移地址\n用于 I2C_ReadRegister() 函数读取特定寄存器内容，提供寄存器级调试能力。\n名称 值 简述 I2C_Register_CTLR1 0x00 控制寄存器 1（主控模式、ACK、START/STOP） I2C_Register_CTLR2 0x04 控制寄存器 2（中断、DMA、时钟频率） I2C_Register_OADDR1 0x08 从机地址寄存器 1（主/从地址） I2C_Register_OADDR2 0x0C 从机地址寄存器 2（双地址模式） I2C_Register_DATAR 0x10 数据寄存器（发送/接收数据） I2C_Register_STAR1 0x14 状态寄存器 1（事件标志） I2C_Register_STAR2 0x18 状态寄存器 2（状态扩展标志） I2C_Register_CKCFGR 0x1C 时钟配置寄存器（SCL 频率、占空比） 以上所有值均为 uint8_t 类型。\nI2C_PEC_position # PEC（分组校验）位置配置\n用于 SMBus 协议中指定 PEC 字节在数据流中的位置，增强数据完整性校验。\n名称 值 简述 I2C_PECPosition_Next 0x0800 下一个字节为 PEC 校验值 I2C_PECPosition_Current 0xF7FF 当前字节为 PEC 校验值（清除位） 以上所有值都强制转换为 uint16_t。\nI2C_NACK_position # NACK 位置配置\n在主接收模式下，指定何时发送 NACK 以终止数据接收，影响最后字节的处理时机。\n名称 值 简述 I2C_NACKPosition_Next 0x0800 下一个字节是最后一个，当前发送 ACK I2C_NACKPosition_Current 0xF7FF 当前字节是最后一个，立即发送 NACK 以上所有值都强制转换为 uint16_t。\nI2C_interrupts_definition # 中断使能位掩码\n用于 I2C_ITConfig() 启用或禁用三种主要中断源：缓冲、事件、错误。\n名称 值 简述 I2C_IT_BUF 0x0400 数据寄存器缓冲区中断（TXE/RXNE） I2C_IT_EVT 0x0200 通信事件中断（SB、ADDR、STOPF 等） I2C_IT_ERR 0x0100 错误中断（BERR、ARLO、AF、OVR、PECERR） 以上所有值都强制转换为 uint16_t。\nI2C_interrupts_definition（扩展） # 细粒度中断标志（32 位）\n用于 I2C_GetITStatus() 和 I2C_ClearITPendingBit() 检测和清除具体中断源，覆盖所有硬件事件。\n名称 值 简述 I2C_IT_PECERR 0x01001000 PEC 校验错误 I2C_IT_OVR 0x01000800 溢出/欠载（从机模式） I2C_IT_AF 0x01000400 应答失败（NACK 收到） I2C_IT_ARLO 0x01000200 仲裁丢失（主模式） I2C_IT_BERR 0x01000100 总线错误（异常电平） I2C_IT_TXE 0x06000080 发送数据寄存器空（可写） I2C_IT_RXNE 0x06000040 接收数据寄存器非空（可读） I2C_IT_STOPF 0x02000010 停止条件检测（从机模式） I2C_IT_ADD10 0x02000008 10 位地址头发送完成 I2C_IT_BTF 0x02000004 字节传输完成（数据已移出） I2C_IT_ADDR 0x02000002 地址匹配（主：已发送；从：已接收） I2C_IT_SB 0x02000001 起始位生成（主模式） 以上所有值均为 uint32_t 类型。\nSR2 register flags # 状态寄存器 2（STAR2）标志位\n反映从机模式、总线状态、通用呼叫等扩展状态。\n名称 值 简述 I2C_FLAG_DUALF 0x00800000 双地址匹配标志（OADDR2 匹配） I2C_FLAG_GENCALL 0x00100000 通用呼叫地址（0x00）匹配 I2C_FLAG_TRA 0x00040000 传输方向（1=发送，0=接收） I2C_FLAG_BUSY 0x00020000 总线忙（有通信活动） I2C_FLAG_MSL 0x00010000 主从模式（1=主，0=从） 以上所有值均为 uint32_t 类型。\nSR1 register flags # 状态寄存器 1（STAR1）标志位\n反映通信过程中的核心事件和错误状态，是事件检测的主要依据。\n名称 值 简述 I2C_FLAG_PECERR 0x10001000 PEC 校验错误 I2C_FLAG_OVR 0x10000800 溢出/欠载（从机模式） I2C_FLAG_AF 0x10000400 应答失败（NACK 收到） I2C_FLAG_ARLO 0x10000200 仲裁丢失（主模式） I2C_FLAG_BERR 0x10000100 总线错误（异常电平） I2C_FLAG_TXE 0x10000080 发送数据寄存器空（可写） I2C_FLAG_RXNE 0x10000040 接收数据寄存器非空（可读） I2C_FLAG_STOPF 0x10000010 停止条件检测（从机模式） I2C_FLAG_ADD10 0x10000008 10 位地址头发送完成 I2C_FLAG_BTF 0x10000004 字节传输完成（数据已移出） I2C_FLAG_ADDR 0x10000002 地址匹配（主：已发送；从：已接收） I2C_FLAG_SB 0x10000001 起始位生成（主模式） 以上所有值均为 uint32_t 类型。\nI2C Master Events # 主设备通信事件（按通信流程排序）\n用于 I2C_CheckEvent() 判断通信阶段，是主模式编程的核心依据。\n名称 值 简述 I2C_EVENT_MASTER_MODE_SELECT 0x00030001 起始条件已发送，总线已占用（SB=1, MSL=1, BUSY=1） I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED 0x00070082 从机地址已发送并收到 ACK，进入发送模式（ADDR=1, TXE=1, TRA=1） I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED 0x00030002 从机地址已发送并收到 ACK，进入接收模式（ADDR=1） I2C_EVENT_MASTER_MODE_ADDRESS10 0x00030008 10 位地址头已发送，等待发送第二字节（ADD10=1） I2C_EVENT_MASTER_BYTE_RECEIVED 0x00030040 接收到一个字节，数据寄存器非空（RXNE=1） I2C_EVENT_MASTER_BYTE_TRANSMITTING 0x00070080 数据已写入寄存器，正在移出（TXE=1） I2C_EVENT_MASTER_BYTE_TRANSMITTED 0x00070084 数据已完全移出总线，BTF=1（更可靠，但速度慢） 以上所有值均为 uint32_t 类型。\nI2C Slave Events # 从设备通信事件（按通信流程排序）\n用于从模式下检测主设备的寻址与数据传输，支持双地址与通用呼叫。\n名称 值 简述 I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED 0x00020002 地址匹配，进入接收模式（ADDR=1） I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED 0x00060082 地址匹配，进入发送模式（ADDR=1, TXE=1, TRA=1） I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED 0x00820000 双地址匹配，进入接收模式（DUALF=1, BUSY=1） I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED 0x00860080 双地址匹配，进入发送模式（DUALF=1, TRA=1, BUSY=1, TXE=1） I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED 0x00120000 通用呼叫地址（0x00）匹配（GENCALL=1, BUSY=1） I2C_EVENT_SLAVE_BYTE_RECEIVED 0x00020040 接收到一个字节（RXNE=1） I2C_EVENT_SLAVE_STOP_DETECTED 0x00000010 检测到停止条件（STOPF=1） I2C_EVENT_SLAVE_BYTE_TRANSMITTED 0x00060084 一个字节已完全发送（BTF=1, TXE=1） I2C_EVENT_SLAVE_BYTE_TRANSMITTING 0x00060080 字节正在发送中（TXE=1） I2C_EVENT_SLAVE_ACK_FAILURE 0x00000400 主设备发送 NACK，要求停止传输（AF=1） 以上所有值均为 uint32_t 类型。\n枚举 # 无\n结构体 # I2C_InitTypeDef # I2C 初始化参数结构体\n用于配置 I2C 外设的通信参数，初始化后通过 I2C_Init() 应用到硬件寄存器。\n名称 类型 简述 I2C_ClockSpeed uint32_t 设置 I2C 时钟频率，最大 400kHz（标准模式 100kHz） I2C_Mode uint16_t 选择 I2C 工作模式，仅支持 I2C_Mode_I2C I2C_DutyCycle uint16_t 快速模式下 SCL 占空比，可选 16:9 或 2:1 I2C_OwnAddress1 uint16_t 从机设备的 7 位或 10 位主地址（低 7 位有效） I2C_Ack uint16_t 启用或禁用应答机制（ACK） I2C_AcknowledgedAddress uint16_t 指定地址格式为 7 位或 10 位，影响地址寄存器解析 以上所有值均按位域或掩码方式写入寄存器，需配合常量使用。\n函数 # I2C_DeInit # void I2C_DeInit(I2C_TypeDef *I2Cx)\n将指定 I2C 外设的所有寄存器恢复为复位默认值，通过复位 APB1 总线实现。适用于系统初始化或异常恢复。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设，仅支持 I2C1 返回值：\n无\n该函数通过 RCC 复位机制实现，比直接写寄存器更彻底，可清除所有异常状态。\nI2C_Init # void I2C_Init(I2C_TypeDef *I2Cx, I2C_InitTypeDef *I2C_InitStruct)\n根据初始化结构体配置 I2C 外设的时钟、地址、模式等参数。必须在 I2C_Cmd() 前调用。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_InitStruct I2C_InitTypeDef * 指向包含配置参数的结构体 返回值：\n无\n该函数自动计算 SCL 时钟分频值，支持标准模式和快速模式。地址配置会自动设置 OADDR1 的第 0 位（读/写位）。\nI2C_StructInit # void I2C_StructInit(I2C_InitTypeDef *I2C_InitStruct)\n将 I2C 初始化结构体的所有成员设置为默认值，便于快速初始化。\n参数：\n名称 类型 简述 I2C_InitStruct I2C_InitTypeDef * 待初始化的结构体指针 返回值：\n无\n默认值：时钟 5kHz（极低速）、7 位地址、禁用应答、占空比 2:1。适用于调试或最小配置。\nI2C_Cmd # void I2C_Cmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用 I2C 外设。必须在初始化后调用才能使能通信。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用时设置 CTLR1 的 PE 位，禁用时清除该位。禁用后总线释放，可安全断开设备。\nI2C_DMACmd # void I2C_DMACmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用 I2C 的 DMA 请求功能，用于高速连续数据传输。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，TXE 和 RXNE 事件可触发 DMA 传输，减少 CPU 负载。\nI2C_DMALastTransferCmd # void I2C_DMALastTransferCmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n标记下一次 DMA 传输为最后一次，自动在传输完成后生成 STOP 条件。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n仅在主模式下有效。启用后，DMA 传输结束时自动发送 STOP，无需软件干预。\nI2C_GenerateSTART # void I2C_GenerateSTART(I2C_TypeDef *I2Cx, FunctionalState NewState)\n生成或取消 I2C 起始条件（START）。主设备发起通信的第一步。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 生成 START，DISABLE 无操作 返回值：\n无\n仅在主模式下有效。调用后需等待 I2C_EVENT_MASTER_MODE_SELECT 事件确认总线已占用。\nI2C_GenerateSTOP # void I2C_GenerateSTOP(I2C_TypeDef *I2Cx, FunctionalState NewState)\n生成或取消 I2C 停止条件（STOP）。主设备结束通信的最后一步。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 生成 STOP，DISABLE 无操作 返回值：\n无\n仅在主模式下有效。生成 STOP 后总线释放，从机可被其他主设备访问。\nI2C_AcknowledgeConfig # void I2C_AcknowledgeConfig(I2C_TypeDef *I2Cx, FunctionalState NewState)\n配置是否在接收数据时发送 ACK/NACK。主接收时控制何时结束传输。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 发送 ACK，DISABLE 发送 NACK 返回值：\n无\n在主接收模式下，最后字节前发送 NACK 可通知从机停止传输，避免多余数据。\nI2C_OwnAddress2Config # void I2C_OwnAddress2Config(I2C_TypeDef *I2Cx, uint8_t Address)\n配置从机的第二个地址（双地址模式），用于响应两个不同地址的请求。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） Address uint8_t 7 位从机地址（仅低 7 位有效） 返回值：\n无\n需配合 I2C_DualAddressCmd() 启用。地址必须为 7 位，且不能与 OADDR1 冲突。\nI2C_DualAddressCmd # void I2C_DualAddressCmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用双地址模式，允许从机响应两个不同的 I2C 地址。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，从机可响应 OADDR1 和 OADDR2 两个地址，适用于多角色设备。\nI2C_GeneralCallCmd # void I2C_GeneralCallCmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用通用呼叫（General Call，地址 0x00）响应功能。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，从机可响应广播地址 0x00，常用于复位所有从机或配置全局参数。\nI2C_ITConfig # void I2C_ITConfig(I2C_TypeDef *I2Cx, uint16_t I2C_IT, FunctionalState NewState)\n启用或禁用 I2C 中断源（BUF、EVT、ERR）。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_IT uint16_t 中断源：I2C_IT_BUF、I2C_IT_EVT、I2C_IT_ERR NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n仅控制三个主中断使能位，具体事件仍需通过 I2C_GetITStatus() 检查。\nI2C_SendData # void I2C_SendData(I2C_TypeDef *I2Cx, uint8_t Data)\n向 I2C 数据寄存器写入一个字节，触发发送。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） Data uint8_t 要发送的 8 位数据 返回值：\n无\n写入后，硬件自动移出数据。需等待 I2C_FLAG_TXE 或 I2C_IT_TXE 确认可写。\nI2C_ReceiveData # uint8_t I2C_ReceiveData(I2C_TypeDef *I2Cx)\n从 I2C 数据寄存器读取一个接收到的字节。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） 返回值：\n接收到的 8 位数据\n读取前需确认 I2C_FLAG_RXNE 为 SET，否则读取值无效。\nI2C_Send7bitAddress # void I2C_Send7bitAddress(I2C_TypeDef *I2Cx, uint8_t Address, uint8_t I2C_Direction)\n发送 7 位从机地址 + 读/写位，启动与从机的通信。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） Address uint8_t 7 位从机地址（不包含 R/W 位） I2C_Direction uint8_t I2C_Direction_Transmitter 或 I2C_Direction_Receiver 返回值：\n无\n自动将方向位（0=写，1=读）附加到地址 LSB。发送后需等待 I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED 或 I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED。\nI2C_ReadRegister # uint16_t I2C_ReadRegister(I2C_TypeDef *I2Cx, uint8_t I2C_Register)\n直接读取 I2C 寄存器的值，用于调试或高级控制。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_Register uint8_t 寄存器偏移：I2C_Register_CTLR1 等 返回值：\n寄存器的 16 位值\n通过指针算术访问寄存器，不推荐常规使用，仅用于调试或特殊场景。\nI2C_SoftwareResetCmd # void I2C_SoftwareResetCmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用 I2C 软件复位，强制清空内部状态机。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，所有寄存器被复位，总线被释放。需在复位后重新初始化。\nI2C_NACKPositionConfig # void I2C_NACKPositionConfig(I2C_TypeDef *I2Cx, uint16_t I2C_NACKPosition)\n配置主接收模式下 NACK 的发送时机（当前字节或下一字节）。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_NACKPosition uint16_t I2C_NACKPosition_Next 或 I2C_NACKPosition_Current 返回值：\n无\n用于精确控制最后字节的接收，避免从机发送多余数据。\nI2C_TransmitPEC # void I2C_TransmitPEC(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用 PEC（分组校验）字节的发送。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n仅在 SMBus 模式下有效，用于数据完整性校验。\nI2C_PECPositionConfig # void I2C_PECPositionConfig(I2C_TypeDef *I2Cx, uint16_t I2C_PECPosition)\n配置 PEC 字节在数据流中的位置（当前或下一个字节）。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_PECPosition uint16_t I2C_PECPosition_Next 或 I2C_PECPosition_Current 返回值：\n无\n与 I2C_NACKPositionConfig 共用同一寄存器位（POS），但语义不同，用于 SMBus。\nI2C_CalculatePEC # void I2C_CalculatePEC(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用硬件自动计算 PEC 校验值。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，硬件自动对发送/接收的数据流计算 CRC-8 校验值。\nI2C_GetPEC # uint8_t I2C_GetPEC(I2C_TypeDef *I2Cx)\n读取硬件计算的 PEC 校验值。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） 返回值：\n当前 PEC 校验值（8 位）\n仅在 I2C_CalculatePEC() 启用后有效，用于校验接收数据完整性。\nI2C_ARPCmd # void I2C_ARPCmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用 ARP（地址解析协议）功能，支持动态地址分配。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n仅在支持 SMBus ARP 的系统中使用，CH32V00x 通常不启用。\nI2C_StretchClockCmd # void I2C_StretchClockCmd(I2C_TypeDef *I2Cx, FunctionalState NewState)\n启用或禁用时钟拉伸（Clock Stretching）功能。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n禁用时，从机无法拉低 SCL 延迟响应，可能导致数据丢失。建议保留启用。\nI2C_FastModeDutyCycleConfig # void I2C_FastModeDutyCycleConfig(I2C_TypeDef *I2Cx, uint16_t I2C_DutyCycle)\n动态修改快速模式下的 SCL 占空比。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_DutyCycle uint16_t I2C_DutyCycle_2 或 I2C_DutyCycle_16_9 返回值：\n无\n可在运行时切换，适用于动态负载调整，但需确保总线时序仍满足规范。\nI2C_CheckEvent # ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT)\n检查当前 I2C 状态是否匹配指定事件，是主从通信流程控制的核心函数。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef* 选择 I2C 外设（仅 I2C1） I2C_EVENT uint32_t 期望的事件掩码（如 I2C_EVENT_MASTER_MODE_SELECT） 返回值：\nREADY（匹配）或 NoREADY（不匹配）\n该函数将 STAR1 和 STAR2 合并为 32 位值，与事件掩码进行位与比较。适用于轮询模式，但不检测错误标志，需配合中断使用。\nI2C_GetLastEvent # uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx)\n返回当前 I2C 状态寄存器的完整 32 位组合值，用于高级事件判断。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef* 选择 I2C 外设（仅 I2C1） 返回值：\nSTAR2 \u0026laquo; 16 | STAR1 的 32 位值（低 24 位有效）\n可用于自定义事件判断，例如 if (I2C_GetLastEvent(I2C1) == (I2C_FLAG_ADDR | I2C_FLAG_RXNE))，灵活性高。\nI2C_GetFlagStatus # FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG)\n检查单个标志位的状态（SET/RESET），用于调试或简单判断。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef* 选择 I2C 外设（仅 I2C1） I2C_FLAG uint32_t 标志位，如 I2C_FLAG_RXNE、I2C_FLAG_SB 返回值：\nSET 或 RESET\n该函数会读取寄存器，某些标志（如 SB、ADDR）在读取后自动清除，需谨慎使用。\nI2C_ClearFlag # void I2C_ClearFlag(I2C_TypeDef *I2Cx, uint32_t I2C_FLAG)\n清除指定的状态标志位。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_FLAG uint32_t 要清除的标志，如 I2C_FLAG_STOPF、I2C_FLAG_BERR 返回值：\n无\n清除方式为写 1 到 STAR1 对应位。某些标志（如 STOPF、ADDR）需配合读操作序列清除，详见注释。\nI2C_GetITStatus # ITStatus I2C_GetITStatus(I2C_TypeDef *I2Cx, uint32_t I2C_IT)\n检查指定中断是否发生（需先使能）。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_IT uint32_t 中断源，如 I2C_IT_RXNE、I2C_IT_BERR 返回值：\nSET 或 RESET\n检查中断标志位与中断使能位是否同时为 1，是中断服务函数中的标准判断方式。\nI2C_ClearITPendingBit # void I2C_ClearITPendingBit(I2C_TypeDef *I2Cx, uint32_t I2C_IT)\n清除指定的中断挂起位。\n参数：\n名称 类型 简述 I2Cx I2C_TypeDef * 选择 I2C 外设（仅 I2C1） I2C_IT uint32_t 中断源，如 I2C_IT_STOPF、I2C_IT_ADDR 返回值：\n无\n与 I2C_ClearFlag() 相同，通过写 1 到 STAR1 清除。必须在中断服务函数末尾调用，否则中断会持续触发。\n","externalUrl":null,"permalink":"/ch32v003_doc/10.ch32v00x_i2c.h/","section":"CH32V00x的软件文档","summary":"该文件定义了 CH32V00x 系列微控制器 I2C 外设的固件库函数原型、常量、枚举和结构体，用于实现 I2C 主从模式通信。支持标准模式（100kHz）和快速模式（最高 400kHz），提供完整的事件状态监控机制，适用于与传感器、EEPROM、RTC 等 I2C 设备的可靠通信。所有寄存器操作均通过位掩码和预定义常量封装，提升代码可读性与移植性。事件定义遵循 I2C 协议状态机，便于开发者按通信流程进行状态轮询或中断处理。","title":"ch32v00x_i2c.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含独立看门狗（IWDG）固件库的所有函数原型与常量定义。IWDG 是一个独立于系统时钟的硬件看门狗，用于在主程序跑飞或死循环时自动复位微控制器，提升系统可靠性。其计数器由内部低速 RC 振荡器（LSI）驱动，即使主时钟失效仍可正常工作。所有寄存器写入操作均需先启用写访问权限，且关键操作（如使能）会自动禁用后续写入，以防止误配置。\n常量 # IWDG_WriteAccess # 控制对 IWDG 预分频器（PSCR）和重载寄存器（RLDR）的写入权限。写入前必须启用写访问，否则写入无效。此机制防止意外修改看门狗配置，增强系统稳定性。\n名称 值 简述 IWDG_WriteAccess_Enable 0x5555 启用对 IWDG_PSCR 和 IWDG_RLDR 的写入权限 IWDG_WriteAccess_Disable 0x0000 禁用对 IWDG_PSCR 和 IWDG_RLDR 的写入权限 以上所有值都强制转换为 uint16_t\nIWDG_prescaler # 设置 IWDG 计数器的预分频系数，决定计数器递减的时钟频率。分频值越大，看门狗超时时间越长。LSI 频率通常为 40kHz，结合分频与重载值可计算出最大超时时间（约 32.7s）。\n名称 值 简述 IWDG_Prescaler_4 0x00 预分频系数为 4 IWDG_Prescaler_8 0x01 预分频系数为 8 IWDG_Prescaler_16 0x02 预分频系数为 16 IWDG_Prescaler_32 0x03 预分频系数为 32 IWDG_Prescaler_64 0x04 预分频系数为 64 IWDG_Prescaler_128 0x05 预分频系数为 128 IWDG_Prescaler_256 0x06 预分频系数为 256 以上所有值都强制转换为 uint8_t\nIWDG_Flag # 指示 IWDG 寄存器更新状态的标志位。用于检测写入操作是否完成，避免在更新过程中读取或修改寄存器。\n名称 值 简述 IWDG_FLAG_PVU 0x0001 预分频器值正在更新中 IWDG_FLAG_RVU 0x0002 重载值正在更新中 以上所有值都强制转换为 uint16_t\n函数 # IWDG_WriteAccessCmd # void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess)\n启用或禁用对 IWDG 预分频器（PSCR）和重载寄存器（RLDR）的写入权限。必须在修改 PSCR 或 RLDR 前调用此函数，否则写入无效。一旦使能 IWDG，写入权限将自动关闭，防止运行时误改配置。\n参数：\n名称 类型 简述 IWDG_WriteAccess uint16_t 写入权限状态，取值为 IWDG_WriteAccess_Enable 或 IWDG_WriteAccess_Disable 返回值：\n无\nIWDG_SetPrescaler # void IWDG_SetPrescaler(uint8_t IWDG_Prescaler)\n设置 IWDG 计数器的预分频系数，决定计数器递减的时钟频率。分频值越大，看门狗超时时间越长。修改前必须先调用 IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable)。\n参数：\n名称 类型 简述 IWDG_Prescaler uint8_t 预分频系数，取值为 IWDG_Prescaler_4 至 IWDG_Prescaler_256 返回值：\n无\nIWDG_SetReload # void IWDG_SetReload(uint16_t Reload)\n设置 IWDG 重载寄存器的值，决定计数器从多少开始递减。有效范围为 0x000 至 0xFFF（0~4095）。重载值越大，看门狗超时时间越长。修改前必须先启用写访问权限。\n参数：\n名称 类型 简述 Reload uint16_t 重载值，范围为 0 ~ 0x0FFF 返回值：\n无\nIWDG_ReloadCounter # void IWDG_ReloadCounter(void)\n手动重载 IWDG 计数器，使其重新从 RLDR 寄存器的值开始递减。在正常程序流程中，需定期调用此函数以防止看门狗超时复位。\n参数：\n无\n返回值：\n无\nIWDG_Enable # void IWDG_Enable(void)\n使能 IWDG 看门狗。一旦使能，IWDG 将开始计数，且自动禁用对 PSCR 和 RLDR 的写入权限，防止运行时被修改。使能后需等待 RCC 的 IWDG 复位标志清除，确保硬件完全启动。\n参数：\n无\n返回值：\n无\n注意：此函数调用后，IWDG 将无法再被禁用，只能通过系统复位（如上电、外部复位）清除。设计时需确保在使能前已正确配置重载值和分频系数。\nIWDG_GetFlagStatus # FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG)\n查询 IWDG 状态标志位，判断预分频器或重载值是否正在更新中。在写入 PSCR 或 RLDR 后，应轮询对应标志位，直到其清零，表示更新完成，方可进行下一次写入。\n参数：\n名称 类型 简述 IWDG_FLAG uint16_t 要查询的标志，取值为 IWDG_FLAG_PVU 或 IWDG_FLAG_RVU 返回值：\nSET：指定标志位被置位（更新正在进行） RESET：指定标志位被清零（更新已完成） 建议：在调用 IWDG_SetPrescaler 或 IWDG_SetReload 后，应等待对应标志位为 RESET，以确保配置生效。\n","externalUrl":null,"permalink":"/ch32v003_doc/11.ch32v00x_iwdg.h/","section":"CH32V00x的软件文档","summary":"该文件包含独立看门狗（IWDG）固件库的所有函数原型与常量定义。IWDG 是一个独立于系统时钟的硬件看门狗，用于在主程序跑飞或死循环时自动复位微控制器，提升系统可靠性。其计数器由内部低速 RC 振荡器（LSI）驱动，即使主时钟失效仍可正常工作。所有寄存器写入操作均需先启用写访问权限，且关键操作（如使能）会自动禁用后续写入，以防止误配置。","title":"ch32v00x_iwdg.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含 CH32V00x 微控制器中断嵌套控制与 NVIC（嵌套向量中断控制器）初始化相关的函数原型和配置常量。通过配置 CSR 寄存器（0x804）的 bit1，系统可选择是否启用中断嵌套，从而影响优先级分组的分配方式。该模块允许开发者在有限的优先级位宽下灵活配置抢占优先级与子优先级，以满足实时性需求。在不启用嵌套时，所有中断共享同一抢占层级，仅通过子优先级调度；启用嵌套后，可实现真正的多级抢占，提升关键中断响应效率。\n常量 # CSR_INTSYSCR_INEST_definition # 中断嵌套使能配置常量，用于控制 CSR 寄存器 0x804 的 bit1，决定优先级分组策略。该配置在编译时由 INTSYSCR_INEST 宏决定，通常在启动文件中设定，影响整个 NVIC 优先级结构的行为。\n名称 值 简述 INTSYSCR_INEST_NoEN 0x00 禁用中断嵌套（CSR-0x804 bit1 = 0） INTSYSCR_INEST_EN 0x01 启用中断嵌套（CSR-0x804 bit1 = 1） 以上所有值均为 uint8_t 类型，但用于配置 32 位 CSR 寄存器的单个位，实际写入时仅影响指定位。\nPreemption_Priority_Group # 优先级分组配置常量，根据中断嵌套是否启用，仅定义一个有效值。若启用嵌套，则使用 NVIC_PriorityGroup_1（1 位抢占 + 1 位子优先级）；若禁用，则使用 NVIC_PriorityGroup_0（0 位抢占 + 2 位子优先级）。该设计简化了优先级管理，避免运行时配置冲突。\n名称 值 简述 NVIC_PriorityGroup_0 0x00 禁用嵌套时使用：0 位抢占优先级，2 位子优先级 NVIC_PriorityGroup_1 0x01 启用嵌套时使用：1 位抢占优先级，1 位子优先级 以上所有值都强制转换为 uint32_t，用于传递给优先级配置函数，但实际仅使用低两位。\n枚举 # 无\n结构体 # NVIC_InitTypeDef # NVIC 中断通道初始化结构体，用于配置特定中断源的优先级与使能状态。结构体字段与 CSR 寄存器的优先级分配策略紧密耦合，其有效取值范围依赖于 INTSYSCR_INEST 的编译时配置。\n名称 类型 简述 NVIC_IRQChannel uint8_t 指定要配置的中断通道号（如 EXTI0_IRQn、TIM2_IRQn 等） NVIC_IRQChannelPreemptionPriority uint8_t 抢占优先级：启用嵌套时范围为 0~1，禁用时必须为 0 NVIC_IRQChannelSubPriority uint8_t 子优先级：启用嵌套时范围为 01，禁用时范围为 03 NVIC_IRQChannelCmd FunctionalState 中断通道使能状态：ENABLE 或 DISABLE FunctionalState 为 ch32v00x.h 中定义的枚举类型（ENABLE=1, DISABLE=0），用于控制中断使能开关。\n函数 # NVIC_PriorityGroupConfig # void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)\n配置 NVIC 的优先级分组模式，决定抢占优先级与子优先级的位数分配。该函数仅保存配置值至全局变量 NVIC_Priority_Group，不直接写入硬件寄存器，实际优先级编码由 NVIC_Init() 在设置中断时应用。必须在调用 NVIC_Init() 前调用本函数，否则默认使用未定义的分组，可能导致优先级行为异常。\n参数：\n名称 类型 简述 NVIC_PriorityGroup uint32_t 优先级分组常量，必须为 NVIC_PriorityGroup_0 或 NVIC_PriorityGroup_1，否则行为未定义。 返回值：\n无\nNVIC_Init # void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)\n根据传入的初始化结构体配置指定中断通道的优先级与使能状态。该函数会根据 NVIC_Priority_Group 的当前配置，自动将抢占优先级与子优先级组合成硬件所需的 8 位优先级值（高 2 位为抢占，低 6 位为子优先级），并调用底层 NVIC_SetPriority() 写入 NVIC 寄存器。同时根据 NVIC_IRQChannelCmd 的值启用或禁用中断。\n参数：\n名称 类型 简述 NVIC_InitStruct NVIC_InitTypeDef * 指向包含中断通道、优先级和使能状态的配置结构体。必须确保字段值在当前嵌套模式下合法，否则可能导致优先级冲突或无效配置。 返回值：\n无\n重要说明：\n在 INTSYSCR_INEST_EN 模式下，抢占优先级只能为 0 或 1，子优先级只能为 0 或 1，共 4 种组合。 在 INTSYSCR_INEST_NoEN 模式下，抢占优先级必须为 0，子优先级可为 0~3，共 4 种组合。 所有优先级值在内部通过左移 6 位（\u0026lt;\u0026lt; 6）对齐至 NVIC 的高 2 位，确保与硬件寄存器格式一致。 该函数不检查 NVIC_IRQChannel 是否有效，开发者需确保使用的是芯片支持的中断号，否则可能触发异常。 ","externalUrl":null,"permalink":"/ch32v003_doc/12.ch32v00x_misc.h/","section":"CH32V00x的软件文档","summary":"该文件包含 CH32V00x 微控制器中断嵌套控制与 NVIC（嵌套向量中断控制器）初始化相关的函数原型和配置常量。通过配置 CSR 寄存器（0x804）的 bit1，系统可选择是否启用中断嵌套，从而影响优先级分组的分配方式。该模块允许开发者在有限的优先级位宽下灵活配置抢占优先级与子优先级，以满足实时性需求。在不启用嵌套时，所有中断共享同一抢占层级，仅通过子优先级调度；启用嵌套后，可实现真正的多级抢占，提升关键中断响应效率。","title":"ch32v00x_misc.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含 OPA（运算放大器）固件库的所有函数原型与数据类型定义，用于配置和控制 CH32V00x 系列微控制器中的内置运算放大器模块。OPA 通过外部扩展控制寄存器（EXTEN_CTR）进行配置，支持正负输入通道选择、使能/禁用控制，并提供结构体初始化辅助函数。该库设计简洁，仅包含必要功能，适用于低功耗模拟信号调理场景。\n常量 # OPA PSEL enumeration # 正向输入通道选择枚举，用于指定运算放大器的正输入端连接哪个模拟通道。CHP0 和 CHP1 分别对应芯片内部预定义的两个正输入源，通常连接至 GPIO 模拟引脚或内部参考源，具体映射需参考数据手册。选择正确的正通道是构建差分放大或电压跟随器电路的基础。\n名称 值 简述 CHP0 0 选择正输入通道 0 CHP1 1 选择正输入通道 1 OPA NSEL enumeration # 反向输入通道选择枚举，用于指定运算放大器的负输入端连接哪个模拟通道。CHN0 和 CHN1 对应两个可选的负输入源，常用于构建差分放大器。通过组合 PSEL 和 NSEL，可实现多种放大配置，如单端输入、差分输入或内部反馈模式。\n名称 值 简述 CHN0 0 选择负输入通道 0 CHN1 1 选择负输入通道 1 枚举 # OPA_PSEL_TypeDef # 正输入通道选择类型，枚举值为 CHP0 和 CHP1，用于 OPA_InitTypeDef 结构体中配置正输入端。\n名称 值 CHP0 0 CHP1 1 OPA_NSEL_TypeDef # 负输入通道选择类型，枚举值为 CHN0 和 CHN1，用于 OPA_InitTypeDef 结构体中配置负输入端。\n名称 值 CHN0 0 CHN1 1 结构体 # OPA_InitTypeDef # OPA 初始化配置结构体，用于封装正负输入通道的选择参数，供 OPA_Init() 和 OPA_StructInit() 使用。该结构体仅包含两个字段，设计极简，符合嵌入式系统对资源效率的要求。初始化后，通过写入 EXTEN_CTR 寄存器的位 [18:17] 实现通道映射，其中 PSEL 占用位 [18:17]，NSEL 占用位 [17]，二者共同决定放大器的输入配置。\n名称 类型 简述 PSEL OPA_PSEL_TypeDef 指定运算放大器的正输入通道（CHP0 或 CHP1） NSEL OPA_NSEL_TypeDef 指定运算放大器的负输入通道（CHN0 或 CHN1） 函数 # OPA_DeInit # void OPA_DeInit(void)\n将 OPA 外设寄存器反初始化为默认复位值，即关闭 OPA 并清除所有通道选择配置。该函数通过直接清零 EXTEN_CTR 寄存器的 [18:16] 位实现，不依赖时钟复位，响应迅速，适用于系统初始化或低功耗休眠前的资源释放。\n参数：\n无\n返回值：\n无\nOPA_Init # void OPA_Init(OPA_InitTypeDef *OPA_InitStruct)\n根据传入的初始化结构体配置 OPA 的正负输入通道。该函数读取当前 EXTEN_CTR 寄存器值，先清除位 [18:17]（PSEL 和 NSEL 所在位），再根据结构体成员重新设置，实现原子性配置。注意：PSEL 写入位 [18:17]，NSEL 写入位 [17]，二者存在位重叠，因此 NSEL 的值必须为 0 或 1，且不能与 PSEL 冲突配置，否则可能导致未定义行为。\n参数：\n名称 类型 简述 OPA_InitStruct OPA_InitTypeDef * 指向包含 PSEL 和 NSEL 配置的结构体指针 返回值：\n无\nOPA_StructInit # void OPA_StructInit(OPA_InitTypeDef *OPA_InitStruct)\n将 OPA 初始化结构体的所有成员设置为默认复位值：正通道为 CHP0，负通道为 CHN0。此函数用于在调用 OPA_Init() 前确保结构体内容已初始化，避免使用未定义的随机值。推荐在声明结构体变量后立即调用此函数，以提高代码健壮性。\n参数：\n名称 类型 简述 OPA_InitStruct OPA_InitTypeDef * 指向待初始化的 OPA_InitTypeDef 结构体指针 返回值：\n无\nOPA_Cmd # void OPA_Cmd(FunctionalState NewState)\n启用或禁用 OPA 外设。通过设置 EXTEN_CTR 寄存器的位 [16] 控制 OPA 使能状态。当 NewState 为 ENABLE 时，置位该位；为 DISABLE 时，清零该位。OPA 仅在使能后才消耗功耗并开始放大信号，因此在不使用时应禁用以降低系统功耗。注意：即使通道配置正确，若未调用此函数使能，OPA 仍处于关闭状态，无输出。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE（使能）或 DISABLE（禁用），通常来自 ch32v00x.h 中的宏定义 返回值：\n无\n注： 所有寄存器操作均基于 EXTEN-\u0026gt;EXTEN_CTR，其类型为 uint32_t，所有位操作均使用 (uint32_t) 强制类型转换以确保平台兼容性与位域操作的正确性。\n","externalUrl":null,"permalink":"/ch32v003_doc/13.ch32v00x_opa.h/","section":"CH32V00x的软件文档","summary":"该文件包含 OPA（运算放大器）固件库的所有函数原型与数据类型定义，用于配置和控制 CH32V00x 系列微控制器中的内置运算放大器模块。OPA 通过外部扩展控制寄存器（EXTEN_CTR）进行配置，支持正负输入通道选择、使能/禁用控制，并提供结构体初始化辅助函数。该库设计简洁，仅包含必要功能，适用于低功耗模拟信号调理场景。","title":"ch32v00x_opa.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含电源管理（PWR）固件库的所有函数原型、常量定义和寄存器操作接口，用于配置低功耗模式、电源电压检测（PVD）、自动唤醒（AWU）等功能。该库专为CH32V00x系列微控制器设计，通过操作PWR外设寄存器实现系统功耗优化，适用于电池供电、待机唤醒、电压监控等应用场景。所有常量均以PWR_为前缀，确保命名空间清晰，避免与其它外设冲突。\n常量 # PVD_detection_level # 电源电压检测（PVD）阈值电平配置，用于设定当电源电压低于指定阈值时触发中断或标志的电压等级。该功能常用于系统监控，防止在电压过低时发生异常行为（如数据丢失或逻辑错误）。实际阈值对应芯片内部比较器的校准值，用户可通过宏定义直接选择标准电压点，无需手动计算寄存器位。\n名称 值 简述 PWR_PVDLevel_MODE0 0x00000000 PVD检测电平设置为模式0 PWR_PVDLevel_MODE1 0x00000020 PVD检测电平设置为模式1 PWR_PVDLevel_MODE2 0x00000040 PVD检测电平设置为模式2 PWR_PVDLevel_MODE3 0x00000060 PVD检测电平设置为模式3 PWR_PVDLevel_MODE4 0x00000080 PVD检测电平设置为模式4 PWR_PVDLevel_MODE5 0x000000A0 PVD检测电平设置为模式5 PWR_PVDLevel_MODE6 0x000000C0 PVD检测电平设置为模式6 PWR_PVDLevel_MODE7 0x000000E0 PVD检测电平设置为模式7 PWR_PVDLevel_2V9 PWR_PVDLevel_MODE0 2.9V检测阈值（推荐用于3.3V系统） PWR_PVDLevel_3V1 PWR_PVDLevel_MODE1 3.1V检测阈值 PWR_PVDLevel_3V3 PWR_PVDLevel_MODE2 3.3V检测阈值（典型工作电压） PWR_PVDLevel_3V5 PWR_PVDLevel_MODE3 3.5V检测阈值 PWR_PVDLevel_3V7 PWR_PVDLevel_MODE4 3.7V检测阈值 PWR_PVDLevel_3V9 PWR_PVDLevel_MODE5 3.9V检测阈值 PWR_PVDLevel_4V1 PWR_PVDLevel_MODE6 4.1V检测阈值 PWR_PVDLevel_4V4 PWR_PVDLevel_MODE7 4.4V检测阈值 以上所有值均强制转换为uint32_t，并写入PWR_CTLR寄存器的[6:4]位（PLS字段），实现电压阈值选择。\nPWR_AWU_Prescaler # 自动唤醒单元（AWU）的时钟预分频系数，用于控制AWU计数器的时钟源（LSI）分频倍数，从而决定唤醒周期的长短。LSI（低速内部时钟）典型频率为40kHz，通过不同分频可实现从毫秒级到数秒级的精确唤醒间隔，适用于低功耗定时唤醒、周期性采样等场景。\n名称 值 简述 PWR_AWU_Prescaler_1 0x00000000 AWU计数器时钟 = LSI/1 PWR_AWU_Prescaler_2 0x00000002 AWU计数器时钟 = LSI/2 PWR_AWU_Prescaler_4 0x00000003 AWU计数器时钟 = LSI/4 PWR_AWU_Prescaler_8 0x00000004 AWU计数器时钟 = LSI/8 PWR_AWU_Prescaler_16 0x00000005 AWU计数器时钟 = LSI/16 PWR_AWU_Prescaler_32 0x00000006 AWU计数器时钟 = LSI/32 PWR_AWU_Prescaler_64 0x00000007 AWU计数器时钟 = LSI/64 PWR_AWU_Prescaler_128 0x00000008 AWU计数器时钟 = LSI/128 PWR_AWU_Prescaler_256 0x00000009 AWU计数器时钟 = LSI/256 PWR_AWU_Prescaler_512 0x0000000A AWU计数器时钟 = LSI/512 PWR_AWU_Prescaler_1024 0x0000000B AWU计数器时钟 = LSI/1024 PWR_AWU_Prescaler_2048 0x0000000C AWU计数器时钟 = LSI/2048 PWR_AWU_Prescaler_4096 0x0000000D AWU计数器时钟 = LSI/4096 PWR_AWU_Prescaler_10240 0x0000000E AWU计数器时钟 = LSI/10240 PWR_AWU_Prescaler_61440 0x0000000F AWU计数器时钟 = LSI/61440 以上所有值均强制转换为uint32_t，写入AWUPSC寄存器的[3:0]位，实现分频配置。\nSTOP_mode_entry # 进入待机（STANDBY）模式时使用的唤醒指令选择。该配置决定系统在进入低功耗待机后，是通过等待中断（WFI）还是等待事件（WFE）来恢复运行。WFI更适用于常规中断唤醒，WFE则适合与事件（如外部引脚变化、RTC闹钟等）配合使用，提升唤醒响应的灵活性。\n名称 值 简述 PWR_STANDBYEntry_WFI 0x01 使用WFI指令进入待机模式 PWR_STANDBYEntry_WFE 0x02 使用WFE指令进入待机模式 PWR_Flag # PWR外设状态标志位，用于查询电源管理模块的当前状态。目前仅定义一个标志位，用于检测PVD的输出状态，可配合中断或轮询机制实现电压异常告警。\n名称 值 简述 PWR_FLAG_PVDO 0x00000004 PVD输出标志位（在CSR寄存器中） 以上所有值均强制转换为uint32_t，用于与PWR_CSR寄存器进行位掩码比较。\n枚举 # 无\n结构体 # 无\n函数 # PWR_DeInit # void PWR_DeInit(void)\n将PWR外设的所有寄存器恢复为复位默认值。通过复位APB1总线上的PWR模块实现，而非逐位写入，确保所有配置（PVD、AWU、待机模式等）被彻底清除，适用于系统初始化或异常恢复场景。\n参数：\n无\n返回值：\n无\n实现原理：调用RCC_APB1PeriphResetCmd()对PWR模块进行软复位，先使能复位再关闭，等效于硬件上电复位。\nPWR_PVDCmd # void PWR_PVDCmd(FunctionalState NewState)\n启用或禁用电源电压检测（PVD）功能。当启用时，芯片会持续监控VDD电压，当电压低于设定阈值时，PVD_FLAG被置位，可触发中断或用于软件判断。禁用后，PVD功能关闭，节省少量功耗。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE（启用）或 DISABLE（禁用） 返回值：\n无\n该函数直接操作PWR_CTLR寄存器的第4位（PVDEN），是低功耗系统中实现电压保护的关键接口。\nPWR_PVDLevelConfig # void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel)\n配置PVD的电压检测阈值。根据传入的PWR_PVDLevel_*常量，设置PWR_CTLR寄存器中的PLS[6:4]字段，从而选择8个预设电压等级之一。建议根据系统工作电压范围选择合适阈值，例如3.3V系统推荐使用PWR_PVDLevel_3V1或PWR_PVDLevel_3V3。\n参数：\n名称 类型 简述 PWR_PVDLevel uint32_t 从PWR_PVDLevel_MODE0到PWR_PVDLevel_MODE7中选择一个阈值 返回值：\n无\n该函数先清除PLS字段，再写入新值，避免误配置。注意：配置后需确保PVD已启用（调用PWR_PVDCmd(ENABLE)）才生效。\nPWR_AutoWakeUpCmd # void PWR_AutoWakeUpCmd(FunctionalState NewState)\n启用或禁用自动唤醒（AWU）功能。启用后，AWU计数器将基于LSI时钟递减，当计数器归零时触发唤醒事件，使系统从待机或停机模式中恢复。适用于周期性唤醒采集传感器数据、维持通信心跳等低功耗应用。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE（启用）或 DISABLE（禁用） 返回值：\n无\n实际操作为设置PWR_AWUCSR寄存器的第1位（AWUEN），需配合PWR_AWU_SetPrescaler()和PWR_AWU_SetWindowValue()完成完整配置。\nPWR_AWU_SetPrescaler # void PWR_AWU_SetPrescaler(uint32_t AWU_Prescaler)\n设置AWU计数器的时钟预分频系数，决定唤醒周期的长度。LSI时钟（约40kHz）经分频后作为AWU的计数源，分频值越大，唤醒间隔越长。例如，使用PWR_AWU_Prescaler_61440时，唤醒周期约为1.6秒（40kHz / 61440 ≈ 0.65Hz）。\n参数：\n名称 类型 简述 AWU_Prescaler uint32_t 从PWR_AWU_Prescaler_1到PWR_AWU_Prescaler_61440中选择一个分频值 返回值：\n无\n该函数读取AWUPSC寄存器，保留其他位，仅修改[3:0]位（分频码），确保不干扰其他配置。\nPWR_AWU_SetWindowValue # void PWR_AWU_SetWindowValue(uint8_t WindowValue)\n设置AWU的窗口比较值，用于控制唤醒事件的触发时机。当AWU计数器递减至该值时，会触发唤醒事件。该值必须小于0x3F（63），通常设置为计数器最大值的一半，以实现对称唤醒周期。若设置为0，则在计数器归零时立即唤醒。\n参数：\n名称 类型 简述 WindowValue uint8_t 窗口比较值，范围063（0x000x3F） 返回值：\n无\n该值写入AWUWR寄存器的[5:0]位，用于与AWU计数器进行比较，实现“窗口唤醒”功能，适用于需要精确时间窗口的应用。\nPWR_EnterSTANDBYMode # void PWR_EnterSTANDBYMode(uint8_t PWR_STANDBYEntry)\n使系统进入待机（STANDBY）模式，此时除备份域和唤醒电路外，所有时钟和电源均被关闭，功耗降至最低（通常\u0026lt;1μA）。唤醒源包括外部复位、WKUP引脚、RTC闹钟或AWU事件。该函数通过设置PDDS位并执行WFI/WFE指令实现低功耗跳转。\n参数：\n名称 类型 简述 PWR_STANDBYEntry uint8_t PWR_STANDBYEntry_WFI（等待中断）或 PWR_STANDBYEntry_WFE（等待事件） 返回值：\n无\n该函数会清除PWR_CTLR的PDDS位，再重新设置为1，确保待机模式被正确激活。同时，通过修改SCB-\u0026gt;SCR寄存器的DEEPSLEEP位，使CPU进入深度睡眠，配合WFI/WFE实现系统级低功耗。注意：该函数执行后程序不会返回，除非被唤醒。\nPWR_GetFlagStatus # FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG)\n查询PWR外设的状态标志位，用于判断是否发生特定事件（如PVD电压阈值触发）。仅支持查询PWR_FLAG_PVDO，其他标志位未定义。该函数常用于中断服务程序或主循环中轮询电源状态。\n参数：\n名称 类型 简述 PWR_FLAG uint32_t 仅支持PWR_FLAG_PVDO 返回值：\nSET（标志置位）或 RESET（标志未置位）\n该函数读取PWR_CSR寄存器的PVDO位（第2位），并返回其状态。读取后标志位不会自动清除，需通过软件或硬件复位清除。\n","externalUrl":null,"permalink":"/ch32v003_doc/14.ch32v00x_pwr.h/","section":"CH32V00x的软件文档","summary":"该文件包含电源管理（PWR）固件库的所有函数原型、常量定义和寄存器操作接口，用于配置低功耗模式、电源电压检测（PVD）、自动唤醒（AWU）等功能。该库专为CH32V00x系列微控制器设计，通过操作PWR外设寄存器实现系统功耗优化，适用于电池供电、待机唤醒、电压监控等应用场景。所有常量均以PWR_为前缀，确保命名空间清晰，避免与其它外设冲突。","title":"ch32v00x_pwr.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件定义了CH32V00x系列微控制器复位与时钟控制（RCC）外设的所有常量、枚举、结构体及函数原型。RCC模块负责系统时钟源的选择、分频、PLL配置、外设时钟使能、时钟安全系统（CSS）管理以及复位标志的读取与清除。通过本库函数，开发者可灵活配置系统主频、AHB/APB总线分频、ADC时钟源、MCO输出时钟等关键参数，是系统初始化和低功耗管理的核心模块。所有时钟配置均需遵循芯片时序约束，例如HSE不能在作为系统时钟时被关闭，PLL不能在作为系统时钟时被禁用。\n常量 # HSE_configuration # 外部高速晶振（HSE）配置选项，用于启用、关闭或旁路外部晶振。HSE是高精度时钟源，常用于系统主时钟或PLL输入。旁路模式允许使用外部时钟信号直接驱动芯片，适用于已有时钟源的系统。\n名称 值 简述 RCC_HSE_OFF 0x00000000 关闭HSE振荡器 RCC_HSE_ON 0x00010000 开启HSE振荡器 RCC_HSE_Bypass 0x00040000 旁路HSE振荡器，使用外部时钟输入 以上所有值都强制转换为uint32_t\nPLL_entry_clock_source # PLL输入时钟源选择，决定PLL的参考频率。必须在启用PLL前配置，且仅支持HSI或HSE的2倍频输入。选择HSE作为PLL源可获得更高精度和稳定性，适合对时钟精度要求高的应用。\n名称 值 简述 RCC_PLLSource_HSI_MUL2 0x00000000 使用HSI（内部高速时钟）作为PLL输入，倍频2倍 RCC_PLLSource_HSE_MUL2 0x00010000 使用HSE（外部高速晶振）作为PLL输入，倍频2倍 以上所有值都强制转换为uint32_t\nSystem_clock_source # 系统时钟（SYSCLK）源选择，决定CPU运行频率的来源。系统时钟可由HSI、HSE或PLL提供，切换时需确保目标时钟已稳定，否则可能导致系统异常。\n名称 值 简述 RCC_SYSCLKSource_HSI 0x00000000 选择HSI作为系统时钟源 RCC_SYSCLKSource_HSE 0x00000001 选择HSE作为系统时钟源 RCC_SYSCLKSource_PLLCLK 0x00000002 选择PLL输出作为系统时钟源 以上所有值都强制转换为uint32_t\nAHB_clock_source # AHB总线时钟（HCLK）分频系数，控制AHB外设（如DMA、SRAM）的工作频率。分频值范围从1到256，需根据外设性能需求合理配置，避免过快导致数据错误或过慢影响性能。\n名称 值 简述 RCC_SYSCLK_Div1 0x00000000 HCLK = SYSCLK RCC_SYSCLK_Div2 0x00000010 HCLK = SYSCLK/2 RCC_SYSCLK_Div3 0x00000020 HCLK = SYSCLK/3 RCC_SYSCLK_Div4 0x00000030 HCLK = SYSCLK/4 RCC_SYSCLK_Div5 0x00000040 HCLK = SYSCLK/5 RCC_SYSCLK_Div6 0x00000050 HCLK = SYSCLK/6 RCC_SYSCLK_Div7 0x00000060 HCLK = SYSCLK/7 RCC_SYSCLK_Div8 0x00000070 HCLK = SYSCLK/8 RCC_SYSCLK_Div16 0x000000B0 HCLK = SYSCLK/16 RCC_SYSCLK_Div32 0x000000C0 HCLK = SYSCLK/32 RCC_SYSCLK_Div64 0x000000D0 HCLK = SYSCLK/64 RCC_SYSCLK_Div128 0x000000E0 HCLK = SYSCLK/128 RCC_SYSCLK_Div256 0x000000F0 HCLK = SYSCLK/256 以上所有值都强制转换为uint32_t\nRCC_Interrupt_source # RCC中断源标识，用于使能或查询特定时钟就绪或故障中断。中断机制可实现无轮询的时钟状态监控，提升系统响应效率。\n名称 值 简述 RCC_IT_LSIRDY 0x01 LSI时钟就绪中断 RCC_IT_HSIRDY 0x04 HSI时钟就绪中断 RCC_IT_HSERDY 0x08 HSE时钟就绪中断 RCC_IT_PLLRDY 0x10 PLL时钟就绪中断 RCC_IT_CSS 0x80 时钟安全系统（CSS）故障中断 以上所有值都强制转换为uint8_t\nADC_clock_source # ADC时钟（ADCCLK）分频系数，由APB2时钟（PCLK2）分频得到。ADC采样精度对时钟稳定性敏感，建议使用较低分频比以保证采样时间充足。\n名称 值 简述 RCC_PCLK2_Div2 0x00000000 ADCCLK = PCLK2/2 RCC_PCLK2_Div4 0x00004000 ADCCLK = PCLK2/4 RCC_PCLK2_Div6 0x00008000 ADCCLK = PCLK2/6 RCC_PCLK2_Div8 0x0000C000 ADCCLK = PCLK2/8 RCC_PCLK2_Div12 0x0000A000 ADCCLK = PCLK2/12 RCC_PCLK2_Div16 0x0000E000 ADCCLK = PCLK2/16 RCC_PCLK2_Div24 0x0000A800 ADCCLK = PCLK2/24 RCC_PCLK2_Div32 0x0000E800 ADCCLK = PCLK2/32 RCC_PCLK2_Div48 0x0000B000 ADCCLK = PCLK2/48 RCC_PCLK2_Div64 0x0000F000 ADCCLK = PCLK2/64 RCC_PCLK2_Div96 0x0000B800 ADCCLK = PCLK2/96 RCC_PCLK2_Div128 0x0000F800 ADCCLK = PCLK2/128 以上所有值都强制转换为uint32_t\nAHB_peripheral # AHB总线外设时钟使能位掩码，用于控制DMA1和SRAM的时钟开关。SRAM时钟仅在睡眠模式下可安全关闭，否则可能导致数据丢失。\n名称 值 简述 RCC_AHBPeriph_DMA1 0x00000001 DMA1外设时钟 RCC_AHBPeriph_SRAM 0x00000004 SRAM存储器时钟 以上所有值都强制转换为uint32_t\nAPB2_peripheral # 高速APB2总线外设时钟使能位掩码，覆盖AFIO、GPIO、ADC、TIM1、SPI1、USART1等关键外设。APB2时钟频率通常与HCLK相同，用于高速外设。\n名称 值 简述 RCC_APB2Periph_AFIO 0x00000001 复用功能I/O时钟 RCC_APB2Periph_GPIOA 0x00000004 GPIOA端口时钟 RCC_APB2Periph_GPIOC 0x00000010 GPIOC端口时钟 RCC_APB2Periph_GPIOD 0x00000020 GPIOD端口时钟 RCC_APB2Periph_ADC1 0x00000200 ADC1模数转换器时钟 RCC_APB2Periph_TIM1 0x00000800 TIM1高级定时器时钟 RCC_APB2Periph_SPI1 0x00001000 SPI1串行外设接口时钟 RCC_APB2Periph_USART1 0x00004000 USART1通用同步/异步收发器时钟 以上所有值都强制转换为uint32_t\nAPB1_peripheral # 低速APB1总线外设时钟使能位掩码，覆盖TIM2、WWDG、I2C1、PWR等常用外设。APB1时钟频率通常为HCLK的1/2或更低，适用于低速通信和控制。\n名称 值 简述 RCC_APB1Periph_TIM2 0x00000001 TIM2通用定时器时钟 RCC_APB1Periph_WWDG 0x00000800 窗口看门狗时钟 RCC_APB1Periph_I2C1 0x00200000 I2C1串行通信接口时钟 RCC_APB1Periph_PWR 0x10000000 电源控制时钟 以上所有值都强制转换为uint32_t\nClock_source_to_output_on_MCO_pin # MCO（微控制器时钟输出）引脚时钟源选择，用于将内部时钟信号输出到外部引脚，便于示波器测量或同步外部设备。\n名称 值 简述 RCC_MCO_NoClock 0x00 MCO引脚无时钟输出 RCC_MCO_SYSCLK 0x04 输出系统时钟（SYSCLK） RCC_MCO_HSI 0x05 输出HSI内部时钟 RCC_MCO_HSE 0x06 输出HSE外部晶振时钟 RCC_MCO_PLLCLK 0x07 输出PLL时钟 以上所有值都强制转换为uint8_t\nRCC_Flag # RCC状态标志位，用于检测各种时钟就绪、复位源和故障状态。标志位由硬件自动置位，需通过RCC_ClearFlag()清除复位相关标志。\n名称 值 简述 RCC_FLAG_HSIRDY 0x21 HSI时钟就绪标志 RCC_FLAG_HSERDY 0x31 HSE时钟就绪标志 RCC_FLAG_PLLRDY 0x39 PLL时钟就绪标志 RCC_FLAG_LSIRDY 0x61 LSI时钟就绪标志 RCC_FLAG_PINRST 0x7A 外部复位引脚触发复位 RCC_FLAG_PORRST 0x7B 上电/掉电复位 RCC_FLAG_SFTRST 0x7C 软件复位 RCC_FLAG_IWDGRST 0x7D 独立看门狗复位 RCC_FLAG_WWDGRST 0x7E 窗口看门狗复位 RCC_FLAG_LPWRRST 0x7F 低功耗复位 以上所有值都强制转换为uint8_t\nSysTick_clock_source # SysTick定时器时钟源选择，决定系统滴答定时器的计数频率。通常用于操作系统调度或延时函数，建议使用HCLK以获得精确时间基准。\n名称 值 简述 SysTick_CLKSource_HCLK_Div8 0xFFFFFFFB SysTick时钟 = HCLK/8 SysTick_CLKSource_HCLK 0x00000004 SysTick时钟 = HCLK 以上所有值都强制转换为uint32_t\n枚举 # 无\n结构体 # RCC_ClocksTypeDef # RCC时钟频率信息结构体，用于通过RCC_GetClocksFreq()函数获取系统各时钟的实际运行频率。该结构体在初始化后由函数自动填充，可用于动态调整系统性能或功耗策略。\n名称 类型 简述 SYSCLK_Frequency uint32_t 系统时钟（CPU主频）频率，单位Hz HCLK_Frequency uint32_t AHB总线时钟频率，单位Hz PCLK1_Frequency uint32_t APB1总线时钟频率，单位Hz PCLK2_Frequency uint32_t APB2总线时钟频率，单位Hz ADCCLK_Frequency uint32_t ADC转换时钟频率，单位Hz 函数 # RCC_DeInit # void RCC_DeInit(void)\n将RCC寄存器恢复为上电复位后的默认状态，包括关闭所有时钟源、禁用PLL、清除中断标志。常用于系统初始化或异常恢复流程，确保时钟配置处于已知安全状态。\n参数：\n无\n返回值：\n无\nRCC_HSEConfig # void RCC_HSEConfig(uint32_t RCC_HSE)\n配置外部高速晶振（HSE）的工作模式。支持关闭、开启或旁路模式。调用前需确保HSE未被用作系统时钟或PLL输入，否则配置无效。开启HSE后需调用RCC_WaitForHSEStartUp()等待稳定。\n参数：\n名称 类型 简述 RCC_HSE uint32_t HSE配置选项，取值为RCC_HSE_OFF、RCC_HSE_ON或RCC_HSE_Bypass 返回值：\n无\nRCC_WaitForHSEStartUp # ErrorStatus RCC_WaitForHSEStartUp(void)\n等待HSE振荡器稳定并进入就绪状态。该函数轮询RCC_FLAG_HSERDY标志，超时后返回状态。必须在启用HSE后调用，否则可能因时钟未就绪导致后续配置失败。\n参数：\n无\n返回值：\n值 说明 READY HSE已稳定，可安全使用 NoREADY 超时仍未稳定，可能晶振故障或连接异常 RCC_AdjustHSICalibrationValue # void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)\n微调内部高速振荡器（HSI）的校准值，以补偿温度、电压变化引起的频率偏差。校准值范围0~0x1F，出厂默认为0x10。建议在系统启动后根据实测频率进行微调。\n参数：\n名称 类型 简述 HSICalibrationValue uint8_t 校准值，范围031（0x000x1F） 返回值：\n无\nRCC_HSICmd # void RCC_HSICmd(FunctionalState NewState)\n启用或禁用内部高速振荡器（HSI）。HSI是系统默认时钟源，常用于上电初始阶段或低功耗模式。禁用HSI前需确保系统时钟已切换至其他源。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE（开启）或DISABLE（关闭） 返回值：\n无\nRCC_PLLConfig # void RCC_PLLConfig(uint32_t RCC_PLLSource)\n配置PLL的输入源（HSI或HSE）并启用2倍频。必须在启用PLL前调用，且仅支持2倍频。配置后需调用RCC_PLLCmd(ENABLE)激活PLL。\n参数：\n名称 类型 简述 RCC_PLLSource uint32_t PLL输入源，取值为RCC_PLLSource_HSI_MUL2或RCC_PLLSource_HSE_MUL2 返回值：\n无\nRCC_PLLCmd # void RCC_PLLCmd(FunctionalState NewState)\n启用或禁用PLL。PLL不能在作为系统时钟时被禁用，否则会导致系统崩溃。建议在切换系统时钟源后再禁用PLL以释放功耗。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE（开启）或DISABLE（关闭） 返回值：\n无\nRCC_SYSCLKConfig # void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)\n切换系统时钟源（SYSCLK）。支持HSI、HSE、PLL三种源。切换时需确保目标时钟已稳定，否则可能引发系统异常。函数内部会根据PLL源自动调整HSI校准值以优化性能。\n参数：\n名称 类型 简述 RCC_SYSCLKSource uint32_t 系统时钟源，取值为RCC_SYSCLKSource_HSI、RCC_SYSCLKSource_HSE或RCC_SYSCLKSource_PLLCLK 返回值：\n无\nRCC_GetSYSCLKSource # uint8_t RCC_GetSYSCLKSource(void)\n读取当前系统时钟源。返回值为寄存器CFGR0中SWS字段的值，用于确认时钟切换是否成功。\n参数：\n无\n返回值：\n值 说明 0x00 HSI为当前系统时钟 0x04 HSE为当前系统时钟 0x08 PLL为当前系统时钟 RCC_HCLKConfig # void RCC_HCLKConfig(uint32_t RCC_SYSCLK)\n配置AHB总线时钟（HCLK）分频系数。分频值影响DMA、SRAM等高速外设性能。建议根据外设最大工作频率设置，避免超频。\n参数：\n名称 类型 简述 RCC_SYSCLK uint32_t AHB分频系数，取值为RCC_SYSCLK_Div1至RCC_SYSCLK_Div256 返回值：\n无\nRCC_ITConfig # void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState)\n使能或禁用RCC中断源。支持LSI、HSI、HSE、PLL就绪中断和CSS故障中断。中断触发后可通过RCC_GetITStatus()查询。\n参数：\n名称 类型 简述 RCC_IT uint8_t 中断源，取值为RCC_IT_LSIRDY、RCC_IT_HSIRDY、RCC_IT_HSERDY、RCC_IT_PLLRDY或RCC_IT_CSS NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nRCC_ADCCLKConfig # void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)\n配置ADC时钟（ADCCLK）分频系数。ADCCLK由PCLK2分频得到，建议选择≤12分频以保证采样精度。过高的分频可能导致转换时间不足。\n参数：\n名称 类型 简述 RCC_PCLK2 uint32_t ADC分频系数，取值为RCC_PCLK2_Div2至RCC_PCLK2_Div128 返回值：\n无\nRCC_LSICmd # void RCC_LSICmd(FunctionalState NewState)\n启用或禁用内部低速振荡器（LSI）。LSI常用于独立看门狗（IWDG）或RTC低功耗时钟。禁用LSI前需确保IWDG未运行，否则会触发复位。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nRCC_GetClocksFreq # void RCC_GetClocksFreq(RCC_ClocksTypeDef *RCC_Clocks)\n获取系统各时钟的实际频率值。该函数基于寄存器配置和预定义常量（如HSI_VALUE、HSE_VALUE）计算频率，结果可能因晶振实际频率偏差而略有误差。\n参数：\n名称 类型 简述 RCC_Clocks RCC_ClocksTypeDef * 指向结构体的指针，函数将填充各时钟频率值 返回值：\n无\nRCC_AHBPeriphClockCmd # void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)\n使能或禁用AHB总线外设时钟。仅支持DMA1和SRAM。SRAM时钟仅在睡眠模式下可安全关闭，否则可能造成数据丢失。\n参数：\n名称 类型 简述 RCC_AHBPeriph uint32_t AHB外设，取值为RCC_AHBPeriph_DMA1或RCC_AHBPeriph_SRAM NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nRCC_APB2PeriphClockCmd # void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)\n使能或禁用APB2总线外设时钟。APB2外设包括GPIO、ADC、TIM1等高速外设，必须在使用前使能时钟。\n参数：\n名称 类型 简述 RCC_APB2Periph uint32_t APB2外设，取值为RCC_APB2Periph_AFIO、RCC_APB2Periph_GPIOA等 NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nRCC_APB1PeriphClockCmd # void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)\n使能或禁用APB1总线外设时钟。APB1外设包括TIM2、I2C1、WWDG等低速外设，使用前必须使能时钟。\n参数：\n名称 类型 简述 RCC_APB1Periph uint32_t APB1外设，取值为RCC_APB1Periph_TIM2、RCC_APB1Periph_I2C1等 NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nRCC_APB2PeriphResetCmd # void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)\n对APB2外设执行复位操作。复位后外设寄存器恢复默认值，常用于初始化或异常恢复。复位期间外设不可用。\n参数：\n名称 类型 简述 RCC_APB2Periph uint32_t APB2外设，取值同RCC_APB2PeriphClockCmd NewState FunctionalState ENABLE（复位）或DISABLE（释放复位） 返回值：\n无\nRCC_APB1PeriphResetCmd # void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)\n对APB1外设执行复位操作。复位后外设寄存器恢复默认值，常用于初始化或异常恢复。\n参数：\n名称 类型 简述 RCC_APB1Periph uint32_t APB1外设，取值同RCC_APB1PeriphClockCmd NewState FunctionalState ENABLE（复位）或DISABLE（释放复位） 返回值：\n无\nRCC_ClockSecuritySystemCmd # void RCC_ClockSecuritySystemCmd(FunctionalState NewState)\n启用或禁用时钟安全系统（CSS）。CSS在检测到HSE失效时自动切换至HSI并触发中断，防止系统因时钟丢失而失控。建议在使用HSE或PLL时始终启用。\n参数：\n名称 类型 简述 NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nRCC_MCOConfig # void RCC_MCOConfig(uint8_t RCC_MCO)\n配置MCO引脚输出的时钟源。MCO可用于调试或同步外部设备，输出频率等于所选源频率（无分频）。输出引脚需在GPIO中配置为复用推挽模式。\n参数：\n名称 类型 简述 RCC_MCO uint8_t MCO时钟源，取值为RCC_MCO_NoClock至RCC_MCO_PLLCLK 返回值：\n无\nRCC_GetFlagStatus # FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)\n查询RCC状态标志位。用于检测时钟是否就绪、复位源类型等。标志位由硬件自动置位，需手动清除复位相关标志。\n参数：\n名称 类型 简述 RCC_FLAG uint8_t 要查询的标志，取值为RCC_FLAG_HSIRDY等 返回值：\n值 说明 SET 标志被置位 RESET 标志未置位 RCC_ClearFlag # void RCC_ClearFlag(void)\n清除所有复位标志（PINRST、PORRST、SFTRST、IWDGRST、WWDGRST、LPWRRST）。调用后标志位被清零，仅在复位后需调用一次，避免误清。\n参数：\n无\n返回值：\n无\nRCC_GetITStatus # ITStatus RCC_GetITStatus(uint8_t RCC_IT)\n查询RCC中断是否发生。用于中断服务程序中判断具体中断源，如PLL就绪或CSS故障。\n参数：\n名称 类型 简述 RCC_IT uint8_t 要查询的中断源，取值为RCC_IT_LSIRDY等 返回值：\n值 说明 SET 中断已触发 RESET 中断未触发 RCC_ClearITPendingBit # void RCC_ClearITPendingBit(uint8_t RCC_IT)\n清除指定RCC中断的挂起位。必须在中断服务程序中调用，否则中断会持续触发。仅支持LSIRDY、HSIRDY、HSERDY、PLLRDY、CSS。\n参数：\n名称 类型 简述 RCC_IT uint8_t 要清除的中断源，取值为RCC_IT_LSIRDY等 返回值：\n无\n","externalUrl":null,"permalink":"/ch32v003_doc/15.ch32v00x_rcc.h/","section":"CH32V00x的软件文档","summary":"该文件定义了CH32V00x系列微控制器复位与时钟控制（RCC）外设的所有常量、枚举、结构体及函数原型。RCC模块负责系统时钟源的选择、分频、PLL配置、外设时钟使能、时钟安全系统（CSS）管理以及复位标志的读取与清除。通过本库函数，开发者可灵活配置系统主频、AHB/APB总线分频、ADC时钟源、MCO输出时钟等关键参数，是系统初始化和低功耗管理的核心模块。所有时钟配置均需遵循芯片时序约束，例如HSE不能在作为系统时钟时被关闭，PLL不能在作为系统时钟时被禁用。","title":"ch32v00x_rcc.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含 CH32V00x 系列微控制器 SPI 外设固件库的所有函数原型、常量定义、枚举类型和结构体定义。SPI（串行外设接口）是一种高速、全双工、同步的通信协议，广泛用于连接微控制器与传感器、存储器、显示器等外设。本库支持主从模式切换、CRC 校验、DMA 传输、软件 NSS 管理、单双线模式等高级功能，特别针对 CH32V00x 系列的硬件特性进行了优化。注意：在从模式下发送数据时，必须将 SPI_CPOL 设置为高电平（SPI_CPOL_High），这是由芯片内部时序逻辑决定的硬性要求。\n常量 # SPI_data_direction # 指定 SPI 数据传输方向，支持全双工、单向接收、单向发送和半双工模式。\n在半双工模式下，通过 SPI_BiDirectionalLineConfig() 动态切换收发方向，适用于节省引脚资源的场景。\n名称 值 简述 SPI_Direction_2Lines_FullDuplex 0x0000 全双工模式，使用独立的 MISO 和 MOSI 引脚 SPI_Direction_2Lines_RxOnly 0x0400 仅接收模式，MOSI 引脚禁用，仅使用 MISO SPI_Direction_1Line_Rx 0x8000 单线接收模式，仅使用一根数据线（MISO），发送被禁用 SPI_Direction_1Line_Tx 0xC000 单线发送模式，仅使用一根数据线（MOSI），接收被禁用 SPI_Direction_Rx 0xBFFF 用于 SPI_BiDirectionalLineConfig()，切换至接收方向（清除发送位） SPI_Direction_Tx 0x4000 用于 SPI_BiDirectionalLineConfig()，切换至发送方向（设置发送位） 以上所有值都强制转换为 uint16_t\nSPI_mode # 配置 SPI 工作模式为主机或从机。\n主模式下由 SPI 控制时钟（SCK），从模式下时钟由外部主机提供。从模式下若需主动发送数据，必须确保 SPI_CPOL=1 以匹配主机时钟极性。\n名称 值 简述 SPI_Mode_Master 0x0104 主机模式，主动产生时钟 SPI_Mode_Slave 0x0000 从机模式，被动响应时钟 以上所有值都强制转换为 uint16_t\nSPI_data_size # 设置每次传输的数据帧大小。\nCH32V00x 的 SPI 支持 8 位和 16 位两种帧格式，16 位模式下可一次传输两个字节，提高吞吐率，但需确保外设兼容。\n名称 值 简述 SPI_DataSize_16b 0x0800 16 位数据帧格式 SPI_DataSize_8b 0x0000 8 位数据帧格式（默认） 以上所有值都强制转换为 uint16_t\nSPI_Clock_Polarity # 设置 SPI 时钟的稳态电平（CPOL）。\nCPOL=0 表示空闲时钟为低电平，CPOL=1 表示空闲时钟为高电平。在从模式下发送数据时，必须与主机的 CPOL 一致，否则通信失败。\n名称 值 简述 SPI_CPOL_Low 0x0000 时钟空闲时为低电平 SPI_CPOL_High 0x0002 时钟空闲时为高电平（从模式发送数据时必须设置） 以上所有值都强制转换为 uint16_t\nSPI_Clock_Phase # 设置时钟相位（CPHA），决定数据采样发生在时钟的第几个边沿。\nCPHA=0：第一个时钟边沿采样；CPHA=1：第二个时钟边沿采样。必须与主机配置一致。\n名称 值 简述 SPI_CPHA_1Edge 0x0000 在时钟第一个边沿采样数据 SPI_CPHA_2Edge 0x0001 在时钟第二个边沿采样数据 以上所有值都强制转换为 uint16_t\nSPI_Slave_Select_management # 配置 NSS（从机选择）信号的管理方式。\n硬件管理由芯片自动控制 NSS 引脚，软件管理通过 SPI_NSSInternalSoftwareConfig() 手动控制 SSI 位，适用于多从机或无物理 NSS 引脚的场景。\n名称 值 简述 SPI_NSS_Soft 0x0200 软件管理 NSS，使用 SSI 位控制 SPI_NSS_Hard 0x0000 硬件管理 NSS，使用外部引脚 以上所有值都强制转换为 uint16_t\nSPI_BaudRate_Prescaler # 设置 SPI 时钟分频系数，决定 SCK 频率。\nSCK = PCLK / (prescaler)，主模式下有效。从模式下时钟由主机决定，此参数仅影响发送速率。\n名称 值 简述 SPI_BaudRatePrescaler_2 0x0000 分频系数为 2 SPI_BaudRatePrescaler_4 0x0008 分频系数为 4 SPI_BaudRatePrescaler_8 0x0010 分频系数为 8 SPI_BaudRatePrescaler_16 0x0018 分频系数为 16 SPI_BaudRatePrescaler_32 0x0020 分频系数为 32 SPI_BaudRatePrescaler_64 0x0028 分频系数为 64 SPI_BaudRatePrescaler_128 0x0030 分频系数为 128 SPI_BaudRatePrescaler_256 0x0038 分频系数为 256 以上所有值都强制转换为 uint16_t\nSPI_MSB_LSB transmission # 设置数据传输的起始位顺序。\n注意：SPI_FirstBit_LSB 在从模式下不被支持，仅在主模式下可用。\n名称 值 简述 SPI_FirstBit_MSB 0x0000 先发送最高位（MSB） SPI_FirstBit_LSB 0x0080 先发送最低位（LSB），仅主模式支持 以上所有值都强制转换为 uint16_t\nSPI_I2S_DMA_transfer_requests # 配置 SPI 的 DMA 请求使能，用于高速数据传输。\nDMA 可在后台自动完成数据收发，避免 CPU 轮询，提高系统效率。\n名称 值 简述 SPI_I2S_DMAReq_Tx 0x0002 使能发送 DMA 请求 SPI_I2S_DMAReq_Rx 0x0001 使能接收 DMA 请求 以上所有值都强制转换为 uint16_t\nSPI_NSS_internal_software_management # 软件控制 NSS 信号的内部状态（SSI 位）。\n仅在 SPI_NSS_Soft 模式下有效，用于模拟从机选择信号。\n名称 值 简述 SPI_NSSInternalSoft_Set 0x0100 将内部 NSS 信号置为低电平（选中从机） SPI_NSSInternalSoft_Reset 0xFEFF 将内部 NSS 信号置为高电平（取消选中） 以上所有值都强制转换为 uint16_t\nSPI_CRC_Transmit_Receive # 指定读取 CRC 寄存器的类型（发送或接收）。\n用于调试或校验 CRC 值，配合 SPI_GetCRC() 使用。\n名称 值 简述 SPI_CRC_Tx 0x00 读取发送 CRC 寄存器（TCRCR） SPI_CRC_Rx 0x01 读取接收 CRC 寄存器（RCRCR） 以上所有值都强制转换为 uint8_t\nSPI_direction_transmit_receive # 用于 SPI_BiDirectionalLineConfig() 的方向控制掩码，与 SPI_Direction_Tx/Rx 一致。\n在半双工模式下，通过此常量切换数据线方向，实现单线双向通信。\n名称 值 简述 SPI_Direction_Rx 0xBFFF 设置为接收方向（清除发送位） SPI_Direction_Tx 0x4000 设置为发送方向（设置发送位） 以上所有值都强制转换为 uint16_t\nSPI_I2S_interrupts_definition # SPI/I2S 中断标志位定义，用于 SPI_I2S_ITConfig() 和 SPI_I2S_GetITStatus()。\n名称 值 简述 SPI_I2S_IT_TXE 0x71 发送缓冲区空中断 SPI_I2S_IT_RXNE 0x60 接收缓冲区非空中断 SPI_I2S_IT_ERR 0x50 错误中断（包含 OVR、CRCERR、MODF） SPI_I2S_IT_OVR 0x56 溢出中断（接收缓冲区被覆盖） SPI_IT_MODF 0x55 模式故障中断（主机/从机模式冲突） SPI_IT_CRCERR 0x54 CRC 校验错误中断 I2S_IT_UDR 0x53 I2S 下溢中断（仅在 I2S 模式下有效） 以上所有值都强制转换为 uint8_t\nSPI_I2S_flags_definition # SPI/I2S 状态标志位定义，用于 SPI_I2S_GetFlagStatus()。\n名称 值 简述 SPI_I2S_FLAG_RXNE 0x0001 接收缓冲区非空 SPI_I2S_FLAG_TXE 0x0002 发送缓冲区空 I2S_FLAG_CHSIDE 0x0004 I2S 通道侧标志（左/右声道） I2S_FLAG_UDR 0x0008 I2S 下溢标志 SPI_FLAG_CRCERR 0x0010 CRC 校验错误 SPI_FLAG_MODF 0x0020 模式故障标志 SPI_I2S_FLAG_OVR 0x0040 接收溢出标志 SPI_I2S_FLAG_BSY 0x0080 SPI 忙状态标志（传输中） 以上所有值都强制转换为 uint16_t\n枚举 # 无\n结构体 # SPI_InitTypeDef # SPI 初始化结构体，用于配置 SPI 外设的所有工作参数。\n该结构体在 SPI_Init() 中被读取并写入 SPI 控制寄存器，SPI_StructInit() 会将其所有成员初始化为默认值。\n名称 类型 简述 SPI_Direction uint16_t 指定数据传输方向，如全双工、单线发送等 SPI_Mode uint16_t 指定主/从模式 SPI_DataSize uint16_t 指定数据帧大小（8位或16位） SPI_CPOL uint16_t 指定时钟极性（空闲电平） SPI_CPHA uint16_t 指定时钟相位（采样边沿） SPI_NSS uint16_t 指定 NSS 管理方式（硬件或软件） SPI_BaudRatePrescaler uint16_t 指定时钟分频系数，控制 SCK 频率 SPI_FirstBit uint16_t 指定数据传输起始位（MSB 或 LSB） SPI_CRCPolynomial uint16_t 指定 CRC 计算使用的多项式（默认为 7） 函数 # SPI_I2S_DeInit # void SPI_I2S_DeInit(SPI_TypeDef *SPIx)\n将指定的 SPI 外设寄存器恢复为复位默认值。通过复位 APB2 总线上的 SPI 时钟实现，确保寄存器状态完全清除。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 返回值：\n无\nSPI_Init # void SPI_Init(SPI_TypeDef *SPIx, SPI_InitTypeDef *SPI_InitStruct)\n根据传入的初始化结构体配置 SPI 外设。该函数会将结构体中的所有参数写入 SPI 控制寄存器（CTLR1 和 CRCR），并自动启用 SPI。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_InitStruct SPI_InitTypeDef * 指向包含配置参数的结构体指针 返回值：\n无\n注意：在从模式下发送数据时，必须确保 SPI_CPOL=1，否则通信将失败。\nSPI_StructInit # void SPI_StructInit(SPI_InitTypeDef *SPI_InitStruct)\n将 SPI_InitTypeDef 结构体的所有成员初始化为默认值，便于用户按需修改。\n参数：\n名称 类型 简述 SPI_InitStruct SPI_InitTypeDef * 指向待初始化的结构体指针 返回值：\n无\n默认配置：全双工、从模式、8位数据、CPOL=0、CPHA=0、分频=2、MSB 优先、CRC 多项式=7。\nSPI_Cmd # void SPI_Cmd(SPI_TypeDef *SPIx, FunctionalState NewState)\n启用或禁用 SPI 外设。通过设置或清除 CTLR1 寄存器中的 SPE 位实现。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\nSPI_I2S_ITConfig # void SPI_I2S_ITConfig(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState)\n启用或禁用指定的 SPI 中断源。通过设置或清除 CTLR2 寄存器中的对应中断使能位实现。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_I2S_IT uint8_t 中断源，如 SPI_I2S_IT_TXE、SPI_I2S_IT_RXNE 等 NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\nSPI_I2S_DMACmd # void SPI_I2S_DMACmd(SPI_TypeDef *SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState)\n启用或禁用 SPI 的 DMA 传输请求。DMA 可在后台自动收发数据，减轻 CPU 负担。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_I2S_DMAReq uint16_t DMA 请求类型：SPI_I2S_DMAReq_Tx 或 SPI_I2S_DMAReq_Rx NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\nSPI_I2S_SendData # void SPI_I2S_SendData(SPI_TypeDef *SPIx, uint16_t Data)\n向 SPI 数据寄存器写入待发送数据，触发一次传输。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 Data uint16_t 要发送的数据（8位或16位，取决于 SPI_DataSize） 返回值：\n无\nSPI_I2S_ReceiveData # uint16_t SPI_I2S_ReceiveData(SPI_TypeDef *SPIx)\n读取 SPI 数据寄存器中的最近接收数据。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 返回值：\nuint16_t：接收到的数据值（8位或16位，取决于配置）\nSPI_NSSInternalSoftwareConfig # void SPI_NSSInternalSoftwareConfig(SPI_TypeDef *SPIx, uint16_t SPI_NSSInternalSoft)\n在软件管理 NSS 模式下，通过 SSI 位手动控制从机选择信号。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_NSSInternalSoft uint16_t SPI_NSSInternalSoft_Set（选中）或 SPI_NSSInternalSoft_Reset（取消） 返回值：\n无\nSPI_SSOutputCmd # void SPI_SSOutputCmd(SPI_TypeDef *SPIx, FunctionalState NewState)\n启用或禁用 SPI 主模式下的 SS（从机选择）输出引脚。仅在主模式下有效。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\nSPI_DataSizeConfig # void SPI_DataSizeConfig(SPI_TypeDef *SPIx, uint16_t SPI_DataSize)\n动态修改 SPI 数据帧大小（8位或16位），无需重新初始化整个外设。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_DataSize uint16_t SPI_DataSize_8b 或 SPI_DataSize_16b 返回值：\n无\nSPI_TransmitCRC # void SPI_TransmitCRC(SPI_TypeDef *SPIx)\n在下一次传输中自动发送 CRC 校验值。需先启用 CRC 计算（SPI_CalculateCRC()）。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 返回值：\n无\nSPI_CalculateCRC # void SPI_CalculateCRC(SPI_TypeDef *SPIx, FunctionalState NewState)\n启用或禁用 SPI 在传输过程中自动计算 CRC 校验值。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\nSPI_GetCRC # uint16_t SPI_GetCRC(SPI_TypeDef *SPIx, uint8_t SPI_CRC)\n读取 SPI 的发送或接收 CRC 寄存器值，用于校验或调试。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_CRC uint8_t SPI_CRC_Tx（发送 CRC）或 SPI_CRC_Rx（接收 CRC） 返回值：\nuint16_t：CRC 寄存器的当前值\nSPI_GetCRCPolynomial # uint16_t SPI_GetCRCPolynomial(SPI_TypeDef *SPIx)\n读取 SPI 的 CRC 多项式寄存器值，用于验证配置是否正确。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 返回值：\nuint16_t：CRC 多项式值（默认为 7）\nSPI_BiDirectionalLineConfig # void SPI_BiDirectionalLineConfig(SPI_TypeDef *SPIx, uint16_t SPI_Direction)\n在单线半双工模式下切换数据线方向（发送或接收）。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_Direction uint16_t SPI_Direction_Tx 或 SPI_Direction_Rx 返回值：\n无\n注意：仅在 SPI_Direction_1Line_Rx 或 SPI_Direction_1Line_Tx 模式下有效。\nSPI_I2S_GetFlagStatus # FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG)\n检查指定的 SPI 状态标志是否被置位。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_I2S_FLAG uint16_t 标志位，如 SPI_I2S_FLAG_RXNE、SPI_I2S_FLAG_BSY 等 返回值：\nFlagStatus：SET（标志置位）或 RESET（标志未置位）\nSPI_I2S_ClearFlag # void SPI_I2S_ClearFlag(SPI_TypeDef *SPIx, uint16_t SPI_I2S_FLAG)\n清除指定的 SPI 状态标志。\n注意：OVR 和 MODF 标志需特殊清除序列，详见函数注释。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_I2S_FLAG uint16_t 要清除的标志，如 SPI_FLAG_CRCERR 返回值：\n无\nSPI_I2S_GetITStatus # ITStatus SPI_I2S_GetITStatus(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT)\n检查指定的 SPI 中断是否发生（中断标志 + 中断使能位）。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_I2S_IT uint8_t 中断源，如 SPI_I2S_IT_RXNE、SPI_IT_CRCERR 等 返回值：\nITStatus：SET（中断发生）或 RESET（未发生）\nSPI_I2S_ClearITPendingBit # void SPI_I2S_ClearITPendingBit(SPI_TypeDef *SPIx, uint8_t SPI_I2S_IT)\n清除指定的 SPI 中断挂起位。\n注意：OVR、MODF、UDR 等中断需配合读取寄存器才能清除，详见注释。\n参数：\n名称 类型 简述 SPIx SPI_TypeDef * 选择 SPI 外设，仅支持 SPI1 SPI_I2S_IT uint8_t 要清除的中断，如 SPI_IT_CRCERR 返回值：\n无\n","externalUrl":null,"permalink":"/ch32v003_doc/16.ch32v00x_spi.h/","section":"CH32V00x的软件文档","summary":"该文件包含 CH32V00x 系列微控制器 SPI 外设固件库的所有函数原型、常量定义、枚举类型和结构体定义。SPI（串行外设接口）是一种高速、全双工、同步的通信协议，广泛用于连接微控制器与传感器、存储器、显示器等外设。本库支持主从模式切换、CRC 校验、DMA 传输、软件 NSS 管理、单双线模式等高级功能，特别针对 CH32V00x 系列的硬件特性进行了优化。注意：在从模式下发送数据时，必须将 SPI_CPOL 设置为高电平（SPI_CPOL_High），这是由芯片内部时序逻辑决定的硬性要求。","title":"ch32v00x_spi.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件定义了CH32V00x系列微控制器定时器（TIM）固件库的所有常量、枚举、结构体及函数原型，用于配置和控制TIM1与TIM2定时器外设。支持定时器基本计数、PWM输出、输入捕获、编码器接口、外部时钟同步、死区控制、互补输出、DMA传输及中断管理等高级功能。所有配置均通过结构体初始化和寄存器位操作实现，适用于电机控制、电源管理、精密测频与信号生成等应用场景。TIM1为高级定时器，支持互补输出与死区时间；TIM2为通用定时器，功能受限但资源更紧凑。\n常量 # TIM_Output_Compare_and_PWM_modes # 定时器输出比较与PWM模式配置\n这些模式决定了通道输出信号的行为，适用于生成精确脉宽、对称PWM或事件触发信号。PWM模式在计数器匹配时翻转输出，适合驱动电机或LED调光；定时模式用于生成事件而不改变输出电平，常用于触发DMA或中断。\n名称 值 简述 TIM_OCMode_Timing 0x0000 定时模式：输出保持不变，仅用于触发事件 TIM_OCMode_Active 0x0010 主动模式：计数器匹配时输出为高电平 TIM_OCMode_Inactive 0x0020 被动模式：计数器匹配时输出为低电平 TIM_OCMode_Toggle 0x0030 翻转模式：计数器匹配时输出电平翻转 TIM_OCMode_PWM1 0x0060 PWM模式1：向上计数时匹配则输出低，否则高 TIM_OCMode_PWM2 0x0070 PWM模式2：向上计数时匹配则输出高，否则低 以上所有值都强制转换为uint16_t\nTIM_One_Pulse_Mode # 单脉冲模式配置\n用于生成单次脉冲序列，适用于需要精确控制脉冲宽度和间隔的场合，如触发ADC采样或驱动继电器。单次模式在计数完成后自动停止，重复模式则循环运行。\n名称 值 简述 TIM_OPMode_Single 0x0008 单次模式：计数器达到自动重载值后停止 TIM_OPMode_Repetitive 0x0000 重复模式：计数器循环运行，持续产生脉冲 以上所有值都强制转换为uint16_t\nTIM_Channel # 定时器通道选择\n用于指定操作的通道（1~4），不同通道可独立配置输出模式、捕获极性或DMA源。TIM1支持全部4通道，TIM2仅支持前2通道。\n名称 值 简述 TIM_Channel_1 0x0000 选择通道1 TIM_Channel_2 0x0004 选择通道2 TIM_Channel_3 0x0008 选择通道3 TIM_Channel_4 0x000C 选择通道4 以上所有值都强制转换为uint16_t\nTIM_Clock_Division_CKD # 时钟分频系数\n用于设置定时器内部时钟（TIMxCLK）与计数器时钟（CK_CNT）的分频比，影响计数精度和响应速度。分频后时钟用于死区生成、滤波和同步逻辑。\n名称 值 简述 TIM_CKD_DIV1 0x0000 不分频：CK_CNT = TIMxCLK TIM_CKD_DIV2 0x0100 分频2：CK_CNT = TIMxCLK/2 TIM_CKD_DIV4 0x0200 分频4：CK_CNT = TIMxCLK/4 以上所有值都强制转换为uint16_t\nTIM_Counter_Mode # 计数器工作模式\n定义定时器如何递增或递减计数，决定PWM波形的对称性与频率特性。中心对齐模式可降低电磁干扰，适用于电机驱动。\n名称 值 简述 TIM_CounterMode_Up 0x0000 向上计数：从0计数至自动重载值后重置 TIM_CounterMode_Down 0x0010 向下计数：从自动重载值递减至0后重置 TIM_CounterMode_CenterAligned1 0x0020 中心对齐模式1：先向上计数，再向下计数，每周期触发两次更新 TIM_CounterMode_CenterAligned2 0x0040 中心对齐模式2：先向下计数，再向上计数，每周期触发两次更新 TIM_CounterMode_CenterAligned3 0x0060 中心对齐模式3：每计数周期触发两次更新，方向交替 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_Polarity # 输出比较极性\n控制输出通道（OCx）的逻辑电平极性，用于匹配外部电路的驱动需求（如N沟道MOSFET需低有效）。\n名称 值 简述 TIM_OCPolarity_High 0x0000 高有效：匹配时输出高电平（根据模式） TIM_OCPolarity_Low 0x0002 低有效：匹配时输出低电平（根据模式） 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_N_Polarity # 互补输出极性（仅TIM1）\n控制互补通道（OCxN）的极性，与主通道配合实现推挽输出。在H桥驱动中，主通道与互补通道需反相以避免直通。\n名称 值 简述 TIM_OCNPolarity_High 0x0000 高有效：互补输出匹配时为高电平 TIM_OCNPolarity_Low 0x0008 低有效：互补输出匹配时为低电平 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_state # 输出比较使能状态\n启用或禁用主输出通道（OCx），用于动态控制PWM输出的启停，无需重新配置寄存器。\n名称 值 简述 TIM_OutputState_Disable 0x0000 禁用输出通道 TIM_OutputState_Enable 0x0001 启用输出通道 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_N_state # 互补输出使能状态（仅TIM1）\n启用或禁用互补输出通道（OCxN），通常与主通道同步控制，用于实现安全关断或死区管理。\n名称 值 简述 TIM_OutputNState_Disable 0x0000 禁用互补输出通道 TIM_OutputNState_Enable 0x0004 启用互补输出通道 以上所有值都强制转换为uint16_t\nTIM_Capture_Compare_state # 捕获/比较通道使能状态\n控制输入捕获或输出比较通道的使能，用于动态启用/禁用通道功能，如在测量完成后关闭捕获。\n名称 值 简述 TIM_CCx_Enable 0x0001 启用捕获/比较通道 TIM_CCx_Disable 0x0000 禁用捕获/比较通道 以上所有值都强制转换为uint16_t\nTIM_Capture_Compare_N_state # 互补捕获/比较通道使能状态（仅TIM1）\n控制互补通道的使能，用于同步管理主/互补通道的输入捕获功能。\n名称 值 简述 TIM_CCxN_Enable 0x0004 启用互补捕获/比较通道 TIM_CCxN_Disable 0x0000 禁用互补捕获/比较通道 以上所有值都强制转换为uint16_t\nBreak_Input_enable_disable # 刹车输入使能\n启用外部刹车信号（BKIN），用于紧急停机。当刹车信号有效时，立即关闭所有输出通道（含互补），并可触发中断。\n名称 值 简述 TIM_Break_Enable 0x1000 启用刹车输入功能 TIM_Break_Disable 0x0000 禁用刹车输入功能 以上所有值都强制转换为uint16_t\nBreak_Polarity # 刹车输入极性\n定义刹车信号的触发条件，通常连接外部故障检测电路（如过流、过温传感器）。\n名称 值 简述 TIM_BreakPolarity_Low 0x0000 低电平有效：刹车信号为低时触发 TIM_BreakPolarity_High 0x2000 高电平有效：刹车信号为高时触发 以上所有值都强制转换为uint16_t\nTIM_AOE_Bit_Set_Reset # 自动输出使能（仅TIM1）\n启用后，当定时器使能（CEN=1）时，自动激活主输出使能（MOE），无需手动设置BDTR寄存器的MOE位，简化启动流程。\n名称 值 简述 TIM_AutomaticOutput_Enable 0x4000 启用自动输出使能 TIM_AutomaticOutput_Disable 0x0000 禁用自动输出使能 以上所有值都强制转换为uint16_t\nLock_level # 锁定级别\n用于防止意外修改关键配置（如死区、刹车、互补输出），共4级，级别越高锁定越强，仅可通过复位清除。\n名称 值 简述 TIM_LOCKLevel_OFF 0x0000 无锁定：可自由修改所有参数 TIM_LOCKLevel_1 0x0100 锁定级别1：锁定OCx、OCxN、CCx、CCxN配置 TIM_LOCKLevel_2 0x0200 锁定级别2：锁定死区、刹车、AOE、OSSI、OSSR TIM_LOCKLevel_3 0x0300 锁定级别3：锁定所有配置，仅复位可解除 以上所有值都强制转换为uint16_t\nOSSI_Off_State_Selection_for_Idle_mode_state # 空闲状态关断选择（仅TIM1）\n定义在空闲状态（如刹车或停止）时，主/互补输出的电平状态。用于防止电机在停机时产生意外电流。\n名称 值 简述 TIM_OSSIState_Enable 0x0400 启用空闲关断：输出强制为低电平 TIM_OSSIState_Disable 0x0000 禁用空闲关断：输出保持最后状态 以上所有值都强制转换为uint16_t\nOSSR_Off_State_Selection_for_Run_mode_state # 运行状态关断选择（仅TIM1）\n定义在运行状态下，若发生刹车或故障时，输出的关断行为。与OSSI配合实现安全关断策略。\n名称 值 简述 TIM_OSSRState_Enable 0x0800 启用运行关断：故障时输出强制为低 TIM_OSSRState_Disable 0x0000 禁用运行关断：故障时输出保持原状态 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_Idle_State # 输出比较空闲状态（仅TIM1）\n定义主通道在空闲状态（如单脉冲结束或刹车）时的输出电平。\n名称 值 简述 TIM_OCIdleState_Set 0x0100 空闲时输出高电平 TIM_OCIdleState_Reset 0x0000 空闲时输出低电平 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_N_Idle_State # 互补输出比较空闲状态（仅TIM1）\n定义互补通道在空闲状态时的输出电平，通常与主通道反相以确保安全。\n名称 值 简述 TIM_OCNIdleState_Set 0x0200 空闲时互补输出高电平 TIM_OCNIdleState_Reset 0x0000 空闲时互补输出低电平 以上所有值都强制转换为uint16_t\nTIM_Input_Capture_Polarity # 输入捕获极性\n定义输入捕获通道（TIx）的触发边沿，支持上升沿、下降沿或双边沿检测，用于精确测量脉冲宽度或频率。\n名称 值 简述 TIM_ICPolarity_Rising 0x0000 上升沿触发捕获 TIM_ICPolarity_Falling 0x0002 下降沿触发捕获 TIM_ICPolarity_BothEdge 0x000A 双边沿触发捕获（每边沿均记录） 以上所有值都强制转换为uint16_t\nTIM_Input_Capture_Selection # 输入捕获映射选择\n定义输入引脚（TI1TI4）与内部捕获单元（IC1IC4）的映射关系，支持直接、交叉或外部触发源连接。\n名称 值 简述 TIM_ICSelection_DirectTI 0x0001 TIx直接映射到ICx（如TI1→IC1） TIM_ICSelection_IndirectTI 0x0002 TIx交叉映射到ICx（如TI1→IC2） TIM_ICSelection_TRC 0x0003 TIx映射到内部触发TRC（用于从模式控制） 以上所有值都强制转换为uint16_t\nTIM_Input_Capture_Prescaler # 输入捕获预分频\n降低捕获频率，避免高速信号导致的溢出，适用于测量低频信号或减少中断负载。\n名称 值 简述 TIM_ICPSC_DIV1 0x0000 每边沿捕获一次 TIM_ICPSC_DIV2 0x0004 每2个边沿捕获一次 TIM_ICPSC_DIV4 0x0008 每4个边沿捕获一次 TIM_ICPSC_DIV8 0x000C 每8个边沿捕获一次 以上所有值都强制转换为uint16_t\nTIM_interrupt_sources # 中断源标识\n用于使能或查询定时器的中断请求，支持更新、捕获、比较、触发、刹车等事件中断。\n名称 值 简述 TIM_IT_Update 0x0001 更新中断（计数器溢出/下溢） TIM_IT_CC1 0x0002 通道1捕获/比较中断 TIM_IT_CC2 0x0004 通道2捕获/比较中断 TIM_IT_CC3 0x0008 通道3捕获/比较中断 TIM_IT_CC4 0x0010 通道4捕获/比较中断 TIM_IT_COM 0x0020 换向中断（仅TIM1） TIM_IT_Trigger 0x0040 触发中断（ETR或内部触发） TIM_IT_Break 0x0080 刹车中断（仅TIM1） 以上所有值都强制转换为uint16_t\nTIM_DMA_Base_address # DMA基地址选择\n指定DMA传输的目标寄存器地址，用于批量传输定时器配置或状态，减少CPU负载。\n名称 值 简述 TIM_DMABase_CR1 0x0000 控制寄存器1（CTLR1） TIM_DMABase_CR2 0x0001 控制寄存器2（CTLR2） TIM_DMABase_SMCR 0x0002 从模式控制寄存器（SMCFGR） TIM_DMABase_DIER 0x0003 DMA/中断使能寄存器（DMAINTENR） TIM_DMABase_SR 0x0004 状态寄存器（INTFR） TIM_DMABase_EGR 0x0005 事件生成寄存器（SWEVGR） TIM_DMABase_CCMR1 0x0006 捕获/比较模式寄存器1（CHCTLR1） TIM_DMABase_CCMR2 0x0007 捕获/比较模式寄存器2（CHCTLR2） TIM_DMABase_CCER 0x0008 捕获/比较使能寄存器（CCER） TIM_DMABase_CNT 0x0009 计数器寄存器（CNT） TIM_DMABase_PSC 0x000A 预分频器寄存器（PSC） TIM_DMABase_ARR 0x000B 自动重载寄存器（ATRLR） TIM_DMABase_RCR 0x000C 重复计数器寄存器（RPTCR） TIM_DMABase_CCR1 0x000D 捕获/比较寄存器1（CH1CVR） TIM_DMABase_CCR2 0x000E 捕获/比较寄存器2（CH2CVR） TIM_DMABase_CCR3 0x000F 捕获/比较寄存器3（CH3CVR） TIM_DMABase_CCR4 0x0010 捕获/比较寄存器4（CH4CVR） TIM_DMABase_BDTR 0x0011 刹车与死区寄存器（BDTR） TIM_DMABase_DCR 0x0012 DMA控制寄存器（DMACFGR） 以上所有值都强制转换为uint16_t\nTIM_DMA_Burst_Length # DMA突发传输长度\n定义单次DMA传输的数据宽度（以寄存器为单位），支持1~18次连续传输，适用于批量配置多个寄存器。\n名称 值 简述 TIM_DMABurstLength_1Transfer 0x0000 1次传输 TIM_DMABurstLength_2Transfers 0x0100 2次传输 TIM_DMABurstLength_3Transfers 0x0200 3次传输 TIM_DMABurstLength_4Transfers 0x0300 4次传输 TIM_DMABurstLength_5Transfers 0x0400 5次传输 TIM_DMABurstLength_6Transfers 0x0500 6次传输 TIM_DMABurstLength_7Transfers 0x0600 7次传输 TIM_DMABurstLength_8Transfers 0x0700 8次传输 TIM_DMABurstLength_9Transfers 0x0800 9次传输 TIM_DMABurstLength_10Transfers 0x0900 10次传输 TIM_DMABurstLength_11Transfers 0x0A00 11次传输 TIM_DMABurstLength_12Transfers 0x0B00 12次传输 TIM_DMABurstLength_13Transfers 0x0C00 13次传输 TIM_DMABurstLength_14Transfers 0x0D00 14次传输 TIM_DMABurstLength_15Transfers 0x0E00 15次传输 TIM_DMABurstLength_16Transfers 0x0F00 16次传输 TIM_DMABurstLength_17Transfers 0x1000 17次传输 TIM_DMABurstLength_18Transfers 0x1100 18次传输 以上所有值都强制转换为uint16_t\nTIM_DMA_sources # DMA请求源\n指定触发DMA传输的事件源，通常与中断源对应，用于在事件发生时自动传输数据。\n名称 值 简述 TIM_DMA_Update 0x0100 更新事件触发DMA TIM_DMA_CC1 0x0200 通道1捕获/比较事件触发DMA TIM_DMA_CC2 0x0400 通道2捕获/比较事件触发DMA TIM_DMA_CC3 0x0800 通道3捕获/比较事件触发DMA TIM_DMA_CC4 0x1000 通道4捕获/比较事件触发DMA TIM_DMA_COM 0x2000 换向事件触发DMA（仅TIM1） TIM_DMA_Trigger 0x4000 触发事件触发DMA 以上所有值都强制转换为uint16_t\nTIM_External_Trigger_Prescaler # 外部触发预分频\n对ETR（外部触发输入）信号进行分频，降低触发频率，适用于慢速外部信号同步。\n名称 值 简述 TIM_ExtTRGPSC_OFF 0x0000 无分频 TIM_ExtTRGPSC_DIV2 0x1000 分频2 TIM_ExtTRGPSC_DIV4 0x2000 分频4 TIM_ExtTRGPSC_DIV8 0x3000 分频8 以上所有值都强制转换为uint16_t\nTIM_Internal_Trigger_Selection # 内部触发源选择\n选择定时器的从模式触发源，用于同步多个定时器或实现复杂时序控制。\n名称 值 简述 TIM_TS_ITR0 0x0000 内部触发0（ITR0） TIM_TS_ITR1 0x0010 内部触发1（ITR1） TIM_TS_ITR2 0x0020 内部触发2（ITR2） TIM_TS_ITR3 0x0030 内部触发3（ITR3） TIM_TS_TI1F_ED 0x0040 TI1边沿检测器 TIM_TS_TI1FP1 0x0050 滤波后的TI1输入 TIM_TS_TI2FP2 0x0060 滤波后的TI2输入 TIM_TS_ETRF 0x0070 外部触发输入（ETR） 以上所有值都强制转换为uint16_t\nTIM_TIx_External_Clock_Source # TIx外部时钟源选择\n定义TI1或TI2作为外部时钟输入时的信号源，用于实现编码器接口或外部频率测量。\n名称 值 简述 TIM_TIxExternalCLK1Source_TI1 0x0050 使用TI1作为外部时钟 TIM_TIxExternalCLK1Source_TI2 0x0060 使用TI2作为外部时钟 TIM_TIxExternalCLK1Source_TI1ED 0x0040 使用TI1边沿检测器作为外部时钟 以上所有值都强制转换为uint16_t\nTIM_External_Trigger_Polarity # 外部触发极性\n定义ETR（外部触发）信号的触发边沿，用于同步外部事件。\n名称 值 简述 TIM_ExtTRGPolarity_Inverted 0x8000 反相：下降沿触发 TIM_ExtTRGPolarity_NonInverted 0x0000 非反相：上升沿触发 以上所有值都强制转换为uint16_t\nTIM_Prescaler_Reload_Mode # 预分频器重载模式\n控制预分频器更新时机，影响计数精度和实时性。\n名称 值 简述 TIM_PSCReloadMode_Update 0x0000 在更新事件时重载（同步） TIM_PSCReloadMode_Immediate 0x0001 立即重载（异步） 以上所有值都强制转换为uint16_t\nTIM_Forced_Action # 强制输出动作\n强制输出通道为高或低电平，用于调试或紧急控制，绕过正常PWM逻辑。\n名称 值 简述 TIM_ForcedAction_Active 0x0050 强制输出为高电平 TIM_ForcedAction_InActive 0x0040 强制输出为低电平 以上所有值都强制转换为uint16_t\nTIM_Encoder_Mode # 编码器接口模式\n配置定时器作为编码器接口，支持单相、双相计数，用于位置反馈。\n名称 值 简述 TIM_EncoderMode_TI1 0x0001 仅TI1边沿计数，TI2电平决定方向 TIM_EncoderMode_TI2 0x0002 仅TI2边沿计数，TI1电平决定方向 TIM_EncoderMode_TI12 0x0003 TI1和TI2边沿均计数，四倍分辨率 以上所有值都强制转换为uint16_t\nTIM_Event_Source # 事件源标识\n用于软件生成事件（TIM_GenerateEvent），触发更新、捕获、换向等动作。\n名称 值 简述 TIM_EventSource_Update 0x0001 更新事件 TIM_EventSource_CC1 0x0002 通道1捕获/比较事件 TIM_EventSource_CC2 0x0004 通道2捕获/比较事件 TIM_EventSource_CC3 0x0008 通道3捕获/比较事件 TIM_EventSource_CC4 0x0010 通道4捕获/比较事件 TIM_EventSource_COM 0x0020 换向事件（仅TIM1） TIM_EventSource_Trigger 0x0040 触发事件 TIM_EventSource_Break 0x0080 刹车事件（仅TIM1） 以上所有值都强制转换为uint16_t\nTIM_Update_Source # 更新源选择\n定义更新事件的触发条件，影响中断和DMA的触发时机。\n名称 值 简述 TIM_UpdateSource_Global 0x0000 任何更新事件（包括UG位或从模式触发） TIM_UpdateSource_Regular 0x0001 仅计数器溢出/下溢触发更新 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_Preload_State # 输出比较预加载使能\n启用后，CCR寄存器的值在下一个更新事件时才加载，避免中间状态导致的脉冲失真。\n名称 值 简述 TIM_OCPreload_Enable 0x0008 启用预加载 TIM_OCPreload_Disable 0x0000 禁用预加载（立即生效） 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_Fast_State # 输出比较快速模式使能\n启用后，输出在匹配后立即响应，减少延迟，适用于高速PWM控制。\n名称 值 简述 TIM_OCFast_Enable 0x0004 启用快速模式 TIM_OCFast_Disable 0x0000 禁用快速模式（标准模式） 以上所有值都强制转换为uint16_t\nTIM_Output_Compare_Clear_State # 输出比较清除使能\n启用后，外部事件（如刹车或触发）可清除OCREF信号，实现安全关断。\n名称 值 简述 TIM_OCClear_Enable 0x0080 启用清除功能 TIM_OCClear_Disable 0x0000 禁用清除功能 以上所有值都强制转换为uint16_t\nTIM_Trigger_Output_Source # 触发输出源选择\n定义TRGO（触发输出）信号的来源，用于同步其他定时器或外设。\n名称 值 简述 TIM_TRGOSource_Reset 0x0000 UG位触发（软件或硬件更新） TIM_TRGOSource_Enable 0x0010 CEN位触发（定时器使能） TIM_TRGOSource_Update 0x0020 更新事件触发 TIM_TRGOSource_OC1 0x0030 通道1捕获/比较事件触发 TIM_TRGOSource_OC1Ref 0x0040 OC1REF信号触发 TIM_TRGOSource_OC2Ref 0x0050 OC2REF信号触发 TIM_TRGOSource_OC3Ref 0x0060 OC3REF信号触发 TIM_TRGOSource_OC4Ref 0x0070 OC4REF信号触发 以上所有值都强制转换为uint16_t\nTIM_Slave_Mode # 从模式选择\n定义定时器作为从设备时的同步行为，实现复杂时序控制。\n名称 值 简述 TIM_SlaveMode_Reset 0x0004 触发信号上升沿重置计数器 TIM_SlaveMode_Gated 0x0005 触发信号为高时计数器才运行 TIM_SlaveMode_Trigger 0x0006 触发信号上升沿启动计数器 TIM_SlaveMode_External1 0x0007 触发信号上升沿驱动计数器（外部时钟） 以上所有值都强制转换为uint16_t\nTIM_Master_Slave_Mode # 主从模式选择\n启用后，当前定时器作为主定时器，其TRGO可触发其他从定时器，实现多定时器同步。\n名称 值 简述 TIM_MasterSlaveMode_Enable 0x0080 启用主从模式 TIM_MasterSlaveMode_Disable 0x0000 禁用主从模式 以上所有值都强制转换为uint16_t\nTIM_Flags # 状态标志位\n用于查询定时器内部状态，如溢出、捕获、刹车等事件是否发生。\n名称 值 简述 TIM_FLAG_Update 0x0001 更新标志（计数器溢出/下溢） TIM_FLAG_CC1 0x0002 通道1捕获/比较标志 TIM_FLAG_CC2 0x0004 通道2捕获/比较标志 TIM_FLAG_CC3 0x0008 通道3捕获/比较标志 TIM_FLAG_CC4 0x0010 通道4捕获/比较标志 TIM_FLAG_COM 0x0020 换向标志（仅TIM1） TIM_FLAG_Trigger 0x0040 触发标志 TIM_FLAG_Break 0x0080 刹车标志（仅TIM1） TIM_FLAG_CC1OF 0x0200 通道1捕获溢出标志 TIM_FLAG_CC2OF 0x0400 通道2捕获溢出标志 TIM_FLAG_CC3OF 0x0800 通道3捕获溢出标志 TIM_FLAG_CC4OF 0x1000 通道4捕获溢出标志 以上所有值都强制转换为uint16_t\nTIM_Legacy # 向后兼容别名\n为兼容旧代码定义的别名，功能与对应常量完全相同，仅名称不同。\n名称 值 简述 TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer 1字节传输（等价于1次传输） TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers 2字节传输 TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers 3字节传输 TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers 4字节传输 TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers 5字节传输 TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers 6字节传输 TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers 7字节传输 TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers 8字节传输 TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers 9字节传输 TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers 10字节传输 TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers 11字节传输 TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers 12字节传输 TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers 13字节传输 TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers 14字节传输 TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers 15字节传输 TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers 16字节传输 TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers 17字节传输 TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers 18字节传输 以上所有值均为宏别名，实际值与右侧常量一致\n枚举 # FunctionalState # 功能状态枚举\n用于控制使能/禁用功能，是固件库中广泛使用的布尔型枚举，替代传统0/1常量，提高代码可读性。\n名称 值 DISABLE 0 ENABLE 1 结构体 # TIM_TimeBaseInitTypeDef # 定时器基本定时初始化结构体\n用于配置定时器的时基参数，包括预分频、计数模式、自动重载值和重复计数器。适用于生成固定频率PWM、定时中断或测量时间间隔。\n名称 类型 简述 TIM_Prescaler uint16_t 预分频值，范围0~0xFFFF，决定计数器时钟频率 = TIMxCLK / (Prescaler + 1) TIM_CounterMode uint16_t 计数模式，选择向上、向下或中心对齐模式，影响PWM对称性和频率 TIM_Period uint16_t 自动重载值，范围0~0xFFFF，决定计数周期，PWM频率 = TIMxCLK / [(Prescaler+1) × (Period+1)] TIM_ClockDivision uint16_t 时钟分频，用于死区和滤波逻辑，不影响主计数器频率 TIM_RepetitionCounter uint8_t 重复计数器，仅TIM1有效，决定PWM周期数（边沿对齐：N+1周期；中心对齐：2×(N+1)半周期） TIM_OCInitTypeDef # 输出比较初始化结构体\n用于配置PWM或输出比较通道的模式、极性、使能状态和脉冲宽度。支持主通道和互补通道（仅TIM1），适用于电机驱动、LED调光和信号生成。\n名称 类型 简述 TIM_OCMode uint16_t 输出模式，如PWM1、PWM2、定时、翻转等 TIM_OutputState uint16_t 主输出通道使能状态 TIM_OutputNState uint16_t 互补输出通道使能状态（仅TIM1） TIM_Pulse uint16_t 比较值，决定PWM占空比 = Pulse / Period TIM_OCPolarity uint16_t 主输出极性（高/低有效） TIM_OCNPolarity uint16_t 互补输出极性（仅TIM1） TIM_OCIdleState uint16_t 主通道空闲状态电平（仅TIM1） TIM_OCNIdleState uint16_t 互补通道空闲状态电平（仅TIM1） TIM_ICInitTypeDef # 输入捕获初始化结构体\n用于配置输入捕获通道的极性、映射、预分频和滤波，适用于测量脉冲宽度、频率或编码器位置。\n名称 类型 简述 TIM_Channel uint16_t 选择通道1~4 TIM_ICPolarity uint16_t 捕获触发边沿（上升、下降或双边沿） TIM_ICSelection uint16_t 输入映射方式（直接、交叉或TRC） TIM_ICPrescaler uint16_t 捕获预分频，降低采样频率 TIM_ICFilter uint16_t 数字滤波器阶数，范围00xF，用于消除噪声（每阶滤波116个时钟周期） TIM_BDTRInitTypeDef # 刹车与死区初始化结构体（仅TIM1）\n用于配置高级定时器的安全特性，包括死区时间、刹车极性、自动输出使能和锁定级别，适用于电机驱动的防直通保护。\n名称 类型 简述 TIM_OSSRState uint16_t 运行状态关断使能（故障时输出是否强制为低） TIM_OSSIState uint16_t 空闲状态关断使能（停机时输出是否强制为低） TIM_LOCKLevel uint16_t 配置锁定级别，防止意外修改关键参数 TIM_DeadTime uint16_t 死区时间，范围0~0xFF，单位为定时器时钟周期，用于防止主/互补通道同时导通 TIM_Break uint16_t 是否启用外部刹车输入 TIM_BreakPolarity uint16_t 刹车输入极性（高/低有效） TIM_AutomaticOutput uint16_t 是否启用自动输出使能（CEN=1时自动置位MOE） 函数 # TIM_DeInit # void TIM_DeInit(TIM_TypeDef *TIMx)\n将指定的TIMx外设寄存器复位为默认值，通过复位APB时钟实现，确保寄存器状态完全清除。适用于系统初始化或异常恢复。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针，可为TIM1或TIM2 返回值：\n无\nTIM_TimeBaseInit # void TIM_TimeBaseInit(TIM_TypeDef *TIMx, TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct)\n根据结构体配置定时器的基本时基参数，包括预分频、计数模式、周期和重复计数器。调用后需手动启动定时器（TIM_Cmd）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_TimeBaseInitStruct TIM_TimeBaseInitTypeDef * 指向初始化结构体的指针 返回值：\n无\nTIM_OC1Init # void TIM_OC1Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct)\n初始化通道1的输出比较功能，配置PWM模式、极性、使能状态和脉冲值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCInitStruct TIM_OCInitTypeDef * 指向输出比较初始化结构体的指针 返回值：\n无\nTIM_OC2Init # void TIM_OC2Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct)\n初始化通道2的输出比较功能，配置PWM模式、极性、使能状态和脉冲值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCInitStruct TIM_OCInitTypeDef * 指向输出比较初始化结构体的指针 返回值：\n无\nTIM_OC3Init # void TIM_OC3Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct)\n初始化通道3的输出比较功能，仅TIM1支持。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCInitStruct TIM_OCInitTypeDef * 指向输出比较初始化结构体的指针 返回值：\n无\nTIM_OC4Init # void TIM_OC4Init(TIM_TypeDef *TIMx, TIM_OCInitTypeDef *TIM_OCInitStruct)\n初始化通道4的输出比较功能，仅TIM1支持。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCInitStruct TIM_OCInitTypeDef * 指向输出比较初始化结构体的指针 返回值：\n无\nTIM_ICInit # void TIM_ICInit(TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct)\n初始化输入捕获通道，根据通道号自动调用TIx_Config配置输入滤波、极性和映射。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ICInitStruct TIM_ICInitTypeDef * 指向输入捕获初始化结构体的指针 返回值：\n无\nTIM_PWMIConfig # void TIM_PWMIConfig(TIM_TypeDef *TIMx, TIM_ICInitTypeDef *TIM_ICInitStruct)\n配置定时器为PWM输入模式，自动设置两个通道（如CH1和CH2）为互补捕获，用于测量外部PWM信号的周期和占空比。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ICInitStruct TIM_ICInitTypeDef * 指向输入捕获初始化结构体的指针（指定主通道） 返回值：\n无\nTIM_BDTRConfig # void TIM_BDTRConfig(TIM_TypeDef *TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct)\n配置高级定时器（TIM1）的刹车、死区、锁定和自动输出功能。仅在TIM1上有效。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_BDTRInitStruct TIM_BDTRInitTypeDef * 指向刹车与死区初始化结构体的指针 返回值：\n无\nTIM_TimeBaseStructInit # void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct)\n将TIM_TimeBaseInitTypeDef结构体所有成员初始化为默认值，便于用户仅修改必要字段。\n参数：\n名称 类型 简述 TIM_TimeBaseInitStruct TIM_TimeBaseInitTypeDef * 指向待初始化结构体的指针 返回值：\n无\nTIM_OCStructInit # void TIM_OCStructInit(TIM_OCInitTypeDef *TIM_OCInitStruct)\n将TIM_OCInitTypeDef结构体所有成员初始化为默认值，如关闭输出、设置为定时模式、脉冲为0。\n参数：\n名称 类型 简述 TIM_OCInitStruct TIM_OCInitTypeDef * 指向待初始化结构体的指针 返回值：\n无\nTIM_ICStructInit # void TIM_ICStructInit(TIM_ICInitTypeDef *TIM_ICInitStruct)\n将TIM_ICInitTypeDef结构体初始化为默认值：通道1、上升沿、直接映射、无预分频、无滤波。\n参数：\n名称 类型 简述 TIM_ICInitStruct TIM_ICInitTypeDef * 指向待初始化结构体的指针 返回值：\n无\nTIM_BDTRStructInit # void TIM_BDTRStructInit(TIM_BDTRInitTypeDef *TIM_BDTRInitStruct)\n将TIM_BDTRInitTypeDef结构体初始化为安全默认值：禁用刹车、死区为0、无锁定、无自动输出。\n参数：\n名称 类型 简述 TIM_BDTRInitStruct TIM_BDTRInitTypeDef * 指向待初始化结构体的指针 返回值：\n无\nTIM_Cmd # void TIM_Cmd(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用定时器计数器。调用后定时器开始或停止计数，但不影响寄存器配置。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） NewState FunctionalState ENABLE（启动）或DISABLE（停止） 返回值：\n无\nTIM_CtrlPWMOutputs # void TIM_CtrlPWMOutputs(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用所有PWM输出通道（主和互补），通过控制BDTR寄存器的MOE位实现。用于紧急关断，不影响计数器运行。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） NewState FunctionalState ENABLE（使能输出）或DISABLE（禁用输出） 返回值：\n无\nTIM_ITConfig # void TIM_ITConfig(TIM_TypeDef *TIMx, uint16_t TIM_IT, FunctionalState NewState)\n使能或禁用指定的定时器中断源。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_IT uint16_t 中断源，如TIM_IT_Update、TIM_IT_CC1等 NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_GenerateEvent # void TIM_GenerateEvent(TIM_TypeDef *TIMx, uint16_t TIM_EventSource)\n通过软件生成指定事件，触发更新、捕获、换向或刹车，等效于硬件事件。常用于同步或调试。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_EventSource uint16_t 事件源，如TIM_EventSource_Update、TIM_EventSource_CC1等 返回值：\n无\nTIM_DMAConfig # void TIM_DMAConfig(TIM_TypeDef *TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength)\n配置DMA传输的基地址和突发长度，用于批量读写定时器寄存器。需配合TIM_DMACmd启用DMA请求。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_DMABase uint16_t DMA目标寄存器基地址，如TIM_DMABase_CCR1 TIM_DMABurstLength uint16_t 突发传输长度，如TIM_DMABurstLength_5Transfers 返回值：\n无\nTIM_DMACmd # void TIM_DMACmd(TIM_TypeDef *TIMx, uint16_t TIM_DMASource, FunctionalState NewState)\n使能或禁用指定的DMA请求源。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_DMASource uint16_t DMA源，如TIM_DMA_Update、TIM_DMA_CC1等 NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_InternalClockConfig # void TIM_InternalClockConfig(TIM_TypeDef *TIMx)\n配置定时器使用内部时钟作为主时钟源，清除从模式控制寄存器的触发源设置。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） 返回值：\n无\nTIM_ITRxExternalClockConfig # void TIM_ITRxExternalClockConfig(TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource)\n将内部触发源（ITRx）配置为外部时钟输入，用于同步多个定时器。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_InputTriggerSource uint16_t 内部触发源，如TIM_TS_ITR0、TIM_TS_ITR1等 返回值：\n无\nTIM_TIxExternalClockConfig # void TIM_TIxExternalClockConfig(TIM_TypeDef *TIMx, uint16_t TIM_TIxExternalCLKSource, uint16_t TIM_ICPolarity, uint16_t ICFilter)\n将TI1或TI2引脚配置为外部时钟输入，支持边沿检测或滤波输入。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_TIxExternalCLKSource uint16_t 外部时钟源，如TIM_TIxExternalCLK1Source_TI1 TIM_ICPolarity uint16_t 输入极性，如TIM_ICPolarity_Rising ICFilter uint16_t 数字滤波阶数，0~0xF 返回值：\n无\nTIM_ETRClockMode1Config # void TIM_ETRClockMode1Config(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter)\n配置外部触发输入（ETR）为外部时钟模式1：ETR信号经分频、极性、滤波后驱动计数器。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ExtTRGPrescaler uint16_t ETR预分频，如TIM_ExtTRGPSC_DIV2 TIM_ExtTRGPolarity uint16_t ETR极性，如TIM_ExtTRGPolarity_NonInverted ExtTRGFilter uint16_t ETR滤波阶数，0~0xF 返回值：\n无\nTIM_ETRClockMode2Config # void TIM_ETRClockMode2Config(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter)\n配置外部触发输入（ETR）为外部时钟模式2：ETR信号直接作为时钟，计数器在每个有效边沿递增。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ExtTRGPrescaler uint16_t ETR预分频，如TIM_ExtTRGPSC_DIV2 TIM_ExtTRGPolarity uint16_t ETR极性，如TIM_ExtTRGPolarity_NonInverted ExtTRGFilter uint16_t ETR滤波阶数，0~0xF 返回值：\n无\nTIM_ETRConfig # void TIM_ETRConfig(TIM_TypeDef *TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter)\n配置外部触发输入（ETR）的预分频、极性和滤波参数，但不启用其作为时钟源。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ExtTRGPrescaler uint16_t ETR预分频，如TIM_ExtTRGPSC_DIV2 TIM_ExtTRGPolarity uint16_t ETR极性，如TIM_ExtTRGPolarity_NonInverted ExtTRGFilter uint16_t ETR滤波阶数，0~0xF 返回值：\n无\nTIM_PrescalerConfig # void TIM_PrescalerConfig(TIM_TypeDef *TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)\n动态修改预分频器值，支持立即更新或等待更新事件。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） Prescaler uint16_t 新的预分频值（0~0xFFFF） TIM_PSCReloadMode uint16_t 更新模式，TIM_PSCReloadMode_Update或TIM_PSCReloadMode_Immediate 返回值：\n无\nTIM_CounterModeConfig # void TIM_CounterModeConfig(TIM_TypeDef *TIMx, uint16_t TIM_CounterMode)\n动态切换计数模式（向上、向下、中心对齐），适用于需要改变PWM对称性的应用。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_CounterMode uint16_t 计数模式，如TIM_CounterMode_Up、TIM_CounterMode_CenterAligned1等 返回值：\n无\nTIM_SelectInputTrigger # void TIM_SelectInputTrigger(TIM_TypeDef *TIMx, uint16_t TIM_InputTriggerSource)\n选择定时器的从模式触发源，用于同步多个定时器或实现复杂时序。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_InputTriggerSource uint16_t 触发源，如TIM_TS_ITR0、TIM_TS_ETRF等 返回值：\n无\nTIM_EncoderInterfaceConfig # void TIM_EncoderInterfaceConfig(TIM_TypeDef *TIMx, uint16_t TIM_EncoderMode, uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)\n配置定时器为编码器接口模式，支持1x、2x或4x分辨率，用于读取旋转编码器位置。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_EncoderMode uint16_t 编码器模式，如TIM_EncoderMode_TI12 TIM_IC1Polarity uint16_t TI1输入极性 TIM_IC2Polarity uint16_t TI2输入极性 返回值：\n无\nTIM_ForcedOC1Config # void TIM_ForcedOC1Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction)\n强制通道1输出为高或低电平，绕过PWM逻辑，用于调试或紧急控制。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ForcedAction uint16_t 强制动作，TIM_ForcedAction_Active或TIM_ForcedAction_InActive 返回值：\n无\nTIM_ForcedOC2Config # void TIM_ForcedOC2Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction)\n强制通道2输出为高或低电平。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ForcedAction uint16_t 强制动作，TIM_ForcedAction_Active或TIM_ForcedAction_InActive 返回值：\n无\nTIM_ForcedOC3Config # void TIM_ForcedOC3Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction)\n强制通道3输出为高或低电平（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_ForcedAction uint16_t 强制动作，TIM_ForcedAction_Active或TIM_ForcedAction_InActive 返回值：\n无\nTIM_ForcedOC4Config # void TIM_ForcedOC4Config(TIM_TypeDef *TIMx, uint16_t TIM_ForcedAction)\n强制通道4输出为高或低电平（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_ForcedAction uint16_t 强制动作，TIM_ForcedAction_Active或TIM_ForcedAction_InActive 返回值：\n无\nTIM_ARRPreloadConfig # void TIM_ARRPreloadConfig(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用自动重载寄存器（ARR）的预加载功能，确保周期更新在下一个更新事件时生效。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_SelectCOM # void TIM_SelectCOM(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用换向事件（仅TIM1），用于在三相电机换向时触发中断或DMA。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_SelectCCDMA # void TIM_SelectCCDMA(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用捕获/比较事件触发DMA，用于在每次比较匹配时自动传输数据。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_CCPreloadControl # void TIM_CCPreloadControl(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用捕获/比较预加载控制位，影响所有通道的预加载行为（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_OC1PreloadConfig # void TIM_OC1PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload)\n启用或禁用通道1的捕获/比较寄存器（CCR1）预加载功能。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCPreload uint16_t TIM_OCPreload_Enable或TIM_OCPreload_Disable 返回值：\n无\nTIM_OC2PreloadConfig # void TIM_OC2PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload)\n启用或禁用通道2的捕获/比较寄存器（CCR2）预加载功能。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCPreload uint16_t TIM_OCPreload_Enable或TIM_OCPreload_Disable 返回值：\n无\nTIM_OC3PreloadConfig # void TIM_OC3PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload)\n启用或禁用通道3的捕获/比较寄存器（CCR3）预加载功能（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCPreload uint16_t TIM_OCPreload_Enable或TIM_OCPreload_Disable 返回值：\n无\nTIM_OC4PreloadConfig # void TIM_OC4PreloadConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPreload)\n启用或禁用通道4的捕获/比较寄存器（CCR4）预加载功能（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCPreload uint16_t TIM_OCPreload_Enable或TIM_OCPreload_Disable 返回值：\n无\nTIM_OC1FastConfig # void TIM_OC1FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast)\n启用或禁用通道1的快速输出模式，减少响应延迟。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCFast uint16_t TIM_OCFast_Enable或TIM_OCFast_Disable 返回值：\n无\nTIM_OC2FastConfig # void TIM_OC2FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast)\n启用或禁用通道2的快速输出模式。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCFast uint16_t TIM_OCFast_Enable或TIM_OCFast_Disable 返回值：\n无\nTIM_OC3FastConfig # void TIM_OC3FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast)\n启用或禁用通道3的快速输出模式（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCFast uint16_t TIM_OCFast_Enable或TIM_OCFast_Disable 返回值：\n无\nTIM_OC4FastConfig # void TIM_OC4FastConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCFast)\n启用或禁用通道4的快速输出模式（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCFast uint16_t TIM_OCFast_Enable或TIM_OCFast_Disable 返回值：\n无\nTIM_ClearOC1Ref # void TIM_ClearOC1Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear)\n启用或禁用外部事件对OC1REF信号的清除功能，用于安全关断。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCClear uint16_t TIM_OCClear_Enable或TIM_OCClear_Disable 返回值：\n无\nTIM_ClearOC2Ref # void TIM_ClearOC2Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear)\n启用或禁用外部事件对OC2REF信号的清除功能。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCClear uint16_t TIM_OCClear_Enable或TIM_OCClear_Disable 返回值：\n无\nTIM_ClearOC3Ref # void TIM_ClearOC3Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear)\n启用或禁用外部事件对OC3REF信号的清除功能（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCClear uint16_t TIM_OCClear_Enable或TIM_OCClear_Disable 返回值：\n无\nTIM_ClearOC4Ref # void TIM_ClearOC4Ref(TIM_TypeDef *TIMx, uint16_t TIM_OCClear)\n启用或禁用外部事件对OC4REF信号的清除功能（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCClear uint16_t TIM_OCClear_Enable或TIM_OCClear_Disable 返回值：\n无\nTIM_OC1PolarityConfig # void TIM_OC1PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity)\n动态修改通道1的输出极性，无需重新初始化。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCPolarity uint16_t TIM_OCPolarity_High或TIM_OCPolarity_Low 返回值：\n无\nTIM_OC1NPolarityConfig # void TIM_OC1NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity)\n动态修改通道1互补输出的极性（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCNPolarity uint16_t TIM_OCNPolarity_High或TIM_OCNPolarity_Low 返回值：\n无\nTIM_OC2PolarityConfig # void TIM_OC2PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity)\n动态修改通道2的输出极性。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OCPolarity uint16_t TIM_OCPolarity_High或TIM_OCPolarity_Low 返回值：\n无\nTIM_OC2NPolarityConfig # void TIM_OC2NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity)\n动态修改通道2互补输出的极性（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCNPolarity uint16_t TIM_OCNPolarity_High或TIM_OCNPolarity_Low 返回值：\n无\nTIM_OC3PolarityConfig # void TIM_OC3PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity)\n动态修改通道3的输出极性（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCPolarity uint16_t TIM_OCPolarity_High或TIM_OCPolarity_Low 返回值：\n无\nTIM_OC3NPolarityConfig # void TIM_OC3NPolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCNPolarity)\n动态修改通道3互补输出的极性（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCNPolarity uint16_t TIM_OCNPolarity_High或TIM_OCNPolarity_Low 返回值：\n无\nTIM_OC4PolarityConfig # void TIM_OC4PolarityConfig(TIM_TypeDef *TIMx, uint16_t TIM_OCPolarity)\n动态修改通道4的输出极性（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_OCPolarity uint16_t TIM_OCPolarity_High或TIM_OCPolarity_Low 返回值：\n无\nTIM_CCxCmd # void TIM_CCxCmd(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx)\n启用或禁用指定通道的捕获/比较功能（主通道）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_Channel uint16_t 通道号，如TIM_Channel_1 TIM_CCx uint16_t TIM_CCx_Enable或TIM_CCx_Disable 返回值：\n无\nTIM_CCxNCmd # void TIM_CCxNCmd(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN)\n启用或禁用指定通道的互补捕获/比较功能（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_Channel uint16_t 通道号，如TIM_Channel_1 TIM_CCxN uint16_t TIM_CCxN_Enable或TIM_CCxN_Disable 返回值：\n无\nTIM_SelectOCxM # void TIM_SelectOCxM(TIM_TypeDef *TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode)\n动态切换指定通道的输出模式（如从PWM1切换为PWM2），无需重新初始化。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_Channel uint16_t 通道号，如TIM_Channel_1 TIM_OCMode uint16_t 目标模式，如TIM_OCMode_PWM1、TIM_OCMode_Timing等 返回值：\n无\nTIM_UpdateDisableConfig # void TIM_UpdateDisableConfig(TIM_TypeDef *TIMx, FunctionalState NewState)\n禁用更新事件（仅在计数器溢出/下溢时触发），用于防止中断或DMA被意外触发。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_UpdateRequestConfig # void TIM_UpdateRequestConfig(TIM_TypeDef *TIMx, uint16_t TIM_UpdateSource)\n选择更新事件的触发源，决定何时产生更新中断或DMA请求。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_UpdateSource uint16_t TIM_UpdateSource_Regular或TIM_UpdateSource_Global 返回值：\n无\nTIM_SelectHallSensor # void TIM_SelectHallSensor(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用霍尔传感器接口（仅TIM1），用于三相无刷电机换向。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） NewState FunctionalState ENABLE或DISABLE 返回值：\n无\nTIM_SelectOnePulseMode # void TIM_SelectOnePulseMode(TIM_TypeDef *TIMx, uint16_t TIM_OPMode)\n选择单脉冲模式，控制定时器在触发后是否循环运行。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_OPMode uint16_t TIM_OPMode_Single或TIM_OPMode_Repetitive 返回值：\n无\nTIM_SelectOutputTrigger # void TIM_SelectOutputTrigger(TIM_TypeDef *TIMx, uint16_t TIM_TRGOSource)\n选择TRGO（触发输出）信号的来源，用于同步其他定时器或外设。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_TRGOSource uint16_t 触发源，如TIM_TRGOSource_Update、TIM_TRGOSource_OC1Ref等 返回值：\n无\nTIM_SelectSlaveMode # void TIM_SelectSlaveMode(TIM_TypeDef *TIMx, uint16_t TIM_SlaveMode)\n配置定时器为从模式，响应外部触发信号。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_SlaveMode uint16_t 从模式，如TIM_SlaveMode_Reset、TIM_SlaveMode_External1等 返回值：\n无\nTIM_SelectMasterSlaveMode # void TIM_SelectMasterSlaveMode(TIM_TypeDef *TIMx, uint16_t TIM_MasterSlaveMode)\n启用或禁用主从模式，使当前定时器作为主定时器，其TRGO可触发从定时器。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_MasterSlaveMode uint16_t TIM_MasterSlaveMode_Enable或TIM_MasterSlaveMode_Disable 返回值：\n无\nTIM_SetCounter # void TIM_SetCounter(TIM_TypeDef *TIMx, uint16_t Counter)\n直接设置计数器寄存器值，用于同步或初始化计数。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） Counter uint16_t 新的计数值（0~0xFFFF） 返回值：\n无\nTIM_SetAutoreload # void TIM_SetAutoreload(TIM_TypeDef *TIMx, uint16_t Autoreload)\n动态设置自动重载寄存器值，影响下一个周期的计数长度。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） Autoreload uint16_t 新的自动重载值（0~0xFFFF） 返回值：\n无\nTIM_SetCompare1 # void TIM_SetCompare1(TIM_TypeDef *TIMx, uint16_t Compare1)\n动态设置通道1的比较值，用于实时调整PWM占空比。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） Compare1 uint16_t 新的比较值（0~0xFFFF） 返回值：\n无\nTIM_SetCompare2 # void TIM_SetCompare2(TIM_TypeDef *TIMx, uint16_t Compare2)\n动态设置通道2的比较值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） Compare2 uint16_t 新的比较值（0~0xFFFF） 返回值：\n无\nTIM_SetCompare3 # void TIM_SetCompare3(TIM_TypeDef *TIMx, uint16_t Compare3)\n动态设置通道3的比较值（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） Compare3 uint16_t 新的比较值（0~0xFFFF） 返回值：\n无\nTIM_SetCompare4 # void TIM_SetCompare4(TIM_TypeDef *TIMx, uint16_t Compare4)\n动态设置通道4的比较值（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） Compare4 uint16_t 新的比较值（0~0xFFFF） 返回值：\n无\nTIM_SetIC1Prescaler # void TIM_SetIC1Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC)\n动态设置通道1输入捕获的预分频值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ICPSC uint16_t 预分频值，如TIM_ICPSC_DIV2 返回值：\n无\nTIM_SetIC2Prescaler # void TIM_SetIC2Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC)\n动态设置通道2输入捕获的预分频值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_ICPSC uint16_t 预分频值，如TIM_ICPSC_DIV2 返回值：\n无\nTIM_SetIC3Prescaler # void TIM_SetIC3Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC)\n动态设置通道3输入捕获的预分频值（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_ICPSC uint16_t 预分频值，如TIM_ICPSC_DIV2 返回值：\n无\nTIM_SetIC4Prescaler # void TIM_SetIC4Prescaler(TIM_TypeDef *TIMx, uint16_t TIM_ICPSC)\n动态设置通道4输入捕获的预分频值（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） TIM_ICPSC uint16_t 预分频值，如TIM_ICPSC_DIV2 返回值：\n无\nTIM_SetClockDivision # void TIM_SetClockDivision(TIM_TypeDef *TIMx, uint16_t TIM_CKD)\n动态修改时钟分频系数，影响死区和滤波逻辑。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_CKD uint16_t 分频值，如TIM_CKD_DIV2 返回值：\n无\nTIM_GetCapture1 # uint16_t TIM_GetCapture1(TIM_TypeDef *TIMx)\n读取通道1的捕获值，用于测量脉冲宽度或频率。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） 返回值：\nuint16_t：捕获寄存器CH1CVR的当前值\nTIM_GetCapture2 # uint16_t TIM_GetCapture2(TIM_TypeDef *TIMx)\n读取通道2的捕获值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） 返回值：\nuint16_t：捕获寄存器CH2CVR的当前值\nTIM_GetCapture3 # uint16_t TIM_GetCapture3(TIM_TypeDef *TIMx)\n读取通道3的捕获值（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） 返回值：\nuint16_t：捕获寄存器CH3CVR的当前值\nTIM_GetCapture4 # uint16_t TIM_GetCapture4(TIM_TypeDef *TIMx)\n读取通道4的捕获值（仅TIM1）。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（仅TIM1） 返回值：\nuint16_t：捕获寄存器CH4CVR的当前值\nTIM_GetCounter # uint16_t TIM_GetCounter(TIM_TypeDef *TIMx)\n读取当前计数器值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） 返回值：\nuint16_t：计数器寄存器CNT的当前值\nTIM_GetPrescaler # uint16_t TIM_GetPrescaler(TIM_TypeDef *TIMx)\n读取当前预分频器值。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） 返回值：\nuint16_t：预分频器寄存器PSC的当前值\nTIM_GetFlagStatus # FlagStatus TIM_GetFlagStatus(TIM_TypeDef *TIMx, uint16_t TIM_FLAG)\n查询指定标志位状态，用于轮询中断事件。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_FLAG uint16_t 标志位，如TIM_FLAG_Update、TIM_FLAG_CC1等 返回值：\nFlagStatus：SET（标志置位）或RESET（标志清零）\nTIM_ClearFlag # void TIM_ClearFlag(TIM_TypeDef *TIMx, uint16_t TIM_FLAG)\n清除指定的状态标志位，通常在中断服务程序中调用。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_FLAG uint16_t 标志位，如TIM_FLAG_Update、TIM_FLAG_CC1等 返回值：\n无\nTIM_GetITStatus # ITStatus TIM_GetITStatus(TIM_TypeDef *TIMx, uint16_t TIM_IT)\n检查指定中断是否发生且使能，用于判断中断来源。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_IT uint16_t 中断源，如TIM_IT_Update、TIM_IT_CC1等 返回值：\nITStatus：SET（中断发生且使能）或RESET（未发生或未使能）\nTIM_ClearITPendingBit # void TIM_ClearITPendingBit(TIM_TypeDef *TIMx, uint16_t TIM_IT)\n清除指定中断的挂起位，必须在中断服务程序中调用以避免重复进入。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） TIM_IT uint16_t 中断源，如TIM_IT_Update、TIM_IT_CC1等 返回值：\n无\nTIM_IndicateCaptureLevelCmd # void TIM_IndicateCaptureLevelCmd(TIM_TypeDef *TIMx, FunctionalState NewState)\n启用或禁用捕获电平指示功能，当启用时，捕获事件会记录输入电平状态（高/低），用于分析信号。\n参数：\n名称 类型 简述 TIMx TIM_TypeDef * 定时器实例指针（TIM1或TIM2） NewState FunctionalState ENABLE或DISABLE 返回值：\n无\n","externalUrl":null,"permalink":"/ch32v003_doc/17.ch32v00x_tim.h/","section":"CH32V00x的软件文档","summary":"该文件定义了CH32V00x系列微控制器定时器（TIM）固件库的所有常量、枚举、结构体及函数原型，用于配置和控制TIM1与TIM2定时器外设。支持定时器基本计数、PWM输出、输入捕获、编码器接口、外部时钟同步、死区控制、互补输出、DMA传输及中断管理等高级功能。所有配置均通过结构体初始化和寄存器位操作实现，适用于电机控制、电源管理、精密测频与信号生成等应用场景。TIM1为高级定时器，支持互补输出与死区时间；TIM2为通用定时器，功能受限但资源更紧凑。","title":"ch32v00x_tim.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含 CH32V00x 系列微控制器 USART 固件库的所有函数原型、常量定义、枚举类型和结构体定义。USART（通用同步/异步收发器）支持异步 UART 模式和同步 SPI 模式，具备完整的硬件流控、IrDA、SmartCard、LIN 总线、半双工、过采样 8 倍等高级功能，适用于工业通信、传感器网络、智能卡读写等场景。所有配置参数均通过位域组合实现高效寄存器控制，避免了冗余的函数调用，提升了实时性与灵活性。\n常量 # USART_Word_Length # 串行帧数据位长度配置\n名称 值 简述 USART_WordLength_8b 0x0000 8 位数据长度 USART_WordLength_9b 0x1000 9 位数据长度（支持奇偶校验时，校验位占据第 9 位） 以上所有值都强制转换为 uint16_t。9 位模式常用于多机通信或扩展数据宽度，配合奇偶校验可实现 8 位数据 + 1 位校验的可靠传输。\nUSART_Stop_Bits # 停止位数量配置\n名称 值 简述 USART_StopBits_1 0x0000 1 个停止位 USART_StopBits_0_5 0x1000 0.5 个停止位（仅在 9 位数据模式下有效） USART_StopBits_2 0x2000 2 个停止位 USART_StopBits_1_5 0x3000 1.5 个停止位（仅在 9 位数据模式下有效） 以上所有值都强制转换为 uint16_t。0.5 和 1.5 停止位是为兼容某些旧式串行设备（如 RS-485 多点网络）设计的特殊模式，实际应用中较少使用。\nUSART_Parity # 奇偶校验模式配置\n名称 值 简述 USART_Parity_No 0x0000 无校验 USART_Parity_Even 0x0400 偶校验（校验位使数据位中 \u0026lsquo;1\u0026rsquo; 的个数为偶数） USART_Parity_Odd 0x0600 奇校验（校验位使数据位中 \u0026lsquo;1\u0026rsquo; 的个数为奇数） 以上所有值都强制转换为 uint16_t。校验位自动插入在数据位的最高位（MSB），当使用 8 位数据时，校验位占据第 8 位；9 位数据时占据第 9 位，适用于噪声环境下的基础错误检测。\nUSART_Mode # 收发模式配置\n名称 值 简述 USART_Mode_Rx 0x0004 使能接收功能 USART_Mode_Tx 0x0008 使能发送功能 以上所有值都强制转换为 uint16_t。可组合使用（如 USART_Mode_Rx | USART_Mode_Tx）实现全双工通信，单独使用可实现单工或半双工（配合硬件流控或软件切换）。\nUSART_Hardware_Flow_Control # 硬件流控配置\n名称 值 简述 USART_HardwareFlowControl_None 0x0000 无硬件流控 USART_HardwareFlowControl_RTS 0x0100 仅使用 RTS（请求发送）输出流控 USART_HardwareFlowControl_CTS 0x0200 仅使用 CTS（清除发送）输入流控 USART_HardwareFlowControl_RTS_CTS 0x0300 同时使用 RTS 和 CTS 实现双向流控 以上所有值都强制转换为 uint16_t。硬件流控通过 RTS/CTS 引脚自动控制数据流，防止接收缓冲区溢出，适用于高速通信（如 115200bps 以上）或数据突发场景。\nUSART_Clock # 同步模式时钟使能\n名称 值 简述 USART_Clock_Disable 0x0000 禁用同步时钟输出（异步模式） USART_Clock_Enable 0x0800 启用同步时钟输出（SCLK 引脚） 以上所有值都强制转换为 uint16_t。启用后 USART 可作为 SPI 主设备使用，SCLK 由 USART 内部生成，用于同步外部从设备。\nUSART_Clock_Polarity # 时钟极性配置（同步模式）\n名称 值 简述 USART_CPOL_Low 0x0000 时钟空闲时为低电平 USART_CPOL_High 0x0400 时钟空闲时为高电平 以上所有值都强制转换为 uint16_t。与 CPHA 配合使用，可配置 SPI 模式 0、1、2、3 中的任意一种，兼容多种外设时序要求。\nUSART_Clock_Phase # 时钟相位配置（同步模式）\n名称 值 简述 USART_CPHA_1Edge 0x0000 在时钟第一个边沿采样数据 USART_CPHA_2Edge 0x0200 在时钟第二个边沿采样数据 以上所有值都强制转换为 uint16_t。与 CPOL 组合决定数据采样时机，是 SPI 通信中匹配主从设备的关键参数。\nUSART_Last_Bit # 最后一个数据位时钟输出控制\n名称 值 简述 USART_LastBit_Disable 0x0000 不输出最后一个数据位的时钟脉冲 USART_LastBit_Enable 0x0100 在最后一个数据位传输完成后输出一个额外时钟脉冲 以上所有值都强制转换为 uint16_t。用于确保从设备在数据传输结束后有足够时间处理数据，常用于驱动某些对时序敏感的 SPI 存储器或传感器。\nUSART_Interrupt_definition # 中断标志定义\n名称 值 简述 USART_IT_PE 0x0028 奇偶校验错误中断 USART_IT_TXE 0x0727 发送数据寄存器空中断 USART_IT_TC 0x0626 传输完成中断（最后一位发送完毕） USART_IT_RXNE 0x0525 接收数据寄存器非空中断 USART_IT_ORE_RX 0x0325 溢出错误中断（RXNE 使能时） USART_IT_IDLE 0x0424 空闲线检测中断 USART_IT_LBD 0x0846 LIN 帧中断检测中断 USART_IT_CTS 0x096A CTS 变化中断 USART_IT_ERR 0x0060 错误中断掩码（包含 PE、FE、NE、ORE） USART_IT_ORE_ER 0x0360 溢出错误中断（EIE 使能时） USART_IT_NE 0x0260 噪声检测错误中断 USART_IT_FE 0x0160 帧格式错误中断 USART_IT_ORE 0x0360 溢出错误中断（别名，等同于 USART_IT_ORE_ER） 以上所有值都强制转换为 uint16_t。中断掩码设计采用“寄存器地址 + 位偏移”编码方式，便于底层驱动通过位运算快速定位中断源。USART_IT_ERR 是多个错误中断的组合掩码，用于批量处理错误。\nUSART_DMA_Requests # DMA 请求配置\n名称 值 简述 USART_DMAReq_Tx 0x0080 发送 DMA 请求 USART_DMAReq_Rx 0x0040 接收 DMA 请求 以上所有值都强制转换为 uint16_t。启用后，数据传输可由 DMA 控制器自动完成，无需 CPU 干预，极大提升吞吐量并降低中断负载，适用于大数据块传输（如音频、图像）。\nUSART_WakeUp_methods # 唤醒方式配置\n名称 值 简述 USART_WakeUp_IdleLine 0x0000 空闲线检测唤醒 USART_WakeUp_AddressMark 0x0800 地址标记唤醒（用于多机通信） 以上所有值都强制转换为 uint16_t。用于低功耗模式下，通过检测特定帧结构（如 11 位空闲或地址帧）唤醒休眠的 USART，适用于电池供电的远程传感器节点。\nUSART_LIN_Break_Detection_Length # LIN 总线帧中断检测长度\n名称 值 简述 USART_LINBreakDetectLength_10b 0x0000 检测 10 位中断帧 USART_LINBreakDetectLength_11b 0x0020 检测 11 位中断帧 以上所有值都强制转换为 uint16_t。LIN（Local Interconnect Network）协议中，主节点发送 13 位低电平作为帧起始，从节点通过检测 10 或 11 位持续低电平识别帧头，此配置匹配不同 LIN 版本规范。\nUSART_IrDA_Low_Power # IrDA 模式配置\n名称 值 简述 USART_IrDAMode_LowPower 0x0004 低功耗 IrDA 模式（接收器灵敏度降低） USART_IrDAMode_Normal 0x0000 正常 IrDA 模式 以上所有值都强制转换为 uint16_t。IrDA（红外数据协会）模式通过内部滤波器抑制可见光干扰，低功耗模式适用于电池供电的红外遥控或近距离通信，但通信距离和抗干扰能力下降。\nUSART_Flags # 状态标志位定义\n名称 值 简述 USART_FLAG_CTS 0x0200 CTS 输入状态标志 USART_FLAG_LBD 0x0100 LIN 帧检测标志 USART_FLAG_TXE 0x0080 发送数据寄存器空 USART_FLAG_TC 0x0040 传输完成（最后一位发送完毕） USART_FLAG_RXNE 0x0020 接收数据寄存器非空 USART_FLAG_IDLE 0x0010 空闲线检测标志 USART_FLAG_ORE 0x0008 溢出错误标志 USART_FLAG_NE 0x0004 噪声检测标志 USART_FLAG_FE 0x0002 帧格式错误标志 USART_FLAG_PE 0x0001 奇偶校验错误标志 以上所有值都强制转换为 uint16_t。这些标志位映射到 USART 状态寄存器（STATR），用于轮询查询通信状态。注意：部分标志（如 ORE、FE、NE、PE）需通过读 STATR + 读 DATAR 清除，否则会持续置位。\n枚举 # 无\n结构体 # USART_InitTypeDef # USART 初始化结构体，用于配置基本通信参数\n名称 类型 简述 USART_BaudRate uint32_t 通信波特率，范围通常为 1200~4500000 bps，由 PCLKx 时钟和 BRR 寄存器计算得出，支持非标准波特率（如 57600、115200） USART_WordLength uint16_t 数据位长度，可选 8 位或 9 位，影响帧结构和校验位位置 USART_StopBits uint16_t 停止位数量，支持 0.5、1、1.5、2 位，用于兼容不同设备时序 USART_Parity uint16_t 奇偶校验模式，可选无、偶、奇校验，提升数据可靠性 USART_Mode uint16_t 收发模式，可组合启用发送、接收或全双工 USART_HardwareFlowControl uint16_t 硬件流控配置，支持 RTS、CTS 或双向流控，防止缓冲区溢出 该结构体是 USART 初始化的核心，所有参数均直接映射到 USART 控制寄存器（CTLR1/2/3），调用 USART_Init() 后会一次性写入硬件，无需逐位配置，极大简化了开发流程。\nUSART_ClockInitTypeDef # USART 同步模式时钟初始化结构体\n名称 类型 简述 USART_Clock uint16_t 是否启用同步时钟输出（SCLK） USART_CPOL uint16_t 时钟极性，决定空闲电平 USART_CPHA uint16_t 时钟相位，决定采样边沿 USART_LastBit uint16_t 是否在最后一个数据位后输出额外时钟脉冲 该结构体专用于同步模式（SPI 模式），与 USART_InitTypeDef 配合使用。当 USART_Clock_Enable 启用时，USART 可作为 SPI 主设备，此时 USART_Mode 应设为 USART_Mode_Tx 或 USART_Mode_Rx，不能同时启用双工，因为同步模式下收发共用同一时钟。\n函数 # USART_DeInit # void USART_DeInit(USART_TypeDef *USARTx)\n将 USARTx 外设寄存器恢复为复位默认值，通过复位 APB 总线时钟实现，而非直接写寄存器。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设，仅支持 USART1（CH32V00x 仅有一个 USART 模块） 返回值：\n无\n该函数通过调用 RCC_APB2PeriphResetCmd 对 USART1 进行硬件复位，确保所有寄存器恢复初始状态，适用于系统初始化或异常恢复场景，比手动清零寄存器更可靠。\nUSART_Init # void USART_Init(USART_TypeDef *USARTx, USART_InitTypeDef *USART_InitStruct)\n根据指定参数初始化 USART 外设，包括波特率、数据位、停止位、校验、模式和流控。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_InitStruct USART_InitTypeDef * 指向包含配置参数的结构体指针 返回值：\n无\n该函数是 USART 配置的核心，内部自动计算 BRR（波特率寄存器）值，支持 8 倍过采样模式（需提前调用 USART_OverSampling8Cmd），计算公式基于 PCLK1/PCLK2 时钟频率，确保在不同系统时钟下仍能精确配置波特率。\nUSART_StructInit # void USART_StructInit(USART_InitTypeDef *USART_InitStruct)\n将 USART_InitTypeDef 结构体所有成员初始化为默认值。\n参数：\n名称 类型 简述 USART_InitStruct USART_InitTypeDef * 待初始化的结构体指针 返回值：\n无\n默认配置为：9600bps、8 位数据、1 停止位、无校验、全双工、无流控。建议在调用 USART_Init() 前先调用此函数，避免结构体中包含未初始化的随机值导致通信异常。\nUSART_ClockInit # void USART_ClockInit(USART_TypeDef *USARTx, USART_ClockInitTypeDef *USART_ClockInitStruct)\n配置 USART 同步模式下的时钟参数（CPOL、CPHA、LastBit）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_ClockInitStruct USART_ClockInitTypeDef * 包含时钟配置的结构体指针 返回值：\n无\n仅在 USART_Clock_Enable 为真时生效，用于将 USART 转换为 SPI 主设备。配置后，SCLK 引脚将输出同步时钟，数据通过 TX/RX 引脚收发，实现与 SPI 传感器、存储器的通信。\nUSART_ClockStructInit # void USART_ClockStructInit(USART_ClockInitTypeDef *USART_ClockInitStruct)\n将 USART_ClockInitTypeDef 结构体初始化为默认值。\n参数：\n名称 类型 简述 USART_ClockInitStruct USART_ClockInitTypeDef * 待初始化的结构体指针 返回值：\n无\n默认配置为：时钟禁用、CPOL=低、CPHA=第一边沿、最后一个时钟脉冲禁用。适用于大多数 SPI 从设备（模式 0）。\nUSART_Cmd # void USART_Cmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用 USART 外设。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n通过设置 CTLR1 的 UE 位控制 USART 使能状态。在初始化后必须调用此函数才能开始通信，关闭后可节省功耗。\nUSART_ITConfig # void USART_ITConfig(USART_TypeDef *USARTx, uint16_t USART_IT, FunctionalState NewState)\n使能或禁用指定的 USART 中断源。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_IT uint16_t 中断源，如 USART_IT_RXNE、USART_IT_TXE 等 NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n该函数通过操作 USART 的中断使能寄存器（IER）实现中断控制，支持所有标准中断。中断服务函数需在 NVIC 中配置优先级并编写对应中断处理程序。\nUSART_DMACmd # void USART_DMACmd(USART_TypeDef *USARTx, uint16_t USART_DMAReq, FunctionalState NewState)\n使能或禁用 USART 的 DMA 请求。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_DMAReq uint16_t DMA 请求类型：USART_DMAReq_Tx 或 USART_DMAReq_Rx NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，数据传输由 DMA 控制器自动完成，无需 CPU 参与。需提前配置 DMA 通道与 USART 的映射关系（参考 DMA 驱动文档），适用于大数据量传输，如文件下载、音频流等。\nUSART_SetAddress # void USART_SetAddress(USART_TypeDef *USARTx, uint8_t USART_Address)\n设置 USART 的节点地址，用于多机通信（地址标记唤醒模式）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_Address uint8_t 节点地址，范围 0~255 返回值：\n无\n仅在 USART_WakeUpConfig(USART_WakeUp_AddressMark) 模式下有效。当接收到地址帧时，若地址匹配则唤醒并接收后续数据，适用于 RS-485 多点网络。\nUSART_WakeUpConfig # void USART_WakeUpConfig(USART_TypeDef *USARTx, uint16_t USART_WakeUp)\n配置 USART 的唤醒方式。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_WakeUp uint16_t 唤醒方式：USART_WakeUp_IdleLine 或 USART_WakeUp_AddressMark 返回值：\n无\n用于低功耗模式（如 Stop 模式）下，通过检测空闲线或地址帧唤醒 MCU，显著降低待机功耗，适用于电池供电的远程终端。\nUSART_ReceiverWakeUpCmd # void USART_ReceiverWakeUpCmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用接收器静音模式（Mute Mode）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，接收器忽略所有数据，仅监听唤醒帧（空闲线或地址标记），用于节能场景。与 USART_WakeUpConfig 配合使用，实现智能唤醒。\nUSART_LINBreakDetectLengthConfig # void USART_LINBreakDetectLengthConfig(USART_TypeDef *USARTx, uint16_t USART_LINBreakDetectLength)\n配置 LIN 总线中断帧检测长度。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_LINBreakDetectLength uint16_t 检测长度：10b 或 11b 返回值：\n无\nLIN 协议中，主节点发送 13 位低电平作为帧起始，从节点通过检测 10 或 11 位低电平识别帧头，此配置确保与不同 LIN 版本兼容。\nUSART_LINCmd # void USART_LINCmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用 LIN 总线模式。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，USART 自动识别 LIN 帧结构（包括同步场、标识符、数据、校验），适用于汽车电子中的低成本传感器网络。\nUSART_SendData # void USART_SendData(USART_TypeDef *USARTx, uint16_t Data)\n向 USART 发送单个数据字节或字（根据数据位长度）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） Data uint16_t 待发送数据，仅低 9 位有效（0x01FF） 返回值：\n无\n数据写入发送数据寄存器（DATAR），硬件自动处理移位与校验。若发送缓冲区满（TXE 未置位），需等待或使用中断/DMA。\nUSART_ReceiveData # uint16_t USART_ReceiveData(USART_TypeDef *USARTx)\n从 USART 接收一个数据字节或字。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） 返回值：\n接收到的数据（低 9 位有效）\n读取接收数据寄存器（DATAR），自动清除 RXNE 标志。若无数据，返回值可能为无效数据，建议先检查 USART_GetFlagStatus(USART_FLAG_RXNE)。\nUSART_SendBreak # void USART_SendBreak(USART_TypeDef *USARTx)\n发送一个持续 10~11 位的低电平中断帧（Break）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） 返回值：\n无\n用于 LIN、Modbus 等协议中作为帧起始或复位信号，通过置位 CTLR1 的 SBK 位实现，发送后自动恢复。\nUSART_SetGuardTime # void USART_SetGuardTime(USART_TypeDef *USARTx, uint8_t USART_GuardTime)\n设置 SmartCard 模式下的保护时间（Guard Time）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_GuardTime uint8_t 保护时间，单位为 T（1 个字符传输时间），范围 0~255 返回值：\n无\nSmartCard 通信中，主机发送后需等待至少 GT 时间再接收响应，避免总线冲突。GT = 0 表示无等待。\nUSART_SetPrescaler # void USART_SetPrescaler(USART_TypeDef *USARTx, uint8_t USART_Prescaler)\n设置 SmartCard 模式下的系统时钟预分频器。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_Prescaler uint8_t 预分频值，范围 0~255 返回值：\n无\n用于调整 SmartCard 通信的时钟频率，使波特率与卡片要求匹配（如 3.57MHz 或 4.91MHz）。\nUSART_SmartCardCmd # void USART_SmartCardCmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用 SmartCard 模式。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，USART 自动启用单线半双工模式，仅使用 TX 引脚进行双向通信，适用于读写 IC 卡、SIM 卡等。\nUSART_SmartCardNACKCmd # void USART_SmartCardNACKCmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用 SmartCard 模式下的 NACK（否定应答）发送。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n当接收错误时，主机可发送 NACK 通知卡片重传，提高通信可靠性。\nUSART_HalfDuplexCmd # void USART_HalfDuplexCmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用半双工模式。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，TX 和 RX 引脚复用为单线，仅允许一方发送，适用于 RS-485 总线等半双工通信场景，需外部收发控制电路。\nUSART_OverSampling8Cmd # void USART_OverSampling8Cmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用 8 倍过采样模式。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n注意：必须在 USART_Init() 之前调用！ 8 倍过采样可提升波特率精度，尤其在低频系统时钟下（如 8MHz），能更精确生成 115200bps 等非整数倍波特率。\nUSART_OneBitMethodCmd # void USART_OneBitMethodCmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用单边沿采样方法。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，接收器仅在每个数据位的中间采样一次，降低功耗并提升抗噪声能力，适用于长距离、低速通信。\nUSART_IrDAConfig # void USART_IrDAConfig(USART_TypeDef *USARTx, uint16_t USART_IrDAMode)\n配置 IrDA 模式下的接收器灵敏度。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_IrDAMode uint16_t USART_IrDAMode_LowPower 或 USART_IrDAMode_Normal 返回值：\n无\n通过设置 CTLR3 的 IRLP 位，控制接收器滤波器带宽，低功耗模式牺牲灵敏度换取更低电流消耗。\nUSART_IrDACmd # void USART_IrDACmd(USART_TypeDef *USARTx, FunctionalState NewState)\n使能或禁用 IrDA 红外通信模式。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） NewState FunctionalState ENABLE 或 DISABLE 返回值：\n无\n启用后，TX 引脚输出红外调制信号，RX 引脚接收红外脉冲，适用于遥控器、红外数据传输等场景，需外接红外收发模块。\nUSART_GetFlagStatus # FlagStatus USART_GetFlagStatus(USART_TypeDef *USARTx, uint16_t USART_FLAG)\n查询指定标志位状态（SET 或 RESET）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_FLAG uint16_t 标志位，如 USART_FLAG_RXNE、USART_FLAG_TXE 等 返回值：\nSET 或 RESET\n用于轮询方式判断通信状态，如等待发送完成或接收数据。注意：部分标志（如 ORE、FE、NE、PE）需配合读 DATAR 清除。\nUSART_ClearFlag # void USART_ClearFlag(USART_TypeDef *USARTx, uint16_t USART_FLAG)\n清除指定的 USART 状态标志。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_FLAG uint16_t 要清除的标志位 返回值：\n无\n通过向 STATR 写入 1 清除对应位（写 1 清零）。注意：TXE、RXNE、TC 等标志有特殊清除方式，详见注释。\nUSART_GetITStatus # ITStatus USART_GetITStatus(USART_TypeDef *USARTx, uint16_t USART_IT)\n检查指定中断是否发生（SET 或 RESET）。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_IT uint16_t 中断源，如 USART_IT_RXNE、USART_IT_ERR 等 返回值：\nSET 或 RESET\n用于中断服务函数中判断具体中断源，需结合 USART_GetITStatus() 和 USART_ClearITPendingBit() 使用。\nUSART_ClearITPendingBit # void USART_ClearITPendingBit(USART_TypeDef *USARTx, uint16_t USART_IT)\n清除指定中断的挂起标志。\n参数：\n名称 类型 简述 USARTx USART_TypeDef * 选择 USART 外设（仅 USART1） USART_IT uint16_t 要清除的中断源 返回值：\n无\n通过向 STATR 写入 1 清除中断标志。必须在中断服务函数末尾调用，否则中断会持续触发。部分错误中断需配合读 DATAR 清除。\n","externalUrl":null,"permalink":"/ch32v003_doc/18.ch32v00x_usart.h/","section":"CH32V00x的软件文档","summary":"该文件包含 CH32V00x 系列微控制器 USART 固件库的所有函数原型、常量定义、枚举类型和结构体定义。USART（通用同步/异步收发器）支持异步 UART 模式和同步 SPI 模式，具备完整的硬件流控、IrDA、SmartCard、LIN 总线、半双工、过采样 8 倍等高级功能，适用于工业通信、传感器网络、智能卡读写等场景。所有配置参数均通过位域组合实现高效寄存器控制，避免了冗余的函数调用，提升了实时性与灵活性。","title":"ch32v00x_usart.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件包含窗口看门狗（WWDG）固件库的所有函数原型和常量定义。WWDG 是一种独立于主时钟的看门狗定时器，用于在系统因异常导致程序跑飞时强制复位，保障系统可靠性。其核心特性是“窗口”机制：计数器必须在特定窗口范围内被刷新，否则将触发复位，从而防止软件在错误状态下“侥幸”喂狗。本库提供初始化、配置、使能和状态查询等完整功能接口，适用于对系统稳定性要求严苛的嵌入式应用。\n常量 # WWDG_Prescaler # 看门狗预分频器设置，决定计数器时钟源的分频系数。\n预分频器将 PCLK1 时钟（通常为 36MHz）先除以 4096，再根据此值进一步分频，从而控制看门狗计数速率。分频值越大，计数越慢，允许的喂狗时间窗口越宽。\n以上所有值都强制转换为 uint32_t。\n名称 值 简述 WWDG_Prescaler_1 0x00000000 计数器时钟 = (PCLK1/4096)/1 WWDG_Prescaler_2 0x00000080 计数器时钟 = (PCLK1/4096)/2 WWDG_Prescaler_4 0x00000100 计数器时钟 = (PCLK1/4096)/4 WWDG_Prescaler_8 0x00000180 计数器时钟 = (PCLK1/4096)/8 枚举 # 无\n结构体 # 无\n函数 # WWDG_DeInit # void WWDG_DeInit(void)\n将 WWDG 外设的所有寄存器恢复为复位默认值。通过复位 APB1 总线上的 WWDG 模块实现，而非逐位写入，确保彻底清除所有配置状态，适用于系统初始化或异常恢复后重置看门狗。\n参数：\n无\n返回值：\n无\nWWDG_SetPrescaler # void WWDG_SetPrescaler(uint32_t WWDG_Prescaler)\n设置看门狗计数器的时钟预分频系数。该配置决定了计数器递减的速率，直接影响看门狗的超时时间。必须在使能 WWDG 前设置，否则配置无效。建议根据系统主频和所需最小喂狗周期选择合适的分频值，避免因分频过小导致喂狗过于频繁，或分频过大导致响应延迟过长。\n参数：\n名称 类型 简述 WWDG_Prescaler uint32_t 预分频器值，取值范围为 WWDG_Prescaler_1 至 WWDG_Prescaler_8 返回值：\n无\nWWDG_SetWindowValue # void WWDG_SetWindowValue(uint8_t WindowValue)\n设置看门狗的窗口值，用于定义允许刷新计数器的合法范围。计数器值必须在 0x40 到 WindowValue 之间被重载，否则将触发复位。窗口机制防止了软件在程序异常但尚未崩溃时“提前喂狗”（如在循环开头就喂狗），从而真正检测程序是否在预期路径上运行。窗口值必须小于 0x80，且通常建议设置为略小于初始计数值（如 0x7F），以提供合理安全裕度。\n参数：\n名称 类型 简述 WindowValue uint8_t 窗口上限值，必须小于 0x80，推荐范围 0x40 ~ 0x7F 返回值：\n无\nWWDG_EnableIT # void WWDG_EnableIT(void)\n使能 WWDG 的早期唤醒中断（EWI）。当计数器值下降至 0x40 时，将触发 EWI 中断，允许用户在复位前执行紧急处理（如保存关键数据、进入低功耗模式等）。该中断是 WWDG 的核心安全特性之一，可实现“软复位前的最后抢救”。注意：使能中断后仍需在中断服务程序中及时喂狗，否则仍会触发硬件复位。\n参数：\n无\n返回值：\n无\nWWDG_SetCounter # void WWDG_SetCounter(uint8_t Counter)\n设置看门狗计数器的初始值，但不启动看门狗。此函数仅写入计数器寄存器，不激活看门狗功能。计数器值必须在 0x40 至 0x7F 之间，超出范围将被截断。该函数通常用于在调用 WWDG_Enable() 前预设计数值，或在 EWI 中断中重新加载计数器以延长运行时间。\n参数：\n名称 类型 简述 Counter uint8_t 计数器初始值，范围必须为 0x40 ~ 0x7F 返回值：\n无\nWWDG_Enable # void WWDG_Enable(uint8_t Counter)\n启动 WWDG 并立即加载计数器值。此函数是使能看门狗的唯一方式，一旦调用，计数器将开始递减，必须在超时前通过 WWDG_SetCounter() 或 WWDG_Enable() 重新加载，否则将触发系统复位。计数器值必须在 0x40 至 0x7F 之间，且加载后立即开始计时。注意：此函数会自动设置 WDGA 位，无需手动操作。\n参数：\n名称 类型 简述 Counter uint8_t 计数器初始值，范围必须为 0x40 ~ 0x7F 返回值：\n无\nWWDG_GetFlagStatus # FlagStatus WWDG_GetFlagStatus(void)\n读取 WWDG 的早期唤醒中断标志（EWI）状态。当计数器值下降至 0x40 时，该标志被硬件置位，表示即将触发复位。用户应在中断服务程序或主循环中定期检查此标志，以决定是否执行紧急操作。该函数返回 SET 或 RESET，需配合 WWDG_EnableIT() 使用。\n参数：\n无\n返回值：\nSET：早期唤醒中断标志已置位（计数器已进入窗口临界区）\nRESET：标志未置位（计数器仍在安全范围内）\nWWDG_ClearFlag # void WWDG_ClearFlag(void)\n清除 WWDG 的早期唤醒中断标志（EWI）。在中断服务程序中处理完 EWI 事件后，必须调用此函数清除标志，否则中断会持续触发。注意：此操作仅清除标志位，不影响计数器运行或看门狗状态。\n参数：\n无\n返回值：\n无\n","externalUrl":null,"permalink":"/ch32v003_doc/19.ch32v00x_wwdg.h/","section":"CH32V00x的软件文档","summary":"该文件包含窗口看门狗（WWDG）固件库的所有函数原型和常量定义。WWDG 是一种独立于主时钟的看门狗定时器，用于在系统因异常导致程序跑飞时强制复位，保障系统可靠性。其核心特性是“窗口”机制：计数器必须在特定窗口范围内被刷新，否则将触发复位，从而防止软件在错误状态下“侥幸”喂狗。本库提供初始化、配置、使能和状态查询等完整功能接口，适用于对系统稳定性要求严苛的嵌入式应用。","title":"ch32v00x_wwdg.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件是 CH32V003 微控制器的外设访问层头文件，定义了所有外设寄存器的内存映射、位域常量、中断向量、时钟配置、GPIO 控制结构及系统级常量。它为标准外设库提供底层硬件抽象，使开发者可通过结构体指针直接访问寄存器，或通过位掩码配置外设功能。本文件不包含函数原型，仅提供寄存器定义与常量，是所有外设驱动开发的基础。\n常量 # HSE_VALUE, HSI_VALUE, HSE_STARTUP_TIMEOUT # 外部高速晶振（HSE）与内部高速振荡器（HSI）的标称频率及启动超时值\nHSE 默认为 24MHz，HSI 同样为 24MHz，适用于无外部晶振的简化系统。HSE 启动超时设置为 8192 个时钟周期，确保在低速或负载条件下仍有足够时间稳定。这些值可被用户在编译时通过宏覆盖，以适配不同硬件配置。\n名称 值 简述 HSE_VALUE 24000000 外部高速振荡器频率（Hz） HSI_VALUE 24000000 内部高速振荡器频率（Hz） HSE_STARTUP_TIMEOUT 0x2000 HSE 启动超时计数（约 8192 个周期） 以上所有值均为 uint32_t 类型，用于时钟配置与初始化延时计算。\n__CH32V00x_STDPERIPH_VERSION # 标准外设库版本号，由主版本与子版本组成，用于版本兼容性检查\n主版本为 0x02（2），子版本为 0x01（1），组合为 0x0201。此版本号可用于条件编译，确保代码与库版本匹配，避免因 API 变更导致的运行时错误。\n名称 值 简述 __CH32V00x_STDPERIPH_VERSION_MAIN 0x02 主版本号 __CH32V00x_STDPERIPH_VERSION_SUB 0x01 子版本号 __CH32V00x_STDPERIPH_VERSION 0x0201 组合版本号（主\u0026laquo;8 IRQn_Type 中断向量编号 # RISC-V 架构与 CH32V003 特有外设的中断请求编号，用于配置 NVIC 与中断服务函数\n编号遵循 RISC-V 标准异常（214）与芯片特定外设中断（1638），每个编号对应一个唯一的中断服务函数入口。系统定时器（SysTick）和软件中断（Software）为通用内核中断，其余为外设专属，如 ADC、I2C、USART 等。\n名称 值 简述 NonMaskableInt_IRQn 2 不可屏蔽中断 EXC_IRQn 3 异常中断（HardFault） SysTick_IRQn 12 系统节拍定时器中断 Software_IRQn 14 软件触发中断 WWDG_IRQn 16 窗口看门狗中断 PVD_IRQn 17 电源电压检测中断 FLASH_IRQn 18 闪存操作完成中断 RCC_IRQn 19 时钟控制中断 EXTI7_0_IRQn 20 外部中断线 0~7 组合中断 AWU_IRQn 21 自动唤醒单元中断 DMA1_Channel1_IRQn 22 DMA 通道 1 中断 DMA1_Channel2_IRQn 23 DMA 通道 2 中断 DMA1_Channel3_IRQn 24 DMA 通道 3 中断 DMA1_Channel4_IRQn 25 DMA 通道 4 中断 DMA1_Channel5_IRQn 26 DMA 通道 5 中断 DMA1_Channel6_IRQn 27 DMA 通道 6 中断 DMA1_Channel7_IRQn 28 DMA 通道 7 中断 ADC_IRQn 29 ADC 转换完成中断 I2C1_EV_IRQn 30 I2C1 事件中断（传输完成、地址匹配等） I2C1_ER_IRQn 31 I2C1 错误中断（超时、仲裁丢失等） USART1_IRQn 32 USART1 接收/发送中断 SPI1_IRQn 33 SPI1 传输完成中断 TIM1_BRK_IRQn 34 TIM1 刹车中断 TIM1_UP_IRQn 35 TIM1 更新中断（计数器溢出） TIM1_TRG_COM_IRQn 36 TIM1 触发与互补输出中断 TIM1_CC_IRQn 37 TIM1 捕获/比较中断 TIM2_IRQn 38 TIM2 通用定时器中断 注：HardFault_IRQn 与 SysTicK_IRQn 为别名定义，前者指向 EXC_IRQn，后者拼写错误（应为 SysTick_IRQn），使用时需注意。\nPERIPH_BASE, APB1PERIPH_BASE, APB2PERIPH_BASE, AHBPERIPH_BASE # 外设基地址映射，用于构建外设寄存器指针\nCH32V003 采用统一编址，AHB、APB1、APB2 总线外设分别映射到不同地址段。APB1 与 APB2 均从 0x40000000 开始，但 APB2 偏移 0x10000，AHB 偏移 0x20000。此设计允许通过基地址加偏移快速定位寄存器。\n名称 值 简述 PERIPH_BASE 0x40000000 外设总线基地址 APB1PERIPH_BASE 0x40000000 APB1 外设基地址（低速外设） APB2PERIPH_BASE 0x40010000 APB2 外设基地址（高速外设） AHBPERIPH_BASE 0x40020000 AHB 外设基地址（DMA、RCC、FLASH） FLASH_BASE, SRAM_BASE # 存储器空间基地址，用于内存访问与链接脚本配置\nFlash 从 0x08000000 开始，SRAM 从 0x20000000 开始，符合 ARM Cortex-M/RISC-V 标准内存布局。Flash 为可编程非易失存储，SRAM 为运行时数据区。\n名称 值 简述 FLASH_BASE 0x08000000 Flash 存储器基地址 SRAM_BASE 0x20000000 SRAM 基地址 TIM2_BASE, WWDG_BASE, I2C1_BASE, PWR_BASE, AFIO_BASE, EXTI_BASE, GPIOx_BASE, ADC1_BASE, TIM1_BASE, SPI1_BASE, USART1_BASE, DMA1_BASE, RCC_BASE, FLASH_R_BASE, OB_BASE, EXTEN_BASE # 各外设寄存器组的具体物理地址，用于实例化外设指针\n这些地址是 PERIPH_BASE 加上偏移量的计算结果，直接用于如 GPIOA = (GPIO_TypeDef *)GPIOA_BASE; 的指针赋值。地址分配遵循外设总线拓扑，高速外设（如 TIM1、SPI1）位于 APB2，低速外设（如 TIM2、I2C1）位于 APB1。\n名称 值 简述 TIM2_BASE 0x40000000 TIM2 定时器寄存器地址 WWDG_BASE 0x40002C00 窗口看门狗寄存器地址 IWDG_BASE 0x40003000 独立看门狗寄存器地址 I2C1_BASE 0x40005400 I2C1 通信接口地址 PWR_BASE 0x40007000 电源控制寄存器地址 AFIO_BASE 0x40010000 复用功能IO寄存器地址 EXTI_BASE 0x40010400 外部中断控制器地址 GPIOA_BASE 0x40010800 GPIOA 端口寄存器地址 GPIOC_BASE 0x40011000 GPIOC 端口寄存器地址 GPIOD_BASE 0x40011400 GPIOD 端口寄存器地址 ADC1_BASE 0x40012400 ADC1 模数转换器地址 TIM1_BASE 0x40012C00 TIM1 高级定时器地址 SPI1_BASE 0x40013000 SPI1 串行外设接口地址 USART1_BASE 0x40013800 USART1 通用异步收发器地址 DMA1_BASE 0x40020000 DMA1 控制器基地址 DMA1_Channel1_BASE 0x40020008 DMA1 通道1寄存器地址 DMA1_Channel2_BASE 0x4002001C DMA1 通道2寄存器地址 DMA1_Channel3_BASE 0x40020030 DMA1 通道3寄存器地址 DMA1_Channel4_BASE 0x40020044 DMA1 通道4寄存器地址 DMA1_Channel5_BASE 0x40020058 DMA1 通道5寄存器地址 DMA1_Channel6_BASE 0x4002006C DMA1 通道6寄存器地址 DMA1_Channel7_BASE 0x40020080 DMA1 通道7寄存器地址 RCC_BASE 0x40021000 时钟控制模块地址 FLASH_R_BASE 0x40022000 Flash 控制寄存器地址 OB_BASE 0x1FFFF800 选项字节存储地址（非标准外设地址） EXTEN_BASE 0x40023800 增强功能寄存器地址 VENDOR_CFG0_BASE, CFG0_PLL_TRIM # 厂商配置寄存器地址，用于校准 PLL 与芯片特性\nCFG0_PLL_TRIM 为 PLL 频率校准寄存器，位于 0x1FFFF7D4，出厂时已预设，用户可读取但不建议修改，否则可能导致系统时钟不稳定。\n名称 值 简述 VENDOR_CFG0_BASE 0x1FFFF7D4 厂商配置寄存器基地址 CFG0_PLL_TRIM 0x1FFFF7D4 PLL 时钟校准值地址 FLASH_MODEKEYR_KEY1, FLASH_MODEKEYR_KEY2, FLASH_BOOT_MODEKEYR_KEY1, FLASH_BOOT_MODEKEYR_KEY2 # Flash 模式解锁密钥，用于解锁 Flash 编程/擦除操作\nFlash 操作前必须按顺序写入 0x45670123 和 0xCDEF89AB 两个密钥，否则写入将被拒绝。此机制防止意外写入，增强系统安全性。\n名称 值 简述 FLASH_MODEKEYR_KEY1 0x45670123 Flash 模式解锁密钥1 FLASH_MODEKEYR_KEY2 0xCDEF89AB Flash 模式解锁密钥2 FLASH_BOOT_MODEKEYR_KEY1 0x45670123 引导模式解锁密钥1 FLASH_BOOT_MODEKEYR_KEY2 0xCDEF89AB 引导模式解锁密钥2 EXTEN_LOCKUP_EN, EXTEN_LOCKUP_RSTF, EXTEN_LDO_TRIM, EXTEN_OPA_EN, EXTEN_OPA_NSEL, EXTEN_OPA_PSEL # 增强功能寄存器位定义，用于调试与模拟电路控制\n这些位控制芯片内部增强功能，如锁死检测（Lockup）、LDO 电压校准、运算放大器使能与输入选择。仅在特定调试或低功耗场景下使用，普通应用无需配置。\n名称 值 简述 EXTEN_LOCKUP_EN 0x00000040 启用锁死检测功能（位6） EXTEN_LOCKUP_RSTF 0x00000080 锁死复位标志（位7） EXTEN_LDO_TRIM 0x00000400 LDO 电压校准位（位10） EXTEN_OPA_EN 0x00010000 运算放大器使能 EXTEN_OPA_NSEL 0x00020000 运算放大器负输入选择 EXTEN_OPA_PSEL 0x00040000 运算放大器正输入选择 枚举 # IRQn_Type # 中断请求编号枚举（已在常量部分完整列出，此处为重复定义，实际为类型别名）\n此枚举类型用于声明中断服务函数的参数或 NVIC 配置函数的输入，确保中断编号的类型安全。虽然值已在常量中定义，但枚举形式便于编译器检查和 IDE 自动补全。\n注：本文件中 IRQn_Type 为 typedef enum 定义，其值与常量部分完全一致，无新增项。\n结构体 # ADC_TypeDef # 模数转换器（ADC）寄存器结构体，映射 ADC1 的所有控制与数据寄存器\nADC 为 12 位逐次逼近型转换器，支持单次/连续转换、扫描模式、注入通道、DMA 传输。寄存器包括状态、控制、采样时间、比较阈值、转换序列与结果寄存器，支持多通道自动轮询。\n名称 类型 简述 STATR __IO uint32_t 状态寄存器：AWD、EOC、JEOC 等标志位 CTLR1 __IO uint32_t 控制寄存器1：扫描模式、中断使能、AWD 通道选择 CTLR2 __IO uint32_t 控制寄存器2：ADON、CONT、DMA、触发源、校准 SAMPTR1 __IO uint32_t 采样时间寄存器1：通道10~15 的采样周期配置 SAMPTR2 __IO uint32_t 采样时间寄存器2：通道0~9 的采样周期配置 IOFR1 __IO uint32_t 注入通道1偏移寄存器 IOFR2 __IO uint32_t 注入通道2偏移寄存器 IOFR3 __IO uint32_t 注入通道3偏移寄存器 IOFR4 __IO uint32_t 注入通道4偏移寄存器 WDHTR __IO uint32_t 模拟看门狗高阈值寄存器 WDLTR __IO uint32_t 模拟看门狗低阈值寄存器 RSQR1 __IO uint32_t 规则序列寄存器1：SQ13~SQ16 与序列长度 L RSQR2 __IO uint32_t 规则序列寄存器2：SQ7~SQ12 RSQR3 __IO uint32_t 规则序列寄存器3：SQ1~SQ6 ISQR __IO uint32_t 注入序列寄存器：JSQ1~JSQ4 与注入序列长度 JL IDATAR1 __IO uint32_t 注入通道1转换结果寄存器 IDATAR2 __IO uint32_t 注入通道2转换结果寄存器 IDATAR3 __IO uint32_t 注入通道3转换结果寄存器 IDATAR4 __IO uint32_t 注入通道4转换结果寄存器 RDATAR __IO uint32_t 规则通道转换结果寄存器（32位） DLYR __IO uint32_t 延迟控制寄存器：延迟值与源选择 所有寄存器均为 __IO uint32_t 类型，表示可读写且易变，编译器不会优化访问。\nDBGMCU_TypeDef # 调试 MCU 寄存器结构体，用于调试功能配置\n仅包含两个寄存器：CFGR0 和 CFGR1，用于在调试模式下冻结定时器、关闭看门狗等，便于单步调试。\n名称 类型 简述 CFGR0 __IO uint32_t 调试配置寄存器0 CFGR1 __IO uint32_t 调试配置寄存器1 DMA_Channel_TypeDef # DMA 通道控制寄存器结构体，每个通道独立配置\n每个通道包含配置、计数、源地址、目标地址寄存器，支持内存/外设双向传输、循环模式、优先级设置。\n名称 类型 简述 CFGR __IO uint32_t 通道配置寄存器：使能、方向、大小、优先级、循环、内存递增等 CNTR __IO uint32_t 传输计数寄存器：剩余传输字节数 PADDR __IO uint32_t 外设地址寄存器 MADDR __IO uint32_t 内存地址寄存器 DMA_TypeDef # DMA 控制器全局寄存器结构体，管理中断与清除标志\n包含中断状态寄存器与中断清除寄存器，用于查询和清除各通道的传输完成、错误等事件。\n名称 类型 简述 INTFR __IO uint32_t 中断标志寄存器：各通道的 GIF、TCIF、HTIF、TEIF INTFCR __IO uint32_t 中断清除寄存器：对应标志位写1清零 EXTI_TypeDef # 外部中断/事件控制器寄存器结构体\n管理 10 条外部中断线（0~9）的使能、触发方式（上升/下降）、软件触发与挂起状态。\n名称 类型 简述 INTENR __IO uint32_t 中断使能寄存器：MR0~MR9 EVENR __IO uint32_t 事件使能寄存器：与中断类似，但不触发 CPU 中断 RTENR __IO uint32_t 上升沿触发使能寄存器：TR0~TR9 FTENR __IO uint32_t 下降沿触发使能寄存器：TR0~TR9 SWIEVR __IO uint32_t 软件中断触发寄存器：SWIEVR0~SWIEVR9 INTFR __IO uint32_t 中断挂起标志寄存器：INTF0~INTF9 FLASH_TypeDef # Flash 存储器控制器寄存器结构体\n用于 Flash 编程、擦除、读保护、选项字节操作。包含密钥、状态、控制、地址、选项字节等寄存器。\n名称 类型 简述 ACTLR __IO uint32_t Flash 控制寄存器：等待状态（Latency） KEYR __IO uint32_t Flash 解锁密钥寄存器 OBKEYR __IO uint32_t 选项字节解锁密钥寄存器 STATR __IO uint32_t 状态寄存器：BSY、WRPRTERR、EOP、LOCK CTLR __IO uint32_t 控制寄存器：PG、PER、MER、STRT、LOCK、EOPIE 等 ADDR __IO uint32_t 目标地址寄存器 RESERVED __IO uint32_t 保留位 OBR __IO uint32_t 选项字节寄存器：RDPRT、USER、WDT_SW 等 WPR __IO uint32_t 写保护寄存器：每字节保护位 MODEKEYR __IO uint32_t Flash 模式密钥寄存器 BOOT_MODEKEYR __IO uint32_t 引导模式密钥寄存器 OB_TypeDef # 选项字节寄存器结构体，独立于 Flash 控制器，位于 0x1FFFF800\n用于配置读保护、看门狗模式、复位行为、用户数据等，写入需先解锁并擦除。\n名称 类型 简述 RDPR __IO uint16_t 读保护选项字节（8位） USER __IO uint16_t 用户选项字节（8位） Data0 __IO uint16_t 用户数据存储0（8位） Data1 __IO uint16_t 用户数据存储1（8位） WRPR0 __IO uint16_t Flash 写保护0（8位） WRPR1 __IO uint16_t Flash 写保护1（8位） GPIO_TypeDef # 通用输入/输出端口寄存器结构体，每个端口（A/C/D）独立实例\n支持配置引脚模式（输入/输出/复用/模拟）、速度、上拉/下拉、置位/复位、锁定等功能。\n名称 类型 简述 CFGLR __IO uint32_t 配置寄存器：MODE07（2位）与 CNF07（2位） RESERVED0 uint32_t 保留位 INDR __IO uint32_t 输入数据寄存器：读取引脚电平 OUTDR __IO uint32_t 输出数据寄存器：写入引脚电平 BSHR __IO uint32_t 位设置/复位寄存器：BSx 设置，BRx 复位（32位） BCR __IO uint32_t 位复位寄存器：BR0~BR7（16位） LCKR __IO uint32_t 锁定寄存器：LCK0~LCK7 + LCKK 锁定序列 AFIO_TypeDef # 复用功能与中断重映射控制器寄存器结构体\n支持外设引脚重映射（如 USART1 从 PA9/PA10 移至 PB6/PB7）、EXTI 线路映射、SWD 调试接口配置。\n名称 类型 简述 RESERVED0 uint32_t 保留位 PCFR1 __IO uint32_t 复用功能配置寄存器1：TIM1/TIM2/USART1/I2C1 重映射、SWJ_CFG EXTICR __IO uint32_t 外部中断配置寄存器：EXTI0~7 映射到 PA/PB/PC/PD I2C_TypeDef # I2C 通信接口寄存器结构体\n支持主/从模式、DMA、PEC 校验、时钟拉伸、地址匹配。\n名称 类型 简述 CTLR1 __IO uint16_t 控制寄存器1：PE、ACK、START、STOP、SWRST RESERVED0 uint16_t 保留位 CTLR2 __IO uint16_t 控制寄存器2：FREQ、ITERREN、ITEVTEN、ITBUFEN、DMAEN、LAST RESERVED1 uint16_t 保留位 OADDR1 __IO uint16_t 从机地址寄存器1：7位地址 + 10位地址模式 RESERVED2 uint16_t 保留位 OADDR2 __IO uint16_t 从机地址寄存器2：双地址使能与地址2 RESERVED3 uint16_t 保留位 DATAR __IO uint16_t 数据寄存器：发送/接收8位数据 RESERVED4 uint16_t 保留位 STAR1 __IO uint16_t 状态寄存器1：SB、ADDR、BTF、RXNE、TXE、BERR、AF、OVR RESERVED5 uint16_t 保留位 STAR2 __IO uint16_t 状态寄存器2：MSL、BUSY、TRA、GENCALL、DUALF、PEC RESERVED6 uint16_t 保留位 CKCFGR __IO uint16_t 时钟配置寄存器：CCR、DUTY、FS RESERVED7 uint16_t 保留位 IWDG_TypeDef # 独立看门狗寄存器结构体\n独立于系统时钟，使用内部低速 RC 振荡器（LSI），用于系统死锁恢复。\n名称 类型 简述 CTLR __IO uint32_t 控制寄存器：写入 0xAAAA 启动，0xCCCC 刷新 PSCR __IO uint32_t 预分频寄存器：PR[2:0]，分频比 4~128 RLDR __IO uint32_t 重载寄存器：12位计数值，最大 4095 STATR __IO uint32_t 状态寄存器：PVU（预分频更新）、RVU（重载更新） PWR_TypeDef # 电源控制寄存器结构体\n控制低功耗模式（睡眠、停机、待机）、PVD（电源电压检测）阈值、AWU（自动唤醒）。\n名称 类型 简述 CTLR __IO uint32_t 控制寄存器：PDDS、PVDE、PLS（PVD阈值） CSR __IO uint32_t 状态寄存器：PVDO（PVD输出） AWUCSR __IO uint32_t AWU 控制状态寄存器：AWUEN AWUWR __IO uint32_t AWU 窗口寄存器：唤醒时间窗口 AWUPSC __IO uint32_t AWU 预分频寄存器：分频比 1~61440 RCC_TypeDef # 复位与时钟控制寄存器结构体\n系统时钟源选择（HSI/HSE/PLL）、AHB/APB 分频、ADC 预分频、PLL 使能、时钟安全系统（CSS）。\n名称 类型 简述 CTLR __IO uint32_t 控制寄存器：HSION、HSEON、PLLON、CSSON CFGR0 __IO uint32_t 时钟配置寄存器0：SW、HPRE、ADCPRE、PLLSRC、MCO INTR __IO uint32_t 中断寄存器：LSIRDYF、HSIRDYF、HSERDYF、PLLRDYF、CSSF APB2PRSTR __IO uint32_t APB2 外设复位寄存器：AFIO、IOPA、ADC1、TIM1、SPI1、USART1 APB1PRSTR __IO uint32_t APB1 外设复位寄存器：TIM2、WWDG、I2C1、PWR AHBPCENR __IO uint32_t AHB 外设时钟使能寄存器：DMA1、SRAM APB2PCENR __IO uint32_t APB2 外设时钟使能寄存器：AFIO、IOPA、ADC1、TIM1、SPI1、USART1 APB1PCENR __IO uint32_t APB1 外设时钟使能寄存器：TIM2、WWDG、I2C1、PWR RESERVED0 __IO uint32_t 保留位 RSTSCKR __IO uint32_t 复位与时钟状态寄存器：LSION、LSIRDY、RMVF、PINRSTF、PORRSTF、SFTRSTF、IWDGRSTF、WWDGRSTF、LPWRRSTF SPI_TypeDef # 串行外设接口寄存器结构体\n支持主/从模式、DMA、CRC、双线单工、数据帧长度（8/16位）。\n名称 类型 简述 CTLR1 __IO uint16_t 控制寄存器1：CPHA、CPOL、MSTR、BR、SPE、LSBFIRST、SSM、RXONLY、DFF、CRCEN RESERVED0 uint16_t 保留位 CTLR2 __IO uint16_t 控制寄存器2：RXDMAEN、TXDMAEN、SSOE、ERRIE、RXNEIE、TXEIE RESERVED1 uint16_t 保留位 STATR __IO uint16_t 状态寄存器：RXNE、TXE、CHSIDE、UDR、CRCERR、MODF、OVR、BSY RESERVED2 uint16_t 保留位 DATAR __IO uint16_t 数据寄存器：发送/接收数据 RESERVED3 uint16_t 保留位 CRCR __IO uint16_t CRC 多项式寄存器 RESERVED4 uint16_t 保留位 RCRCR __IO uint16_t 接收 CRC 寄存器 RESERVED5 uint16_t 保留位 TCRCR __IO uint16_t 发送 CRC 寄存器 RESERVED6 uint16_t 保留位 RESERVED7 uint32_t 保留位 RESERVED8 uint32_t 保留位 HSCR __IO uint16_t 高速模式控制寄存器：HSRXEN RESERVED9 uint16_t 保留位 TIM_TypeDef # 通用/高级定时器寄存器结构体\n支持输入捕获、输出比较、PWM、编码器接口、触发输出、死区时间、DMA 请求。\n名称 类型 简述 CTLR1 __IO uint16_t 控制寄存器1：CEN、UDIS、URS、OPM、DIR、CMS、ARPE、CKD RESERVED0 uint16_t 保留位 CTLR2 __IO uint16_t 控制寄存器2：CCPC、CCUS、CCDS、MMS、TI1S、OISx RESERVED1 uint16_t 保留位 SMCFGR __IO uint16_t 从模式控制寄存器：SMS、TS、MSM、ETF、ETPS、ECE、ETP RESERVED2 uint16_t 保留位 DMAINTENR __IO uint16_t DMA/中断使能寄存器：UIE、CCxIE、COMIE、TIE、BIE、UDE、CCxDE、COMDE、TDE RESERVED3 uint16_t 保留位 INTFR __IO uint16_t 中断标志寄存器：UIF、CCxIF、COMIF、TIF、BIF、CCxOF RESERVED4 uint16_t 保留位 SWEVGR __IO uint16_t 软件事件生成寄存器：UG、CCxG、COMG、TG、BG RESERVED5 uint16_t 保留位 CHCTLR1 __IO uint16_t 通道1/2控制寄存器1：CC1S、OC1M、OC1PE、IC1PSC、IC1F、CC2S、OC2M、OC2PE RESERVED6 uint16_t 保留位 CHCTLR2 __IO uint16_t 通道3/4控制寄存器1：CC3S、OC3M、OC3PE、IC3PSC、IC3F、CC4S、OC4M、OC4PE RESERVED7 uint16_t 保留位 CCER __IO uint16_t 捕获/比较使能寄存器：CCxE、CCxP、CCxNE、CCxNP RESERVED8 uint16_t 保留位 CNT __IO uint16_t 计数器值寄存器 RESERVED9 uint16_t 保留位 PSC __IO uint16_t 预分频器寄存器 RESERVED10 uint16_t 保留位 ATRLR __IO uint16_t 自动重载寄存器 RESERVED11 uint16_t 保留位 RPTCR __IO uint16_t 重复计数器寄存器（仅高级定时器） RESERVED12 uint16_t 保留位 CH1CVR __IO uint32_t 通道1捕获/比较值寄存器 CH2CVR __IO uint32_t 通道2捕获/比较值寄存器 CH3CVR __IO uint32_t 通道3捕获/比较值寄存器 CH4CVR __IO uint32_t 通道4捕获/比较值寄存器 BDTR __IO uint16_t 死区与刹车寄存器：DTG、LOCK、OSSI、OSSR、BKE、BKP、AOE、MOE RESERVED13 uint16_t 保留位 DMACFGR __IO uint16_t DMA 控制寄存器：DBA（DMA基地址）、DBL（DMA长度） RESERVED14 uint16_t 保留位 DMAADR __IO uint16_t DMA 地址寄存器：DMAB（DMA缓冲区地址） RESERVED15 uint16_t 保留位 USART_TypeDef # 通用异步收发器寄存器结构体\n支持全双工、同步、IrDA、SmartCard、LIN、硬件流控（RTS/CTS）。\n名称 类型 简述 STATR __IO uint16_t 状态寄存器：PE、FE、NE、ORE、IDLE、RXNE、TC、TXE、LBD、CTS RESERVED0 uint16_t 保留位 DATAR __IO uint16_t 数据寄存器：9位数据（0~511） RESERVED1 uint16_t 保留位 BRR __IO uint16_t 波特率寄存器：DIV_Mantissa + DIV_Fraction RESERVED2 uint16_t 保留位 CTLR1 __IO uint16_t 控制寄存器1：SBK、RWU、RE、TE、IDLEIE、RXNEIE、TCIE、TXEIE、PEIE、PS、PCE、WAKE、M、UE RESERVED3 uint16_t 保留位 CTLR2 __IO uint16_t 控制寄存器2：ADD、LBDL、LBDIE、LBCL、CPHA、CPOL、CLKEN、STOP、LINEN RESERVED4 uint16_t 保留位 CTLR3 __IO uint16_t 控制寄存器3：EIE、IREN、IRLP、HDSEL、NACK、SCEN、DMAR、DMAT、RTSE、CTSE、CTSIE RESERVED5 uint16_t 保留位 GPR __IO uint16_t 通用寄存器：PSC（预分频）、GT（保护时间） RESERVED6 uint16_t 保留位 WWDG_TypeDef # 窗口看门狗寄存器结构体\n具有时间窗口限制的看门狗，必须在指定窗口内刷新，否则复位。\n名称 类型 简述 CTLR __IO uint32_t 控制寄存器：T[6:0]（计数器值）、WDGA（激活位） CFGR __IO uint32_t 配置寄存器：W[6:0]（窗口值）、WDGTB[1:0]（时间基准）、EWI（提前唤醒中断） STATR __IO uint32_t 状态寄存器：EWIF（提前唤醒中断标志） EXTEN_TypeDef # 增强功能寄存器结构体\n用于控制芯片内部增强功能，如运算放大器、LDO 校准、锁死检测。\n名称 类型 简述 EXTEN_CTR __IO uint32_t 增强功能控制寄存器：LOCKUP_EN、LOCKUP_RSTF、LDO_TRIM、OPA_EN、OPA_NSEL、OPA_PSEL 函数 # 本文件为头文件，仅定义寄存器结构体与常量，不包含任何函数原型。函数实现位于对应的 .c 库文件中（如 ch32v00x_gpio.c），本文件仅提供硬件抽象接口。\n","externalUrl":null,"permalink":"/ch32v003_doc/3.ch32v00x.h/","section":"CH32V00x的软件文档","summary":"该文件是 CH32V003 微控制器的外设访问层头文件，定义了所有外设寄存器的内存映射、位域常量、中断向量、时钟配置、GPIO 控制结构及系统级常量。它为标准外设库提供底层硬件抽象，使开发者可通过结构体指针直接访问寄存器，或通过位掩码配置外设功能。本文件不包含函数原型，仅提供寄存器定义与常量，是所有外设驱动开发的基础。","title":"ch32v00x.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件定义了用于调试输出的通用函数接口，包括串口打印（USART）、微秒/毫秒延时、以及通过SDI（Serial Debug Interface）协议进行高效数据传输的机制。支持多种UART引脚重映射配置，并提供两种打印输出模式：标准USART发送和基于内存映射寄存器的SDI高速调试通道。适用于嵌入式系统开发中的日志输出、调试信息上报和实时数据监控场景。\n常量 # UART_Printf_Definition # 定义UART调试输出的引脚映射模式，用于在不同硬件布局下灵活配置TX引脚位置。\n名称 值 简述 DEBUG_UART1_NoRemap 1 使用默认引脚：PD5（TX） DEBUG_UART1_Remap1 2 使用部分重映射1：PD0（TX） DEBUG_UART1_Remap2 3 使用部分重映射2：PD6（TX） DEBUG_UART1_Remap3 4 使用全重映射：PC0（TX） 以上所有值均为整型常量，用于条件编译选择不同的硬件引脚配置，避免在不同开发板间修改底层代码。\nDEBUG_UART_Definition # 定义调试UART的默认配置，若未显式指定则使用无重映射模式。\n名称 值 简述 DEBUG DEBUG_UART1_NoRemap 默认使用PD5作为UART1发送引脚 SDI_Printf_Definition # 定义SDI（Serial Debug Interface）调试输出开关状态，用于选择是否启用高速内存映射调试通道。\n名称 值 简述 SDI_PR_CLOSE 0 禁用SDI调试通道，使用标准USART发送 SDI_PR_OPEN 1 启用SDI调试通道，通过内存映射寄存器传输数据 SDI通道通过两个32位寄存器（0xE00000F4 和 0xE00000F8）实现零拷贝、低延迟的数据传输，适用于高波特率或实时性要求高的调试场景。\nSDI_Print_Definition # 定义SDI调试输出的默认开关，若未显式指定则默认关闭。\n名称 值 简述 SDI_PRINT SDI_PR_CLOSE 默认使用USART输出，节省资源，兼容性好 函数 # Delay_Init # void Delay_Init(void)\n初始化微秒和毫秒延时的基准计数参数。基于系统时钟频率（SystemCoreClock）计算出每微秒和每毫秒对应的SysTick比较值，为后续精确延时提供时间基准。\n参数：\n无\n返回值：\n无\n该函数必须在调用 Delay_Us() 或 Delay_Ms() 之前执行一次，否则延时时间将不准确。它利用系统时钟的稳定性，使延时与主频解耦，适用于不同主频的MCU平台。\nDelay_Us # void Delay_Us(uint32_t n)\n实现精确的微秒级延时，基于SysTick定时器。通过设置比较寄存器（CMP）并轮询状态标志（SR）实现阻塞式延时。\n参数：\n名称 类型 简述 n uint32_t 需要延时的微秒数（最大支持约500ms，受限于32位计数器） 返回值：\n无\n实现原理：SysTick计数器从0开始递增，当达到CMP值时触发中断标志。通过轮询该标志实现精确等待。该函数适用于需要高精度短时延时的场景，如SPI/I2C时序控制、传感器采样间隔等。\nDelay_Ms # void Delay_Ms(uint32_t n)\n实现毫秒级延时，基于 Delay_Us() 构建。通过将毫秒数乘以预计算的每毫秒计数值实现延时。\n参数：\n名称 类型 简述 n uint32_t 需要延时的毫秒数（最大支持约49天，受限于32位计数器） 返回值：\n无\n该函数在内部调用 Delay_Us()，因此其精度依赖于 Delay_Init() 的正确初始化。适用于任务调度、LED闪烁、通信协议等待等中长期延时场景。\nUSART_Printf_Init # void USART_Printf_Init(uint32_t baudrate)\n初始化USART1外设用于标准串口打印输出。根据 DEBUG 宏定义自动选择对应的GPIO引脚和重映射配置，并配置波特率、数据格式等参数。\n参数：\n名称 类型 简述 baudrate uint32_t 串口通信波特率，如 9600、115200 等 返回值：\n无\n该函数通过条件编译（#if）动态选择引脚：PD5（默认）、PD0、PD6 或 PC0，极大提升了硬件兼容性。同时启用AF_PP（复用推挽输出）模式，确保信号驱动能力。调用后即可通过 printf() 输出调试信息。\nSDI_Printf_Enable # void SDI_Printf_Enable(void)\n启用SDI调试通道，初始化调试数据传输环境。首先清空SDI数据寄存器，然后调用 Delay_Init() 和 Delay_Ms(1) 进行稳定延时，确保硬件就绪。\n参数：\n无\n返回值：\n无\n该函数是使用SDI调试模式的必要前置步骤。它确保SDI接口的两个寄存器（0xE00000F4 和 0xE00000F8）处于已知初始状态，避免上电后残留数据干扰。通常在系统初始化末尾调用。\n_write # int _write(int fd, char *buf, int size)\n标准C库 printf() 的底层输出钩子函数，用于重定向标准输出到调试通道。根据 SDI_PRINT 宏选择使用SDI高速通道或USART普通通道发送数据。\n参数：\n名称 类型 简述 fd int 文件描述符（通常为1，表示标准输出） buf char * 待发送的字符串缓冲区 size int 缓冲区中有效字符数量 返回值：\nint：实际发送的字符数（等于 size）\nSDI模式：每次最多发送7字节数据，通过将8字节数据拆分为 DEBUG_DATA0_ADDRESS（低字节为长度）和 DEBUG_DATA1_ADDRESS（高28位为数据）两个寄存器传输，实现高效批量发送。\nUSART模式：逐字节轮询发送，兼容性好但速度慢。\n该函数使 printf()、puts() 等标准库函数可无缝工作，无需修改上层代码。\n_sbrk # void *_sbrk(ptrdiff_t incr)\n实现C库动态内存分配（malloc）所需的堆扩展函数。用于在堆空间不足时向操作系统申请更多内存。\n参数：\n名称 类型 简述 incr ptrdiff_t 请求增加的堆空间字节数（可为负数，用于释放） 返回值：\nvoid *：分配前的堆指针，失败时返回 (void *)-1\n该函数通过链接脚本定义的 _end 和 _heap_end 符号管理堆边界，防止堆溢出。若 incr 超出允许范围，返回错误指针，避免破坏系统栈或其它内存区域。在使用 malloc、calloc 等函数时必须实现此函数，否则链接失败。\n","externalUrl":null,"permalink":"/ch32v003_doc/1.debug.h/","section":"CH32V00x的软件文档","summary":"该文件定义了用于调试输出的通用函数接口，包括串口打印（USART）、微秒/毫秒延时、以及通过SDI（Serial Debug Interface）协议进行高效数据传输的机制。支持多种UART引脚重映射配置，并提供两种打印输出模式：标准USART发送和基于内存映射寄存器的SDI高速调试通道。适用于嵌入式系统开发中的日志输出、调试信息上报和实时数据监控场景。","title":"debug.h","type":"ch32v003_doc"},{"content":" 描述 # 该文件定义了 CH32V00x 系列微控制器的系统级初始化接口与全局时钟变量，提供系统时钟配置、更新和外设时钟管理的函数原型。通过 SystemInit() 初始化系统时钟源（HSI/HSE）及 PLL，通过 SystemCoreClockUpdate() 动态读取当前时钟配置，确保软件运行时能准确获取核心时钟频率。该模块是所有外设驱动的时钟基础，必须在应用初始化阶段优先调用。\n常量 # SYSCLK_FREQ_xxx # 用于选择系统主时钟源和目标频率，仅可启用其中一项，未启用时默认使用 HSI 作为系统时钟源。这些宏定义在 system_ch32v00x.c 中通过条件编译控制时钟配置函数的调用，实现灵活的时钟方案切换。\n名称 值 简述 SYSCLK_FREQ_8MHz_HSI 8000000 使用 HSI（内部高速时钟）作为系统时钟，频率为 8MHz SYSCLK_FREQ_24MHZ_HSI HSI_VALUE 使用 HSI 作为系统时钟，频率为 24MHz（默认值为 24MHz） SYSCLK_FREQ_48MHZ_HSI 48000000 使用 HSI 经 PLL 倍频至 48MHz 作为系统时钟 SYSCLK_FREQ_8MHz_HSE 8000000 使用外部高速晶振（HSE）作为系统时钟，频率为 8MHz SYSCLK_FREQ_24MHz_HSE HSE_VALUE 使用 HSE 作为系统时钟，频率为 24MHz（默认值为 24MHz） SYSCLK_FREQ_48MHz_HSE 48000000 使用 HSE 经 PLL 倍频至 48MHz 作为系统时钟 注：HSI_VALUE 和 HSE_VALUE 在 ch32v00x.h 中定义为 24000000，表示内部和外部时钟的默认标称频率。实际运行频率可能因晶振精度或内部 RC 校准而略有偏差。\n枚举 # 无\n结构体 # 无\n函数 # SystemInit # void SystemInit(void)\n初始化系统时钟、Flash 延时和外设时钟门控。该函数在芯片复位后由启动代码自动调用，是系统启动流程的核心部分。它首先复位 RCC 寄存器，校准 HSI 内部振荡器，然后根据编译时定义的 SYSCLK_FREQ_xxx 宏调用对应的时钟配置函数（如 SetSysClockTo_48MHz_HSE），最终完成系统时钟源、PLL、AHB 预分频器的配置。\n参数：\n无\n返回值：\n无\n实现要点：该函数不仅配置时钟，还通过 RCC_AdjustHSICalibrationValue() 对内部 RC 振荡器进行校准，提升 HSI 频率精度；同时在配置 48MHz 时钟时，会读取 CFG0_PLL_TRIM 寄存器中的出厂校准值，确保 PLL 稳定性。\nSystemCoreClockUpdate # void SystemCoreClockUpdate(void)\n动态读取 RCC 寄存器当前配置，更新全局变量 SystemCoreClock 的值，以反映实际运行的系统时钟频率。该函数适用于在运行时动态切换时钟源（如从 HSI 切换到 HSE）后，重新同步软件对时钟频率的认知，确保延时函数、UART 波特率等依赖时钟的模块能正确运行。\n参数：\n无\n返回值：\n无\n实现逻辑：函数通过读取 RCC-\u0026gt;CFGR0 中的 SWS 位判断当前系统时钟源（HSI/HSE/PLL），再根据 PLL 是否启用及输入源（HSI/HSE）计算最终频率，最后结合 AHBPrescTable 表计算 HCLK（即 SystemCoreClock）。特别注意：当 AHB 预分频器值大于 7 时，使用右移运算而非除法，以提高效率。\nSystemCoreClock # extern uint32_t SystemCoreClock;\n全局变量，表示当前系统核心时钟频率（单位：Hz），由 SystemCoreClockUpdate() 自动维护。所有需要精确时序的模块（如定时器、串口、USB）都应读取此变量进行参数计算，而非硬编码时钟值。\n类型： uint32_t\n简述： 当前系统核心时钟频率，单位为 Hz，由系统时钟配置自动更新。\n使用建议：在初始化完成后应立即调用 SystemCoreClockUpdate() 以确保变量值准确，尤其在使用动态时钟切换的应用中，必须在每次切换后调用此函数。\nSetSysClock # static void SetSysClock(void)\n内部静态函数，根据编译时定义的时钟配置宏，调用对应的时钟设置函数。该函数在 SystemInit() 中被调用，负责配置 Flash 延时、AHB 预分频器，并启用 PLL（如需要）。它还包含对 GPIO 引脚的临时配置（如关闭 PA0/PA1 的复用功能以避免干扰 HSE 晶振），确保外部晶振稳定启动。\n参数：\n无\n返回值：\n无\n关键细节：该函数在配置 HSE 时会先禁用 PA0/PA1 的复用功能（通过 AFIO-\u0026gt;PCFR1），防止这些引脚被误配置为复用功能导致外部晶振负载异常，从而影响启动稳定性。这是嵌入式系统中常见的硬件兼容性处理。\nSetSysClockTo_xxx 系列函数 # 一组静态内部函数，用于实现不同频率下的时钟配置逻辑，仅在对应宏定义启用时编译。每个函数负责配置 Flash 延时、AHB 预分频器、PLL 使能与切换，并等待时钟稳定。\n函数名 简述 SetSysClockTo_8MHz_HSI 使用 HSI 作为系统时钟，频率 8MHz，Flash 延时 0，AHB 预分频器为 DIV3 SetSysClockTo_24MHZ_HSI 使用 HSI 作为系统时钟，频率 24MHz，Flash 延时 0，AHB 预分频器为 DIV1 SetSysClockTo_48MHZ_HSI 使用 HSI 经 PLL 倍频至 48MHz，Flash 延时 1，AHB 预分频器为 DIV1，PLL 输入为 HSI×2 SetSysClockTo_8MHz_HSE 使用 HSE 作为系统时钟，频率 8MHz，Flash 延时 0，AHB 预分频器为 DIV3 SetSysClockTo_24MHz_HSE 使用 HSE 作为系统时钟，频率 24MHz，Flash 延时 0，AHB 预分频器为 DIV1 SetSysClockTo_48MHz_HSE 使用 HSE 经 PLL 倍频至 48MHz，Flash 延时 1，AHB 预分频器为 DIV1，PLL 输入为 HSE×2 共性处理：所有 HSE 相关函数均包含 HSE 启动超时检测（HSE_STARTUP_TIMEOUT），防止因晶振故障导致系统死锁；所有 PLL 配置均包含“等待 PLL 就绪”和“等待 PLL 成为系统时钟源”的状态轮询，确保切换安全可靠。\nFlash 延时配置：当系统时钟超过 24MHz 时，Flash 访问需增加等待状态（FLASH_ACTLR_LATENCY_1），否则可能导致指令读取错误。这是基于芯片 Flash 存取速度的硬性限制，必须严格遵守。\n","externalUrl":null,"permalink":"/ch32v003_doc/2.system_ch32v00x.h/","section":"CH32V00x的软件文档","summary":"该文件定义了 CH32V00x 系列微控制器的系统级初始化接口与全局时钟变量，提供系统时钟配置、更新和外设时钟管理的函数原型。通过 SystemInit() 初始化系统时钟源（HSI/HSE）及 PLL，通过 SystemCoreClockUpdate() 动态读取当前时钟配置，确保软件运行时能准确获取核心时钟频率。该模块是所有外设驱动的时钟基础，必须在应用初始化阶段优先调用。","title":"system_ch32v00x.h","type":"ch32v003_doc"},{"content":"欢迎去拜访常客，也欢迎点击此处互换友链\n","externalUrl":null,"permalink":"/friends/","section":"摇月的魔法工坊","summary":"","title":"魔法工坊的常客","type":"page"}]