发布时间:2026/7/23 11:56:49
MSPM0 ADC FIFO模式与DMA触发机制深度解析与实战配置 1. MSPM0 ADC FIFO模式与DMA触发机制深度解析在嵌入式系统开发中尤其是涉及模拟信号采集的应用ADC的性能和效率往往是决定系统实时性与可靠性的关键。传统的CPU轮询读取ADC结果的方式不仅会占用大量处理器时间在高采样率下还极易因响应不及时导致数据丢失。德州仪器TI的MSPM0系列微控制器其ADC模块集成了FIFO先进先出缓冲区和灵活的DMA直接内存访问触发机制为工程师提供了一套硬件级的、高效的数据搬运解决方案。这套机制的核心思想是“事件驱动”让ADC转换完成事件自动触发DMA搬运将CPU彻底解放出来专注于更高级别的算法和逻辑处理。我曾在多个电机控制和环境监测项目中深度使用MSPM0的ADC模块深刻体会到正确配置FIFO与DMA联动的重要性。一个配置不当轻则数据错位重则系统死锁。本文将结合官方手册的要点和我个人的实战经验深入剖析MSPM0 ADC的FIFO工作模式、DMA触发源的选择与配置、以及如何避免常见的溢出OVIFG和欠载UVIFG错误。无论你是正在评估MSPM0用于新项目还是正在调试现有的ADC数据流问题相信这些从实际项目中总结出的细节和“避坑指南”都能给你带来直接的帮助。2. FIFO模式数据打包与流控的核心2.1 FIFO模式的基本工作原理MSPM0的ADC模块包含一系列转换结果存储器MEMRESx。当FIFO模式被禁用FIFOEN0时CPU或DMA直接读取各个独立的MEMRESx寄存器每个寄存器存放一个16位的转换结果。这种方式简单直接但在需要连续、批量传输数据的场景下效率不高。开启FIFO模式FIFOEN1后情况发生了根本变化。ADC模块内部会建立一个硬件FIFO缓冲区。所有可用的MEMRESx寄存器例如MEMRES0到MEMRES23会被顺序地用作这个FIFO的存储单元。最关键的特性是FIFO中的数据总是以两个16位样本为一组被打包成一个32位数据字。当CPU或DMA读取FIFODATA寄存器时实际读出的是一个32位值其中包含了两个连续的ADC转换结果。这种设计带来了两大优势总线利用率翻倍对于32位总线架构的MSPM0内核一次32位读取操作就能获取两个样本相比两次16位读取减少了总线访问次数和潜在的总线竞争提升了数据传输效率。简化软件逻辑软件或DMA控制器只需面向一个统一的FIFODATA寄存器地址进行操作无需关心当前数据具体存储在哪个MEMRESx中简化了数据采集流程。2.2 FIFO的读写指针与数据移位机制理解FIFO内部的数据流至关重要。你可以将MEMRESx寄存器想象成一排连续的存储格子。ADC转换引擎是“生产者”依次将转换结果填入这些格子CPU或DMA是“消费者”从FIFODATA这个统一的“窗口”读取数据。每次对FIFODATA执行一次读操作32位FIFO逻辑就会自动将下一组两个样本如果已就绪移动到“窗口”位置以供下一次读取。如果FIFO中没有新的数据可供移位那么读取FIFODATA将得到0。这个机制意味着读取操作必须与ADC的采样转换速度相匹配。2.3 关键状态标志OVIFG与UVIFGFIFO模式引入了两个关键的状态标志用于指示数据流是否健康溢出标志OVIFG当ADC硬件试图更新写入一个MEMRESx寄存器但该寄存器中上一个样本尚未被CPU或DMA读取时此标志置位。这通常意味着“消费者”太慢“生产者”太快数据被新数据覆盖而丢失。欠载标志UVIFG当CPU或DMA读取FIFODATA寄存器时但对应的MEMRESx寄存器中新的转换结果尚未就绪此标志置位。这通常意味着“消费者”太快读到了无效的旧数据或0。这两个标志是调试ADC-DMA数据流同步问题的首要检查点。OVIFG表明DMA触发或搬运速度跟不上ADC采样率UVIFG则可能意味着DMA被错误地多次触发或者ADC因故停止转换。3. DMA触发机制实现自动化的数据搬运3.1 触发源MEMRESIFGx的选择DMA触发的核心是事件。在MSPM0 ADC中任何一个MEMRESx寄存器被载入新转换结果时其对应的MEMRESIFGx标志都会置位。这个标志可以作为触发DMA传输的完美事件源。关键在于**SAMPCNT寄存器的配置**。它定义了“累积多少个样本后才产生一次DMA触发请求”。在FIFO模式下由于数据以32位2样本为单位打包SAMPCNT应设置为每次触发期望搬运的32位数据字的数量。例如如果你希望DMA每次触发搬运4个ADC样本即2个32位数据那么SAMPCNT应设置为2。如果设置为1则每次一个MEMRESx就绪即每产生一个样本就会触发DMA但在FIFO模式下这可能导致问题因为DMA读取的是32位的FIFODATA而此时可能只有一个样本就绪容易引发UVIFG。3.2 DMA传输的同步策略官方手册给出了一个精妙的同步建议将DMA的每次传输量Transfer Size设置为1即一次搬运32位并启用DMA的单次传输重复模式Repeat Single Transfer Mode。这样配置后每次MEMRESIFGx事件触发DMADMA控制器就执行一次32位传输从FIFODATA搬走两个样本。由于DMA的响应和搬运速度通常远快于ADC的采样转换时间这种“小步快跑”的方式能确保FIFO中的数据被及时取走避免溢出。更重要的是选择特定的MEMRESIFGx作为触发源可以实现字节级同步。例如选择MEMRES1和MEMRES3的标记作为触发事件。因为FIFO以两个样本为单位打包MEMRES1就绪意味着样本0和1已就绪并打包在第一个32位字中MEMRES3就绪意味着样本2和3已就绪并打包在第二个32位字中。以此类推选择奇数的MEMRESIFG可以确保每次触发时对应的32位FIFO数据字是完整且新鲜的。3.3 DMA触发配置实战步骤以下是一个典型的配置流程用于设置ADC在重复序列模式下使用FIFO并通过DMA搬运数据配置ADC基本参数设置采样时钟、分辨率(RES)、参考电压(VRSEL)、采样时间(SCOMP0/1)等。配置序列与FIFO设置CTL2.CONSEQ 3重复序列模式。设置CTL2.STARTADD和CTL2.ENDADD定义采样通道序列。设置CTL2.FIFOEN 1启用FIFO模式。设置CTL2.SAMPCNT。例如如果你有4个通道的序列MEMRES0-3希望每完成一个完整的序列4个样本触发一次DMA搬运2个32位数据则SAMPCNT 24个样本 / 2样本每字。配置DMA触发事件在ADC的DMA_TRIG事件发布者寄存器组中找到IMASK寄存器。根据你的同步策略使能置1对应的MEMRESIFGx位作为触发源。例如若想基于MEMRES1和MEMRES3同步则使能MEMRESIFG1和MEMRESIFG3的DMA触发掩码。注意通常只需使能序列中最后一个MEMRES的IFG作为触发以避免过早触发。例如对于一个4通道序列MEMRES0-3使能MEMRESIFG3即可。配置DMA通道设置DMA源地址为ADC的FIFODATA寄存器地址。设置DMA目标地址为你的数据缓冲区如SRAM中的数组。设置DMA传输大小为32位字。设置DMA传输次数Block Size为SAMPCNT的值例如2。设置DMA为“重复单次传输”模式触发源选择为对应的ADC DMA事件线。启用DMA与ADC使能DMA通道。设置CTL2.DMAEN 1使能ADC的DMA触发。最后设置CTL0.ENC 1使能ADC转换。ADC将等待触发软件或硬件后开始转换并在每个序列完成后由设定的MEMRESIFGx触发DMA搬运。3.4 不同转换模式下的操作矩阵解读手册中的“ADC-DMA/CPU Operation Summary Matrix”表格是快速选择的宝典这里结合我的经验进行解读转换模式FIFO 禁用 (FIFOEN0)FIFO 启用 (FIFOEN1)单次转换 (Single)CPU读/写支持直接读MEMRESx。DMA读/写支持但需注意16位对齐。CPU读/写不推荐。SAMPCNT必须为1但只产生一个样本读取32位FIFODATA会触发UVIFG高16位是无效数据需忽略。DMA读/写不推荐。原因同上易触发UVIFG。重复单通道 (Repeat Single)CPU读/写支持直接读MEMRESx。DMA读/写支持但需注意16位对齐。CPU读/写支持。MEMRESIFG可产生CPU中断从FIFODATA以32位读取。DMA读/写支持且推荐。MEMRESIFG作为DMA触发SAMPCNT设置为需要搬运的32位字数。序列转换 (Sequence)CPU读/写支持需按顺序读多个MEMRESx。DMA读/写支持可配置DMA链式传输搬运多个MEMRESx。CPU读/写支持。MEMRESIFG通常是序列最后一个可产生CPU中断从FIFODATA以32位读取多个数据。DMA读/写支持且推荐。MEMRESIFG序列最后一个作为DMA触发SAMPCNT根据序列样本数/2来设置。重复序列 (Repeat Sequence)CPU读/写支持。DMA读/写不支持。CPU读/写支持。MEMRESIFG序列最后一个可产生CPU中断。DMA读/写支持且推荐。MEMRESIFG序列最后一个作为DMA触发SAMPCNT根据序列样本数/2来设置。核心结论对于希望使用DMA进行高效数据搬运的应用强烈建议启用FIFO模式并工作在重复单通道或**重复序列**模式下。单次转换模式与FIFODMA的组合是“错误搭配”应避免。4. 实战配置示例与代码片段假设一个应用场景需要以10kHz的速率交替采集两个通道CH0, CH1的电压并通过DMA将数据实时搬运到大小为200个样本100组的缓冲区中。4.1 外设初始化概览// 1. 配置ADC时钟源与分频 (假设使用16MHz SYSOSC) ADC0-CLKCFG (0x26 24) | (1 0); // KEY0x26, SAMPCLK SYSOSC ADC0-CTL0 (7 24); // SCLKDIV 7 (分频 by 48) 16MHz / 48 ≈ 333kHz ADC时钟 ADC0-CTL1 (0 16); // CONSEQ 0 (单次转换此处仅为示例实际用序列模式) ADC0-CTL2 (1 10); // FIFOEN 1 ADC0-CTL2 | (1 8); // DMAEN 1 (使能DMA触发) // 2. 配置采样时间 (假设需要20个ADC时钟周期) // SCLKDIV7 对应分频值48 VAL 期望周期数 / 分频值 20 / 48 ≈ 0 但VAL0或1时周期数分频值。 // 因此需要设置VAL 1。例如设置VAL1则周期数1*4848个周期满足要求。 ADC0-SCOMP0 1; // VAL 1 // 3. 配置MEMCTL0 和 MEMCTL1 对应两个通道 ADC0-MEMCTL[0].CHANSEL 0; // 通道0 ADC0-MEMCTL[0].VRSEL 2; // 内部参考电压 ADC0-MEMCTL[1].CHANSEL 1; // 通道1 ADC0-MEMCTL[1].VRSEL 2; // 4. 配置为2通道的重复序列模式 ADC0-CTL1 (3 16); // CONSEQ 3 (重复序列模式) ADC0-CTL2 (ADC0-CTL2 ~(0x1F 16)) | (0 16); // STARTADD 0 (MEMCTL0) ADC0-CTL2 (ADC0-CTL2 ~(0x1F 24)) | (1 24); // ENDADD 1 (MEMCTL1) // 每完成一个序列2个样本产生一次DMA请求但FIFO打包需要偶数样本这里2样本正好打包成1个32位字。 // 因此设置SAMPCNT1表示每累积1个32位数据即2个样本触发DMA。 ADC0-CTL2 (ADC0-CTL2 ~(0x1F 11)) | (1 11); // SAMPCNT 1 // 5. 配置ADC DMA触发事件 // 选择序列中最后一个MEMRES (MEMRES1) 的完成作为DMA触发源 ADC0-DMA_TRIG.IMASK | (1 9); // 使能 MEMRESIFG1 触发DMA (MEMRES1对应bit 9) // 6. 配置DMA (以DMA通道0为例) // 假设DMA结构体为DMAControlTable[0] DMAControlTable[0].srcAddr (uint32_t)(ADC0-FIFODATA); // 源地址FIFO数据寄存器 DMAControlTable[0].dstAddr (uint32_t)adc_buffer; // 目标地址内存缓冲区 DMAControlTable[0].control DMA_CTL_SIZE_WORD | // 传输大小32位字 DMA_CTL_DSTINC_32 | // 目标地址递增 DMA_CTL_SRCINC_NONE | // 源地址不递增 DMA_CTL_REPEAT_SINGLE | // 重复单次传输模式 (1 DMA_CTL_BLOCKSIZE_OFS) | // 传输次数1 (与SAMPCNT1对应) DMA_CTL_TRIG_ADC0; // 触发源ADC0事件 // 7. 使能DMA通道 DMA-CH0_CFG | DMA_CFG_EN; // 8. 最后使能ADC转换 ADC0-CTL0 | 0x1; // ENC 1 // 9. 提供起始触发 (例如使用一个定时器触发ADC采样序列) TIMER0-CTL | TIMER_CTL_START; // 或者在初始化后手动触发一次以启动重复序列 ADC0-CTL1 | (1 8); // SC 1 (软件触发)4.2 关键配置解析与避坑点SAMPCNT与DMA传输次数的关系这是最容易出错的地方。SAMPCNT定义的是“累积多少样本后触发一次DMA”。在FIFO模式下它指的是32位字的数量。DMA配置中的传输次数Block Size应与此匹配。上例中SAMPCNT1DMA传输次数也为1表示每次触发搬运1个32位字2个样本。触发源选择在重复序列模式下通常选择最后一个MEMRESx的MEMRESIFG作为触发。如果选择中间的MEMRES可能会在序列未完成时提前触发DMA导致数据错乱。缓冲区指针管理DMA通常配置为循环模式Circular Mode或使用Ping-Pong缓冲区来处理连续数据流。确保DMA目标地址在到达缓冲区末尾后能正确回绕或切换。ADC关闭时的额外转换手册特别警告如果在重复序列模式或普通重复模式下禁用ADCENC0在ADC完全停止前可能会发生一次额外的转换。在程序需要动态启停ADC时务必考虑这一点可能需要在禁用ADC后丢弃FIFO中可能残留的一个无效数据。5. 常见问题排查与调试技巧在实际项目中ADC-FIFO-DMA链路不出问题几乎是不可能的。以下是我总结的排查清单和调试方法5.1 问题现象数据缓冲区全是0或固定值可能原因1DMA未正确触发或搬运。检查确认ADC的DMAEN位(CTL2.8)已设置为1。确认DMA通道已使能且触发源选择正确。调试在DMA完成传输中断如果使能了里设置断点或查询DMA通道状态寄存器看传输是否完成。也可以在DMA传输完成中断中翻转一个GPIO引脚用示波器观察其波形确认DMA是否被定期触发。可能原因2ADC未开始转换。检查确认CTL0.ENC位为1。确认ADC有触发源软件触发SC或硬件事件触发。检查STATUS.BUSY位看ADC是否处于忙碌状态。调试尝试使用软件触发(SC1)并在触发后读取FIFODATA看是否能得到非零数据。这可以隔离DMA问题可能原因3FIFO溢出(OVIFG)或欠载(UVIFG)。检查读取ADC的中断标志寄存器如RIS检查OVIFG和UVIFG是否置位。调试如果OVIFG置位说明DMA太慢或未工作ADC数据被覆盖。降低ADC采样率或检查DMA配置。如果UVIFG置位说明DMA或CPU读取太快。检查SAMPCNT设置是否过小或者DMA是否被错误地多触发。5.2 问题现象数据错位或混乱可能原因1SAMPCNT与DMA传输大小不匹配。检查在FIFO模式下SAMPCNT表示触发时已累积的32位字数。DMA的传输次数应等于SAMPCNT。如果DMA传输次数是SAMPCNT的两倍它会多读数据导致错位。调试计算你的数据流。例如ADC序列产生4个样本MEMRES0-3在FIFO中打包为2个32位字。应设置SAMPCNT2DMA传输次数2。可能原因2DMA目标缓冲区指针未正确递增或回绕。检查确认DMA控制字中目标地址递增DSTINC设置正确。在循环缓冲区模式下确认缓冲区大小与DMA传输总量匹配。调试在内存中查看缓冲区数据。如果数据是连续的但地址错乱就是指针问题。如果数据出现周期性重复或丢失可能是缓冲区回绕逻辑错误。5.3 问题现象系统运行一段时间后死机或数据停止可能原因DMA传输完成中断DMADONE未处理或DMA未重新配置。检查如果你使用了DMA传输完成中断并在中断服务程序ISR中重新配置或启动了下一次DMA请确保ISR正确清除中断标志并且DMA配置在下次传输前是有效的。调试在DMADONE ISR入口放置断点或添加日志输出确认ISR被正常调用。检查在ISR中是否正确地重新设置了DMA源/目标地址和控制字对于非自动重载的模式。5.4 高级调试技巧使用事件触发器和逻辑分析仪对于复杂的时序问题MSPM0的事件架构Event Fabric是一把利器。你可以将ADC的MEMRESIFGx或DMA的触发事件通过GEN_EVENT路由到一个空闲的GPIO引脚上。配置一个GPIO引脚为输出。在ADC的GEN_EVENT发布者中选择MEMRESIFGx作为事件源并将其发布到一个通用事件通道例如通道1。在GPIO的通用事件订阅者中订阅该事件通道通道1并配置事件触发GPIO引脚翻转。这样每次ADC转换完成并触发DMA时GPIO引脚就会产生一个脉冲。用逻辑分析仪同时抓取这个GPIO信号、ADC采样触发信号如定时器输出和DMA完成中断引脚可以清晰地看到整个“采样-转换-触发DMA”的时序关系精准定位是ADC转换慢了还是DMA响应慢了或者是触发逻辑有误。6. 与其它模拟外设的联动考量MSPM0的ADC并非孤立工作手册中提到了它与内部电压参考VREF、运算放大器OPA和温度传感器的联动。与内部电压参考VREF当ADC选择内部参考时会自动请求使能VREF模块。但VREF的稳定准备时间REFBUFRDY标志并不阻塞ADC采样阶段的开始。这意味着如果你的采样时间设置得太短而VREF尚未稳定转换结果将不准确。最佳实践是在初始化阶段就通过软件提前使能VREF设置VREF模块的使能位让其在ADC开始采样前就已稳定。这样你可以设置更短的采样时间提高采样速率。与运算放大器OPA在传感器健康监测等应用中ADC可以配合OPA的斩波Chopping和烧毁电流源BCS功能。关键点是当启用ADC辅助的OPA斩波且硬件平均功能也启用时硬件平均的样本数应设置为偶数以确保斩波状态在平均周期内对称有效抵消OPA的失调电压。与温度传感器温度传感器模块的使能由ADC在选择温度传感通道时自动产生。同样温度传感器的稳定时间需要计入ADC的采样周期中因为传感器没有“就绪”信号反馈给ADC。必须查阅数据手册为温度传感器通道预留足够的采样时间。配置这些联动功能时务必仔细计算时序。一个实用的方法是为需要额外稳定时间的通道如内部参考、温度传感器在MEMCTLy中分配独立的采样时间控制位STIME将其指向一个设置了更长采样周期的SCOMPx寄存器而为普通通道使用另一个SCOMPx。这样可以在一个采样序列中动态地为不同通道分配不同的采样时间兼顾速度和精度。7. 寄存器精要与配置流程总结最后我们回归到最核心的寄存器梳理一个清晰的配置心智模型时钟与基础控制 (CLKCFG,CTL0,CTL1)先配时钟源和分频再配转换模式单次、重复、序列。注意CTL0.ENC要在所有配置完成后最后开启。序列与FIFO (CTL2,MEMCTLy)STARTADD/ENDADD定义通道序列。FIFOEN决定是否启用打包模式。SAMPCNT是FIFODMA联动的核心纽带其值期望触发DMA时已就绪的32位数据字数。采样与比较 (SCOMP0/1,MEMCTLy.STIME)配置采样时钟周期数。为高阻抗源或特殊通道如温度传感器分配更长的采样时间。DMA触发配置 (DMA_TRIG.IMASK)在IMASK寄存器中使能你选定的MEMRESIFGx位作为DMA触发源。通常选择序列中最后一个MEMRES的IFG。DMA通道配置源地址FIFODATA目标地址用户缓冲区传输大小32位传输次数SAMPCNT模式重复单次触发源对应ADC DMA事件。使能与启动使能DMA通道 - 置位CTL2.DMAEN- 置位CTL0.ENC- 提供首次触发硬件或软件。整个过程中务必时刻关注OVIFG和UVIFG这两个“健康指示灯”。它们能最直接地告诉你数据流是否同步。通过合理设置SAMPCNT、匹配DMA速度、以及利用事件系统进行可视化调试你就能驾驭MSPM0 ADC这套强大的数据采集引擎构建出稳定、高效的实时信号处理系统。

相关新闻

2026/7/23 11:51:49

MSPM0微控制器SPI模块配置与DMA高效数据传输实战指南

1. 项目概述与SPI核心价值 如果你在嵌入式开发中打过交道,尤其是用过像MSPM0这样的微控制器,那么对SPI(Serial Peripheral Interface)这个名字一定不会陌生。它就像电路板上的“高速公路”,负责在微控制器和各种传感器…

2026/7/23 11:51:49

Hermes轻量级智能体:ARM原生、函数级热更新的边缘Agent运行环境

1. 项目概述:这不是一个普通工具,而是一套能自我迭代的轻量级智能体运行环境 “亲测真的会自己进化,吹爆Hermes的一篇”——这句话在技术圈刷屏时,我第一反应是:又一个营销话术?但连续三天泡在Hermes Studio的文档、GitHub Issues和社区Discord里实测后,我删掉了草稿里…

2026/7/23 13:26:56

Day30-MCP项目解析:模块化开发与时间管理实践

1. 项目概述:Day30-MCP 是什么?Day30-MCP 是一个典型的项目里程碑命名方式,常见于技术挑战、学习计划或产品迭代场景。从命名结构来看,"Day30"明确指向一个持续30天的周期节点,而"MCP"作为缩写可能…

2026/7/23 13:26:56

Java开发者转型大模型:学习路径与实战经验

1. 从Java到大模型的转型之路 去年夏天,我在连续加班调试一个分布式事务问题后的凌晨三点,突然意识到自己已经对Java开发产生了严重的职业倦怠。每天重复着相似的CRUD工作,解决着相似的并发问题,写着相似的业务逻辑。这种状态持续…

2026/7/23 13:26:56

为什么AI生成的PPT不能用?你可能第一步就做错了

用了那么多AI工具,为什么生成的PPT还是不能用?问题可能出在第一步摘要很多人在用AI生成PPT时,习惯于直接输入一句主题就让AI自动生成,结果往往不尽如人意。本文结合实测经验,分享了一套完整的AI做PPT方法论&#xff1a…

2026/7/23 13:26:56

现代C++多线程编程:从std::thread到std::async的实战指南

1. 项目概述&#xff1a;为什么现代C开发者绕不开多线程 如果你还在用老一套的 CreateThread 或者 pthread 来写C多线程&#xff0c;是时候更新一下你的工具箱了。从C11开始&#xff0c;标准库为我们带来了 <thread> 、 <future> 、 <chrono> 等一…

2026/7/23 13:21:56

AI科研工具如何变革学术写作:技术架构与应用实践

1. 学术写作新范式&#xff1a;AI科研工具的变革力量学术写作正经历一场由AI驱动的范式革命。作为一名长期奋战在科研一线的学者&#xff0c;我见证了从传统写作到智能辅助的完整演进过程。书匠策这类AI科研工具的出现&#xff0c;彻底改变了我们组织思路、梳理文献和撰写论文的…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/23 0:01:10

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南&#xff1a;免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/22 21:00:12

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…