当前位置: 首页 > article >正文

TI F28P65 使用 ePWM 模块模拟 SPI 时钟的详细方法

引言在嵌入式开发中当芯片自带的硬件SPI接口数量不足或者需要适配非标准时钟极性与相位的SPI从设备时利用TI C2000系列芯片如F28P65x强大的ePWM增强型脉宽调制模块来模拟SPI时钟是一种高效且灵活的替代方案。本文将详细介绍如何将ePWM配置为一个可精确控制频率和占空比的方波发生器从而生成SPI从设备所需的串行时钟SCLK并提供完整的代码示例与调试建议。为什么需要模拟应用场景分析场景说明SPI模块资源不足F28P65x最多提供4个高速50MHzSPI端口若外接从设备超过此数量可用ePWM扩展非标准时序要求某些SPI从设备需要特定的时钟极性与相位通过ePWM可完全由软件自定义节约外设资源将硬件SPI保留给高速/关键设备ePWM模拟用于低速或非关键设备核心原理ePWM模块内部包含时基TB、计数比较CC、**动作限定AQ**等子模块。一个完整的PWM周期包含一个高电平和低电平对应一个完整的SPI时钟周期。因此SPI比特率SCLK频率 ePWM开关频率通过配置TBPRD周期寄存器和CMPA比较寄存器可生成50%占空比的方波直接作为SPI时钟信号。三步生成SPI时钟第一步计算频率公式TBPRD f_EPWMCLK / (2 * f_SPI_CLK)参数说明TBPRDePWM时基周期寄存器值f_EPWMCLKePWM模块输入时钟频率例如100MHzf_SPI_CLK目标SPI时钟频率计算示例f_EPWMCLK 100 MHz f_SPI_CLK 5 MHz TBPRD 100,000,000 / (2 * 5,000,000) 10第二步生成波形在向上计数模式下设置CMPA TBPRD / 2得到50%占空比。通过AQ子模块配置计数值等于CMPA→ 引脚输出高电平计数值等于TBPRD→ 引脚输出低电平生成的方波即为SPI_SCLK。第三步精确使能控制使用TZ模块SPI从设备通常需要仅在数据传输期间有时钟其余时间时钟应为空闲状态。利用ePWM的TZTrip Zone模块结合外部使能信号如GPIO或片选信号可精确控制时钟的输出与关闭。配置思路将TZ模块的DCAEVT1或DCBEVT1事件配置为高电平有效当使能信号为高时触发TZ动作将ePWM输出强制拉低时钟停止通过反相逻辑或外部反相器可实现使能高有效→输出时钟的正逻辑简化方案若片选信号低有效可直接配置TZ为低电平有效触发使片选拉低时关闭时钟。示例代码基于DriverLib以下代码以F28P65x为例配置ePWM1生成5MHz的SPI时钟并演示TZ模块的基本使能控制使用GPIO作为使能信号高电平时关闭时钟。#include driverlib.h #include device.h void initEPWM_SPIClock(void) { // 1. 使能ePWM1模块时钟 SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1); // 2. 配置GPIO0为ePWM1A输出 GPIO_setPinConfig(GPIO_0_EPWM1A); GPIO_setDirectionMode(0, GPIO_DIR_MODE_OUT); // 3. 时基配置向上计数周期TBPRD10100MHz / (2*5MHz) EPWM_setTimeBasePeriod(EPWM1_BASE, 10); EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP); EPWM_setTimeBaseClockDiv(EPWM1_BASE, EPWM_CLOCK_DIVIDER_1); // 4. 比较值配置CMPA TBPRD/2 5 EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 5); // 5. 动作配置CMPA匹配时置高PRD匹配时置低 EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD); // 6. TZ模块配置使能DCAEVT1事件高电平时强制拉低输出即关闭时钟 EPWM_disableTripZone(EPWM1_BASE); // 先清零配置 EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT1, EPWM_TZ_ACTION_LOW); // 事件触发时拉低 EPWM_setDigitalCompareEventTrigger(EPWM1_BASE, EPWM_DC_TYPE_DCAEVT1, EPWM_DC_EVT_TRIG_HIGH); // 高电平有效 // 7. 启动ePWM EPWM_setTimeBaseCounter(EPWM1_BASE, 0); EPWM_enableADCTrigger(EPWM1_BASE, EPWM_SOC_A); // 可选用于同步 }注意上述示例中使能信号高电平时关闭时钟如需反逻辑使能高电平时输出时钟可简单地将使能信号先反相输入到TZ引脚或在软件中配置TZ事件极性查阅具体芯片TRM。调试与验证1. 示波器/逻辑分析仪将探头连接到模拟时钟的GPIO引脚观察波形频率是否等于目标SPI时钟占空比是否为50%或符合从设备要求使能信号控制下时钟是否正确启停2. 代码级检查确认ePWM模块时钟已使能SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1)检查GPIO复用配置是否正确在调试器中查看TBPRD、CMPA、TZ相关寄存器值是否符合预期3. 常见问题排查现象可能原因解决办法无输出波形GPIO未配置为ePWM功能检查GPIO_setPinConfig频率不正确TBPRD计算错误或时钟分频设置不对核对ePWM输入时钟频率及分频系数使能无法关闭时钟TZ事件极性配置错误检查DCAEVT1触发条件及动作设置扩展技巧同步多路SPI时钟若同一ePWM模块的A、B两路输出需作为两路独立SPI时钟可将B通道配置为A通道的从同步模式并设置相位偏移来控制两路时钟的延迟。使用CLB可配置逻辑模块对于极其复杂的时序要求如带死区的时钟、多相时钟等可考虑使用F28P65x内部的可配置逻辑块CLB实现更灵活的定制逻辑。总结方案对比方案优点缺点硬件SPI速度快、CPU负载低数量有限、时序固定ePWM模拟灵活、可扩展、节省外设需占用ePWM资源、CPU参与数据收发应用价值使用ePWM模拟SPI时钟在资源紧张或需要高度定制时序的场景下极具价值。通过上述方法您可以轻松生成精确的SPI时钟并结合TZ模块实现精确的使能控制。配合GPIO模拟MOSI/MISO数据线即可完整实现一个软SPI主机。希望本文能帮助您在C2000平台上灵活应对SPI扩展需求。如有疑问欢迎交流参考文献TI TMS320F28P65x Technical Reference Manual (TRM), Chapter: Enhanced Pulse Width Modulator (ePWM)TI C2000Ware DriverLib API Guide明白了您的实际需求是SSI协议通常用于绝对编码器如BISS、SSI它没有片选信号需要主机精确产生固定数量32个的时钟脉冲然后停止等待100μs后再产生下一组32个脉冲。即帧周期100μs10kHz每帧32个时钟脉冲。这比单纯的连续时钟复杂核心挑战是如何让ePWM精确输出指定数量的脉冲后自动停止并能周期性重启。 解决方案概览方案原理优点缺点方案一ePWM单次触发 中断计数用ePWM输出连续时钟在中断中计数达到32个后关闭ePWM再用定时器重启实现简单灵活中断响应有延迟高速时可能丢脉冲方案二ePWM的“单发模式” 软件重触发利用ePWM的EPWM_TB_COUNT_MODE_UP_ONESHOT模式仅向上计数一次硬件自动停止精确控制脉冲数F28P65是否支持需要确认C2000部分型号支持方案三ePWM 事件触发计数器ECAP/PCNTePWM输出始终使能但用外部计数器或芯片内部ECAP计数脉冲达到32个后触发TZ关闭ePWM纯硬件零CPU干预需要额外资源方案四使用CLB可配置逻辑块用CLB搭建一个32脉冲计数器自动门控时钟最灵活硬件自动开发复杂推荐方案一中断计数定时器重启实现简单在中等时钟频率如2~5MHz下完全可行100μs的间隔足够CPU处理中断。 详细实现步骤方案一整体思路配置ePWM输出连续SPI时钟例如5MHz。使能ePWM的周期中断或比较中断每输出一个时钟脉冲产生一次中断。在中断服务函数中累计脉冲个数当达到32个时禁用ePWM模块的输出或直接关闭时钟。配置一个CPU定时器TIMER0/1/2周期为100μs定时器中断中重新使能ePWM输出并重置计数器开始下一帧。注意事项中断优先级定时器中断应高于ePWM中断以确保帧周期精确。关闭ePWM输出可以用EPWM_setOutputEnable()或直接禁止ePWM时钟。为避免ePWM重新启动时相位不连续可以同步重置时基计数器。 代码示例基于DriverLib以下代码实现ePWM1输出5MHz连续时钟每输出32个脉冲后自动停止每隔100μs重新输出32个脉冲。#includedriverlib.h#includedevice.h// 全局变量volatileuint16_tpulseCount0;volatileuint16_ttargetPulse32;volatileuint8_tframeActive0;// 当前帧是否正在输出时钟// 定时器中断周期 100us#defineTIMER_PERIOD_US100// 函数声明voidinitEPWM_Continuous(void);voidinitTimerForFrame(void);__interruptvoidepwm1ISR(void);__interruptvoidtimer0ISR(void);voidmain(void){Device_init();Device_initGPIO();Interrupt_initModule();Interrupt_initVectorTable();initEPWM_Continuous();initTimerForFrame();// 使能中断Interrupt_enable(INT_EPWM1);Interrupt_enable(INT_TIMER0);// 先启动第一帧使能ePWM输出EPWM_setOutputEnable(EPWM1_BASE,EPWM_OUT_A,true);frameActive1;while(1){// 主循环可做其他事}}// 配置ePWM1为连续5MHz时钟使能周期中断每个周期产生一次中断 一个时钟脉冲voidinitEPWM_Continuous(void){SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1);// GPIO0 - ePWM1AGPIO_setPinConfig(GPIO_0_EPWM1A);GPIO_setDirectionMode(0,GPIO_DIR_MODE_OUT);// 100MHz EPWMCLK - 5MHz PWM - TBPRD 10EPWM_setTimeBasePeriod(EPWM1_BASE,10);EPWM_setTimeBaseCounterMode(EPWM1_BASE,EPWM_COUNTER_MODE_UP);EPWM_setTimeBaseClockDiv(EPWM1_BASE,EPWM_CLOCK_DIVIDER_1);EPWM_setCounterCompareValue(EPWM1_BASE,EPWM_COUNTER_COMPARE_A,5);// 动作CMPA高PRD低 - 50%占空比EPWM_setActionQualifierAction(EPWM1_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);EPWM_setActionQualifierAction(EPWM1_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);// 使能周期中断每个PWM周期触发一次 一个时钟脉冲EPWM_enablePeriodInt(EPWM1_BASE);EPWM_setInterruptSource(EPWM1_BASE,EPWM_INT_TBCTR_U_PERIOD);EPWM_setInterruptEventCount(EPWM1_BASE,1);// 每次周期事件都触发中断// 先禁止输出由定时器启动EPWM_setOutputEnable(EPWM1_BASE,EPWM_OUT_A,false);// 注册中断Interrupt_register(INT_EPWM1,epwm1ISR);Interrupt_enable(INT_EPWM1);// 启动ePWM时基但无输出EPWM_setTimeBaseCounter(EPWM1_BASE,0);}// 配置CPU定时器0周期100usvoidinitTimerForFrame(void){// 定时器时钟通常为 SYSCLK (200MHz 或 100MHz)uint32_ttimerClkSysCtl_getClock(SYSCTL_DEVICE_OSCSRC)/SYSCTL_SYSCLK_DIV_1;uint32_tperiodCycles(timerClk/1000000)*TIMER_PERIOD_US;// 100usCPUTimer_setPeriod(CPUTIMER0_BASE,periodCycles);CPUTimer_setPreScaler(CPUTIMER0_BASE,0);// 1分频CPUTimer_enableInt(CPUTIMER0_BASE);CPUTimer_enable(CPUTIMER0_BASE);Interrupt_register(INT_TIMER0,timer0ISR);Interrupt_enable(INT_TIMER0);}// ePWM中断每输出一个时钟脉冲调用一次__interruptvoidepwm1ISR(void){EPWM_clearEventTriggers(EPWM1_BASE);EPWM_clearPeriodInt(EPWM1_BASE);if(frameActive){pulseCount;if(pulseCounttargetPulse){// 已经输出32个脉冲立即关闭输出EPWM_setOutputEnable(EPWM1_BASE,EPWM_OUT_A,false);frameActive0;pulseCount0;}}else{// 未激活帧时忽略多余中断通常不会发生}Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP3);}// 定时器0中断每100us触发一次开始新的一帧__interruptvoidtimer0ISR(void){CPUTimer_clearInt(CPUTIMER0_BASE);// 确保上一帧已关闭EPWM_setOutputEnable(EPWM1_BASE,EPWM_OUT_A,false);// 重置脉冲计数和状态pulseCount0;frameActive1;// 可选同步ePWM时基计数器使每帧起始相位一致EPWM_setTimeBaseCounter(EPWM1_BASE,0);// 使能输出开始新帧EPWM_setOutputEnable(EPWM1_BASE,EPWM_OUT_A,true);Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);}⚠️ 注意事项中断延迟ePWM中断频率 5MHz 每200ns一次中断这对于CPU来说是极高的负载且无法保证在下一个脉冲到来前完成中断处理。所以上述代码在高频时钟下不可行。➡️改进不要在每个时钟脉冲都进中断而是利用ePWM的比较器在输出第32个脉冲时产生中断例如设置CMPB 32然后使用“计数事件”触发中断。但ePWM本身没有脉冲计数器所以需要更巧妙的硬件方案。 更适合SSI的高效方案使用ePWM的“单次触发”模式 硬件定时器核心思路利用ePWM的向上计数模式 软件强制同步结合一个辅助定时器产生100μs的帧触发。但要求ePWM能输出恰好N个脉冲最好的办法是使用ePWM的“单次触发”模式One-shot mode配置时基为向上计数但设置TBCTL[FREE_SOFT] 0并在达到目标脉冲数后通过EPWM_forceSync()重新启动。不过F28P65的ePWM是否支持硬件单次触发需要查阅TRM。如果硬件不支持可以用ePWM ECAP的组合ePWM始终输出连续时钟。ECAP模块捕获ePWM输出信号配置为计数模式捕捉每个上升沿当计数值达到32时产生中断在中断中关闭ePWM输出。定时器100μs中断中重置ECAP计数器并重新使能ePWM。这样ePWM中断频率仍然是5MHz但ECAP中断只在每32个脉冲后触发一次大大降低CPU负载。 推荐最终方案ePWM ECAP 硬件计数原理框图定时器0 (100us) - 清除ECAP计数值 - 使能ePWM输出 ePWM输出 - ECAP输入通道 - ECAP计数模式 (上升沿) - 计数值32 - ECAP中断 - 关闭ePWM输出关键配置ePWM连续输出5MHz时钟或您需要的任何频率输出引脚同时连接到ECAP输入引脚可通过内部连接或外部跳线。ECAP配置为绝对计数模式Capture mode捕获上升沿每次捕获后计数器加1并可与预设值比较。或简单使用ECAP的“APWM模式”下的周期中断但更简单的是ECAP每次捕获产生中断在中断中计数达到32后关闭ePWM。这样仍然有中断但频率降低为5MHz/32 ≈ 156kHz仍较高。更好的方法是利用ECAP的多捕获模式设置连续捕获32个事件后触发中断。查阅F28P65 TRMECAP支持“连续/单次捕获模式”可以设定捕获次数如32当达到设定次数后产生中断。这样中断频率 帧率10kHz非常理想。 最终代码框架ECAP中断 定时器重启// 全局变量volatileuint8_tframeActive0;voidinitEPWM_5MHz(void){// 同之前配置连续时钟但不要使能ePWM中断// 输出到GPIO同时该GPIO也作为ECAP输入内部路由}voidinitECAP_PulseCounter(void){SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP1);// 将ePWM1A映射到ECAP1输入通过GPIO输入交叉开关或直接内部连接取决于芯片// 对于F28P65可以使用Input X-BAR将GPIO0连接到ECAP1InputXBAR_setInputPin(INPUT_XBAR_ECAP1,0);// GPIO0ECAP_enable(ECAP1_BASE);ECAP_setCaptureMode(ECAP1_BASE,ECAP_ABSOLUTE_MODE);// 配置为连续捕获32个事件后产生中断ECAP_setCaptureEdge(ECAP1_BASE,ECAP_EVENT_1,ECAP_EDGE_RISING);// ... 需查阅TRM设置捕获事件数量为32ECAP_enableInterrupt(ECAP1_BASE,ECAP_INT_CEVT1);// 达到捕获次数中断}voidinitTimer_100us(void){// 同前定时器中断中重置ECAP计数器并启用ePWM}__interruptvoidecap1ISR(void){ECAP_clearInterrupt(ECAP1_BASE,ECAP_INT_CEVT1);// 已捕获32个脉冲关闭ePWM输出EPWM_setOutputEnable(EPWM1_BASE,EPWM_OUT_A,false);frameActive0;// 清除ECAP计数器准备下一帧ECAP_setCounter(ECAP1_BASE,0);}__interruptvoidtimer0ISR(void){// 开始新帧ECAP_setCounter(ECAP1_BASE,0);EPWM_setOutputEnable(EPWM1_BASE,EPWM_OUT_A,true);frameActive1;// 清除定时器中断}✅ 总结步骤工具作用1ePWM产生连续的高频SPI时钟2ECAP硬件计数时钟脉冲个数达到32个后中断3CPU定时器每100μs启动新的一帧这种方案将脉冲计数完全交给硬件ECAPCPU只需处理10kHz的帧中断和32脉冲完成中断负载极低且能精确控制32个时钟。如需更具体的ECAP配置细节如如何设置捕获32个事件请查阅TMS320F28P65x TRM中“Enhanced Capture (ECAP)”章节的“连续捕获模式”说明。 详细实现步骤方案三方案三ePWM 事件触发计数器ECAP/PCNT除了用中断让CPU去关利用eCAP直接输出硬件触发信号是更高效的选择。在F28P65x上主要有两种不需要中断参与的硬件方法利用eCAP的TRIP_OUT信号和将eCAP配置为APWM模式进行匹配触发。⚙️ 方法一利用eCAP的TRIP_OUT信号这是最直接的硬件触发方式。eCAP模块内部有一个信号监控单元Signal Monitoring Unit专门用于检测输入信号的异常。你可以把它配置成一个计数器当它检测到预设数量的脉冲后就会输出一个TRIP_OUT信号。然后只需在芯片内部通过X-BAR将TRIP_OUT连接到ePWM的TZTrip Zone输入引脚即可实现TZ硬件联动。关键配置eCAP的TRIP_OUT默认是使能的你需要在X-BAR中选择正确的连接路径。这个方法优点是完全硬件实现CPU零负载触发延迟极低非常适合对时序要求严苛的场景。补充说明TRIP_OUT是eCAP Type 1模块的新功能由信号监控单元产生相关文档建议在使用TRIP_OUT时禁止ePWM的TRIPOUT反馈信号避免可能发生的误触发。⚙️ 方法二配置为APWM模式使用计数器匹配触发这是方法一的变体。将eCAP模块配置为辅助PWMAPWM模式。在这种模式下它的行为就像一个简化的PWM发生器内部有一个计数器你可以设置一个比较值Compare Value。当计数器值等于这个比较值时它会自动产生一个触发事件。如果把这个计数器“喂”上你想要的时钟信号例如配置eCAP去捕获你的SPI时钟那么当它数到预设值时就会触发动作。注意事项此模式在eCAP作为捕获模式时不可用。而且该触发事件通常还是需要中断来“响应”并非纯粹的硬件触发。 两种硬件方案对比下面表格清晰地展示了这两种硬件方案的区别对比维度eCAP的TRIP_OUT信号APWM模式计数器匹配触发方式硬件信号直接触发ePWM的TZ内部计数器匹配产生触发事件是否需要中断不需要通常需要中断触发源eCAP内部监控单元APWM模式下的计数器比较器主要优点完全硬件控制CPU零负载延迟低配置相对简单主要挑战需要理解信号监控单元的配置触发后仍需中断服务程序处理适用场景对实时性要求极高希望完全解放CPU的SSI脉冲计数更通用的触发场景或eCAP未用于捕获时 总结首选方案追求最优解的话方法一使用eCAP的TRIP_OUT信号是更彻底、更优雅的纯硬件解决方案能实现完全的硬件自动化最低的延迟和零CPU负载。后备方案如果需要快速实现可以评估APWM模式的可行性。但其“触发后仍需中断”的特性意味着最终可能还是要回到你最初想避免的中断方案。

相关文章:

TI F28P65 使用 ePWM 模块模拟 SPI 时钟的详细方法

引言 在嵌入式开发中,当芯片自带的硬件SPI接口数量不足,或者需要适配非标准时钟极性与相位的SPI从设备时,利用TI C2000系列芯片(如F28P65x)强大的ePWM(增强型脉宽调制)模块来模拟SPI时钟是一种…...

告别提示词工程:用RL训练你的LLM智能体,让它学会自己“上网搜答案”

智能体进化论:用强化学习解锁大模型的自主工具调用能力 当ChatGPT第一次展示出惊人的文本生成能力时,整个科技界为之震动。但很快,开发者们发现了一个尴尬的现实——这些看似无所不知的模型,在实际应用中常常表现得像个"书呆…...

深入解析Neurosim芯片架构设计(二):从Tile到PE的层次化实现

1. Neurosim芯片的层次化架构全景 第一次看到Neurosim芯片的架构图时,那种感觉就像初次拆解俄罗斯套娃——从最外层的Chip Level开始,逐层打开Tile、PE、Sub-array这些精妙的层级结构。这种层次化设计可不是为了好看,而是实实在在解决了神经网…...

副篇:从元融合到意义工程学——DOS痕迹论的实证转化方案

副篇:从元融合到意义工程学 ——DOS痕迹论的实证转化方案 引言:诊断之后是什么 《全球元融合史——DOS历史唯物观》完成了一项诊断工作。它以“痕迹”为微观中介,重新描述了从狩猎采集到算法时代的意义生态系统演化,揭示了现代性意…...

Cursor破解工具终极指南:三步解锁AI编程助手完整功能

Cursor破解工具终极指南:三步解锁AI编程助手完整功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tria…...

ClickOnce部署避坑指南:解决.NET Framework 4.7.2系统必备组件本地化下载失败问题

1. ClickOnce部署中的.NET Framework多语言包问题 最近在用Visual Studio的ClickOnce技术部署一个多语言Windows应用时,遇到了一个让人头疼的问题。每次发布都会报错说找不到.NET Framework 4.7.2的英文和中文安装包。错误信息明确提示需要两个文件:NDP…...

如何快速抢到演唱会门票:DamaiHelper抢票工具完整指南

如何快速抢到演唱会门票:DamaiHelper抢票工具完整指南 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 还在为抢不到心仪演唱会门票…...

微信群消息自动流转:3分钟搭建你的智能同步系统

微信群消息自动流转:3分钟搭建你的智能同步系统 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 你是否厌倦了在多个微信群之间手动转发重要消息?是否曾因信息同步不及…...

西安交通大学学位论文LaTeX模板终极使用指南:从安装到定稿的完整流程

西安交通大学学位论文LaTeX模板终极使用指南:从安装到定稿的完整流程 【免费下载链接】XJTU-thesis 西安交通大学学位论文模板(LaTeX)(适用硕士、博士学位)An official LaTeX template for Xian Jiaotong University d…...

织梦素材站网站源码 资源付费下载交易平台源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 织梦素材站网站源码 资源付费下载交易平台源码 安装教程: 测试环境:Nginx PHP5.6 MySQL5.7 导入数据库文件:数据库.sql 数据库修改文件&#xf…...

HunterPie终极指南:如何用这款免费工具提升《怪物猎人世界》狩猎体验

HunterPie终极指南:如何用这款免费工具提升《怪物猎人世界》狩猎体验 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/h…...

智慧停车系统无人值守停车、充电系统(含小程序源码、后端源码、岗亭端源码)

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 无人值守停车、充电系统(含小程序源码、后端源码、停车屏,岗亭源码) 智慧停车系统,智慧充电系统、主要实现车辆停车系统操作管理、车辆充电管理、车辆停车…...

5步掌握gInk:Windows上最轻量的免费屏幕标注工具完整教程

5步掌握gInk:Windows上最轻量的免费屏幕标注工具完整教程 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否需要在演示时快速圈出重点内容,或…...

Dism++终极指南:快速清理优化Windows系统的免费利器

Dism终极指南:快速清理优化Windows系统的免费利器 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你的Windows电脑是不是越来越慢?C盘空…...

从流量包到Flag:一次CTF Misc挑战中的Python加密流量逆向实战

1. 初识CTF流量分析题 第一次接触CTF Misc类题目时,面对pcap流量包总有种无从下手的感觉。记得那次攻防世界的比赛,题目给了一个名为xxx.pcap的文件,打开Wireshark一看,满屏的TCP和HTTP流量让人眼花缭乱。当时我尝试用http.reques…...

Oracle EBS运行时接口漏洞导致数据泄露 (CVE-2025–61884) 技术分析

CVE-2025–61884 已被披露,涉及 Oracle E-Business Suite (EBS)。受影响组件为 Oracle Configurator Runtime UI,攻击者可在登录前通过未认证的 HTTP 请求利用该漏洞。成功利用可能导致配置相关数据被未授权访问。官方报告的受影响版本为 12.2.3–12.2.1…...

如何用WeChatMsg一键永久保存微信聊天记录:从数据备份到AI训练完全指南

如何用WeChatMsg一键永久保存微信聊天记录:从数据备份到AI训练完全指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_T…...

ExtractorSharp终极指南:5步掌握游戏资源编辑神器

ExtractorSharp终极指南:5步掌握游戏资源编辑神器 【免费下载链接】ExtractorSharp Game Resources Editor 项目地址: https://gitcode.com/gh_mirrors/ex/ExtractorSharp 如果你正在寻找一款强大的游戏资源编辑工具,ExtractorSharp绝对是你的不二…...

【香橙派实战指南】从零到一:系统镜像烧录与首次启动全解析

1. 硬件准备与选型指南 第一次拿到香橙派开发板时,我盯着那个巴掌大的小盒子看了半天——这玩意儿真能当电脑用?后来折腾了三天三夜才明白,选对硬件配件比技术操作更重要。先说TF卡这个最容易翻车的部件,去年双十一贪便宜买了某杂…...

用PyTorch从零复现U-Net:手把手教你搞定医学图像分割(附完整代码)

用PyTorch从零复现U-Net:手把手教你搞定医学图像分割(附完整代码) 医学图像分割一直是计算机视觉领域最具挑战性的任务之一。想象一下,当医生需要从CT扫描中精确识别肿瘤边界,或是研究人员要分析显微镜下的细胞结构时&…...

解锁AI编程新境界:Cursor-Free-VIP全面指南

解锁AI编程新境界:Cursor-Free-VIP全面指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial request…...

3步实现飞书文档本地转换:Cloud Document Converter全场景解决方案

3步实现飞书文档本地转换:Cloud Document Converter全场景解决方案 【免费下载链接】cloud-document-converter Convert Lark Doc to Markdown 项目地址: https://gitcode.com/gh_mirrors/cl/cloud-document-converter 想象一下,当你需要将飞书文…...

WebPShop:Adobe Photoshop插件架构深度解析与WebP格式集成技术实现

WebPShop:Adobe Photoshop插件架构深度解析与WebP格式集成技术实现 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop 在数字图像处理领域,WebP格式以其卓…...

AO3镜像站终极指南:5分钟快速解锁全球最大同人创作平台

AO3镜像站终极指南:5分钟快速解锁全球最大同人创作平台 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site Archive of Our Own(AO3)作为全球最大的非营利性同人创作平台,汇…...

小白程序员必备:轻松入门攻防技术!

小白程序员必备:轻松入门攻防技术! 本文介绍了逆向工程技术在产品设计、文物修复、军事装备研制等领域的应用特点,并重点推荐360智榜样学习中心的《网络攻防知识库》,适合零基础转型者、开发/运维人员、应届毕业生及安全爱好者学习…...

Python趣味编程:手把手带你玩转凯撒到仿射古典密码(收藏版)

Python趣味编程:手把手带你玩转凯撒到仿射古典密码(收藏版) 本文通过Python实战,带你轻松入门古典密码学。从不到10行的凯撒密码到需要模运算的仿射密码,用代码直观展示移位加密原理。文章包含开发环境设置、加密解密实…...

Multisim 14.0 仿真实战:从零搭建晶体管集电极调幅电路,手把手教你测调幅度

Multisim 14.0 仿真实战:从零搭建晶体管集电极调幅电路,手把手教你测调幅度 在电子通信领域,调幅技术作为最基础的模拟调制方式之一,其原理理解与实际电路实现往往存在巨大鸿沟。许多初学者能够背诵调幅波公式,却在仿真…...

Fast SAM C++推理部署实战:onnxruntime静态维度优化与性能调优

1. Fast SAM模型与onnxruntime部署基础 Fast SAM作为计算机视觉领域的高效分割模型,相比原版SAM模型实现了50倍的速度提升。这个提升主要来自两个关键设计:一是采用轻量化的CNN架构替代Transformer,二是仅使用SA-1B数据集的2%进行训练。在实际…...

从 OpenClaw 到端侧 AI:低算力智能体架构设计

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...

实战HI3516A:基于Cadence Sigrity的PCB电源树(PowerTree)自动化提取与优化

1. HI3516A与PowerTree基础认知 第一次接触海思HI3516A芯片的PCB设计时,我被它复杂的电源网络搞得头晕眼花。这块芯片广泛应用于智能摄像头、边缘计算设备,其多电压域设计让电源分配网络(PowerTree)像迷宫一样。简单来说,PowerTree就是描述电…...