恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

S32K144裸机开发入门:从建工程到J-Link烧录调试全攻略

  • 首页
  • 资讯中心
  • /
  • S32K144裸机开发入门:从建工程到J-Link烧录调试全攻略

相关资讯

数据新鲜度驱动的协作式无人机联邦学习:AoI建模与PD-MADDPG仿真实现 2026/10/5 5:15:30
RAG进阶实战:从可诊断、可归因到可修复的工程化落地 2026/10/5 5:15:30
阿里开源30章企业级Agent落地手册:从Demo到生产环境的工程实践 2026/10/5 5:15:30

最新资讯

STM32从零开发3D打印机:运动控制与固件实现全解析
快递系统微服务解耦实战:从耦合病到故障隔离
Go 1.27.1 泛型方法实战:重构 CRD 状态机以单态化消除多层接口装箱损耗
SV660N伺服与SOEM主站实战:PDO映射与CiA402状态机调试避坑指南
回形针小目标检测全流程实践:数据合成、模型训练与落地
vLLM 分布式推理核心:NCCL 集合通信与 CUDA Stream 异步掩盖实战

今日推荐

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单
YOLOv5 OBB旋转框训练实战:从DOTA数据准备到调参避坑全流程
Zeron 终端、Worktree 与 Diff 面板:像 IDE 一样查看并驱动你的代码变更

本周热门

MR25H40CDF + PIC18F65K40:工业记录仪高可靠存储实战
基于STM32的数控恒压恒流电源设计:从硬件到PID调参全解析
LT9211 MIPI重定时器原理与双路扇出实战指南

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

S32K144裸机开发入门:从建工程到J-Link烧录调试全攻略

发布时间:2026/10/5 5:15:30
S32K144裸机开发入门:从建工程到J-Link烧录调试全攻略 先交代一下背景。最近在调一块S32K144的开发板从建工程到点灯、从烧录到在线调试一路踩了不少坑。网上关于S32K144的资料虽然不少但大多是零散的要么只讲SDK开发要么默认你已经会建裸机工程了。这篇就把“S32K144新建裸机项目 烧录调试”这件事从头到尾捋一遍包括工具链怎么选、工程怎么建、J-Link怎么接、烧录失败和芯片被锁怎么救。内容偏向实际操作适合第一次接触S32K144、对NXP整个工具链还不熟的开发者尤其是从STM32转过来的朋友看完基本能少走一半弯路。1. 方案选型为什么裸机起步工具链怎么选1.1 裸机开发的适用场景与思路S32K144是NXP面向汽车电子推出的一款车规级MCUCortex-M4F内核主频最高112MHz片上带CAN FD、LIN、UART、I2C、SPI、FlexIO等外设供电、温度范围都是为车载环境设计的。很多人一上来就想上RTOS或者直接套用SDK的组件但对于刚接触这颗芯片的人来说直接裸机起步反而更快。裸机开发的优势在于逻辑链路短、可控性强没有调度器和中间层干扰代码跑到哪一步、外设寄存器配置成什么样都非常直观尤其适合做Bootloader、底层驱动验证、电源管理这些需要精确控制时序和资源的场景。我用裸机开发的核心思路是先把最小系统跑起来确认时钟正常、GPIO可控、调试口稳定再在这个基础上一个个点亮外设模块。这样即使后面出问题也能快速定位是硬件、时钟还是代码的问题而不是在多层软件栈里翻来翻去。如果你之后的项目规模不大、不需要复杂的多任务调度裸机方案完全够用而且代码体积小、功耗好控制排查故障也方便。1.2 IDE与调试器选型对比S32K144的开发工具主要有三套路线NXP官方的S32 Design Studio简称S32DS、Keil MDK以及IAR EWARM。三套我都试过在选型这件事上别纠结“哪个最厉害”要问“哪个最适合你当前的工程阶段和团队习惯”。S32DSNXP官方Eclipse平台免费自带S32K1xx系列SDK和配置工具Processor Expert / S32 Configuration Tools图形化配置引脚、时钟、外设非常方便。缺点是启动较慢、界面偏重刚上手时配置项多到让人头大。Keil MDK如果之前一直用Keil做STM32那这套环境对你来说几乎没有学习成本。安装好S32K1xx的Device Family PackDFP后可以像用STM32一样建工程、点下载。缺点是S32K144的底层启动文件、链接脚本需要DFP帮忙管理手动搭建时细节多。IAR EWARM工业界老牌编译优化好调试体验流畅但License要钱如果不是公司强制个人学习阶段没必要优先考虑。我个人的选型建议是学习、验证外设驱动用S32DS 官方SDK因为它生成代码快跑例程方便产品化、固件迭代用Keil因为团队协作习惯、编译速度、Script处理都更顺手。这套思路在后面的章节我会分别展开两种路线的建工程方法都给你写清楚。调试器方面性价比最高的组合就是SEGGER J-Link我推荐用J-Link BASE或EDU稳定便宜社区资料多。S32K144原生支持SWD和JTAG日常调试用SWD就够了只接SWDIO、SWCLK、GND三根线再加上VCC做参考电压检测四根线搞定。有些开发板自带OpenSDA调试器也能用但遇到兼容性问题时换J-Link往往立竿见影。2. 准备工作环境安装、器件包与基础接线2.1 软件环境安装先说S32DS路线。去NXP官网下载S32 Design Studio for S32 Platform建议选择离线安装包在线安装碰到网络波动容易中断。版本方面S32DS 3.x之后的界面和工具链更成熟选新不选旧。安装完成后IDE里已经内置了S32K1xx系列的SDK不需要额外再装这点对新手很友好。Keil路线稍微多一点步骤。先安装Keil MDK建议5.35以上版本新版对Arm Compiler 6兼容更好然后到Keil官网或通过Pack Installer安装NXP S32K1xx系列的Device Family Pack。这个DFP包里包含了S32K144的器件定义、启动代码、Flash下载算法没有它你就无法在Keil里创建S32K144工程。装好之后在Pack Installer的Device列表里能看到NXP-S32K1xx-S32K144就说明环境OK了。除此之外无论哪条路线都建议装一下SEGGER J-Link Driver它除了提供调试器驱动还带了J-Link Commander、J-Flash等实用工具。后面你遇到芯片连不上、需要解锁的场合这些命令行工具就是救命稻草。2.2 目标板接线与硬件检查接线之前先把目标板断电养成“先接线、后上电”的习惯。SWD接口四根线的接法如下J-Link引脚目标板引脚说明VTref1脚VCC3.3V参考电压检测不用供电只测电平SWDIO7脚SWDIO数据线SWCLK9脚SWCLK时钟线GND4脚GND共地如果你的目标板没有引出SWD排针需要飞线时务必确认板上SWDIO、SWCLK和复位脚是否接到了MCU对应的PTA0/PTA1S32K144的SWDIO和SWCLK分别复用在PTA0和PTA1具体复用功能表要查Datasheet的Pin Mux表格。上电前做两个检查一是确认电源电压S32K144的核心和IO都是3.3V接5V会直接烧掉二是听一下电流是否异常我习惯用可调电源或者带电流显示的USB表先供电如果上电瞬间电流飙到几百毫安大概率是电源短路或接反了马上断电。另外如果板子上有其他外围电路如CAN收发器、LIN收发器这些外设也不要在调试期间抢主芯片的电。遇到“调试器一连接就复位”“程序跑飞供电不稳”的情况优先怀疑供电余量是不是不够。3. 新建裸机工程两种路线按需选择3.1 路线AS32DS创建空白工程用SDK快速起步S32DS建裸机工程的前提是理解它的工程结构。打开S32DS选择File - New - S32DS Project在弹出的向导里输入工程名然后在Device下拉列表中选择S32K144再选择你要的具体型号比如S32K144HFT0VLLT最后几位是封装和温度等级。工程模板里有一个“Empty Application”选项选它就能生成一个不带任何外设配置的裸机工程。生成后工程目录里最重要的几个文件分别是startup_S32K144.s启动文件、system_S32K144.c系统时钟初始化、clock_manager.c时钟配置接口SDK版本会有、pin_mux.c引脚复用配置。S32DS的SDK默认会帮你把时钟配置成FIRC 48MHz这个频率在绝大多数场景下够用。我们第一次点灯直接操作GPIO寄存器就行。建议你在S32DS中通过“Processor Expert”的图形化配置界面来配置引脚和时钟这比手写寄存器初始化代码安全很多。配置好引脚之后它会生成PinMux_Init()和Clock_Init()的调用代码你只需要在main()里先调用这两个初始化函数然后操作GPIO的PDOR、PDDR寄存器。举个例子如果你的板载LED接在PTA15#include S32K144.h #include pin_mux.h #include clock_config.h static void delay(void) { volatile int i; for (i 0; i 2000000; i) { } } int main(void) { BOARD_InitPins(); BOARD_InitBootClocks(); PTA-PDDR | (1U 15); // PTA15方向设为输出 PTA-PCOR (1U 15); // 先拉低点亮LED低电平有效 while (1) { PTA-PTOR (1U 15); // 翻转LED delay(); } }代码里的BOARD_InitPins()和BOARD_InitBootClocks()是SDK生成工程里默认提供的初始化函数分别做引脚复用和时钟初始化。写完后直接编译下载如果LED能闪烁说明工程链路和烧录链路都是通的。3.2 路线BKeil手动搭建裸机工程轻量可控如果你不想装重量级的S32DS那么Keil手动搭建是最轻量的选择。但在操作之前必须说清楚S32K144的启动文件和链接脚本不像STM32那样有丰富的社区模板很多细节依赖DFP自动带入所以手动搭建时必须让Keil正确识别DFP里的器件否则后面编译和下载都会出问题。具体步骤打开KeilProject - New uVision Project选择目标路径并输入工程名。在弹出的Device选择窗口里依次展开NXP - S32K1xx - S32K144选具体型号后确定。Keil会提示“Copy Start-up File”建议选择“是”这样DFP会帮你把startup_S32K144.s加入工程省去手动编写向量表的工作。创建main.c在C/C里的Include Path添加需要的头文件路径如果是空工程至少要把DFP对应的S32K144头文件目录加进来方便引用S32K144.h。配置编译选项Project - Options for Target - C/C标签页把Language C选为C99或C11优化级别建议先选-O0方便调试看到真实变量值。配置调试器Debug标签页右侧选择“SEGGER J-Link”并勾选“Use”Settings里确认驱动识别到J-Link设备Utilities标签页里勾选“Use Debug Driver”然后在Flash Download里添加对应的Flash算法。手动搭建方式下system_S32K144.c这个文件SDK没有你需要自己写一个简单的系统初始化或者直接在main()里把时钟配置做掉。最简单的做法是直接用默认FIRC 48MHz不做PLL复杂配置。这种情况下可以让启动文件里的SystemInit()是空函数或者提供一个只返回不操作的空实现然后在main()里直接操作外设。这个坑尤其提醒一下S32K144上电复位后默认用的是FIRC内部48MHz振荡器时钟源本身是活的所以程序不配置时钟也能跑——这跟STM32上电默认用HSI是类似的逻辑但S32K的时钟门控需要你单独打开外设的时钟门控否则寄存器写了不生效。S32K144的每个外设都有一道时钟门控在PCC模块的PCCn[外设索引]寄存器里必须把CGC位置1外设才能操作。这跟STM32用RCC-AHBENR使能外设时钟是同一个思路。很多初学者在Keil工程里点了GPIO却不亮灯就是因为忘了打开PCC时钟门控。所以下面的代码里加了PCC相关操作#include S32K144.h static void delay(void) { volatile int i; for (i 0; i 2000000; i) { } } int main(void) { PCC-PCCn[PCC_PORTA_INDEX] | PCC_PCCn_CGC_MASK; // 打开PORTA时钟门控 PTA-PDDR | (1U 15); // 输出方向 PTA-PCOR (1U 15); // 拉低LED while (1) { PTA-PTOR (1U 15); delay(); } }这段代码里的PCC_PORTA_INDEX是S32K144自带的宏定义直接能用。编译后如果0错误再往下走烧录。3.3 两种路线的差异对比对比项S32DS SDKKeil 手动裸机环境体积大启动慢小启动快初始化代码自动生成完整但复杂自己控制精简但需要了解原理对外设驱动的支持大量现成驱动可直接调用基本靠手写对学习底层原理的帮助一般较大适合场景快速验证、跑官方例程、做产品原型精简固件、学习底层、最终量产维护我的建议是第一次接触S32K144先用S32DS跑官方例程把芯片的脾气摸清楚当你需要做量产级固件的时候再回到Keil或者IAR手动控制每个字节的烧录和启动流程。两条路线不冲突反而互补。4. 烧录与调试从J-Link连接到底层变量监视4.1 烧录前配置要点无论用哪条路线烧录前一定要确认三个东西。第一是调试器类型是否选对第二是Flash下载算法是否存在第三是烧录起始地址是否和链接脚本一致。Keil路线里打开Options for Target - Debug右边选择J-Link后点Settings确保“SW Device”列表里能看到一个Cortex-M4设备ID如果这里空白说明调试器没有和目标板正常通信先别急着点下载回头检查接线。然后切到Utilities标签页点Settings进入Flash Download配置这里必须有一个比目标Flash容量小的算法项S32K144全系Flash是256KB选择“S32K1xx 256kB Flash”即可起始地址填0x00000000不要填错。如果列表里空空如也手动点击Add添加。S32DS路线里Debug Configuration会以工程运行配置的方式封装好调试器和下载参数通常在工程上右键 - Debug As - S32 Debug Configuration看到调试器下拉里选J-Link。初次运行时如果版本不匹配会弹出固件升级提示建议升级但要注意升级过程中不能拔掉调试器。S32DS的Flash下载地址和算法在Debug Configuration的“Startup”或“Flash”标签页里默认是自动识别一般不需要改除非你用了外部Flash启动之类的特殊场景。4.2 连接目标板与首次烧录的完整流程接线、上电、打开工程、配置好调试器之后按F8Keil或点DebugS32DS开始烧录。首次烧录成功会有进度条、校验提示、以及“Application running”之类的日志。Keil底部Build Output窗口如果出现“Flash Load finished successfully”说明芯片已经写进去了。如果出现烧录失败不要反复点下载按钮先看错误日志。最常见的错误是“Cannot access target”意味着调试器和芯片没有建立连接。排查顺序是J-Link的指示灯是否常亮USB枚举成功、VTref电压是否被读到、SWD三根线有没有接反。还有一个很容易被忽略的地方目标板必须上电且调试器的VCC检测线必须和3.3V连接否则J-Link完全不知道目标板的参考电平是多少SWD通信会直接失败。烧录完成后程序会自动运行还是停在复位入口取决于Debug窗口里是否勾了“Run to main”之类的选项。Keil默认会停在Reset_Handler你只有点Run全速运行才能看到LED闪烁效果。S32DS类似不加启动中断的话默认停在reset vector。如果点Run之后LED不闪先用暂停键看PC指针卡在哪个函数通常是时钟配置没生效或者GPIO方向没配好再用单步逐行找问题。调试期间串口打印日志是最直接的手段。S32K144的LPUART外设发送字符串裸机实现也不复杂核心是配置UART时钟、波特率和发送寄存器。这里给一个基于FIRC 48MHz、波特率115200的最小初始化思路打开要使用串口的引脚复用比如LPUART0对应PTA14/PTA15这一步在S32DS里通过PinMux生成。打开LPUART0的PCC时钟门控PCC-PCCn[PCC_LPUART0_INDEX] | PCC_PCCn_CGC_MASK;配置波特率寄存器先设OSR15然后计算SBR48000000/(16*115200)≈26。使能发送LPUART0-CTRL | LPUART_CTRL_TE_MASK;发送一个字节就是往DATA寄存器写值同时等待STAT寄存器里的TDRE位置1。波特率的推算公式是Baud 时钟源 / ((OSR 1) * SBR)。为什么OSR取15、SBR取26因为算出来的实际波特率是48000000 / (16 * 26) 115384和115200的误差只有0.16%完全在UART通信要求的±2%误差范围之内。串口接上之后就能在调试过程中把关键变量打印出来这对后续学习其他外设很有帮助。4.3 在线调试断点、单步、变量监视硬件调试的核心价值在于能看到程序运行时的真实状态。新手最容易犯的错是把printf挂在某个循环里刷屏结果程序跑飞了还不知道。正确做法是一开始就学会用断点。编译时请保证优化级别是-O0这样局部变量才能稳定出现在Watch窗口。设置断点的方式是在代码行号左侧单击出现红色圆点即可。如果断点断不住优先确认链接脚本里的调试符号是否被裁剪掉了或者在启动文件里手动插入BKPT指令强制中断。在线调试时我常用的几个窗口Registers看R0-R15、PC、LR、PSP/MSP分析程序跑飞时PC跳到哪了。Watch添加变量名查看变量的实时值。S32K144的寄存器地址如果被映射到了未定义的内存段Watch窗口直接看地址是不可靠的要看对应定义的宏名。Disassembly反汇编窗口看C代码对应的汇编指令排查指针访问异常时特别好用。Memory直接查看指定地址的内存数据。比如你怀疑Flash配置字段被擦除可以直接在Memory窗口输入0x400地址看Flash配置字段的内容。J-Link还有个特别好用的功能是SEGGER RTT。如果不想占用额外串口引脚可以在工程里使用RTT库把调试日志输出到J-Link的RTT Viewer窗口速度比串口快得多而且不占串口资源。第一次调S32K144的时候建议把RTT调通后面排查问题会省很多事。5. 常见问题与排查速查表5.1 芯片被锁与全擦除后的恢复方法搜索S32K144相关问题时“解锁”和“全擦除”出现的频率极高这也是S32K144比较容易踩的坑。芯片被锁的根本原因在于Flash配置字段Flash Configuration Field里有安全位和保护区。S32K144在上电后会把Flash的0x400到0x40F区域当作用户配置区其中涉及SEC位和Flash保护使能。如果程序意外向这个区域写了非预期的值或者意外执行了全擦除mass erase操作芯片可能在下一次复位后进入保护状态调试器也就连不上了。我自己遇到过一次最典型的场景在做Flash掉电测试时忘了关全局擦除接口结果把整片Flash擦了。芯片死锁后J-Link提示“Cannot connect to target”当时一度以为片子彻底废了。恢复方法实际很简单按照以下步骤操作即可把SWDIO用杜邦线短接到GND使芯片进入恢复模式。打开J-Link Commander输入connect设备型号填S32K144接口选SWD速度可以先设成100kHz。如果连接过程能识别到ID输入unlock S32K144或者使用J-Flash的Target - Unsecure Chip功能。执行全擦除mass erase把Flash清空。断开SWDIO与GND之间的短接线重新上电。这一步做完芯片基本就恢复了。需要注意的细节是SWDIO短接到GND的操作在有些设计上可能会影响调试器供电务必先断电再短接。另外J-Link Commander连接时如果识别不到设备可以尝试按住目标板复位键再执行connect让芯片保持在复位状态进入调试。恢复之后一定要做一个动作程序里不要再随意对Flash配置区做写操作。真正需要修改Flash配置字的时候应该通过SDK的Flash驱动按扇区、按页操作并且先读回校验。5.2 烧录失败与调试异常的常见原因这里把我在论坛和实际项目中见到的高频问题整理成了一个速查表帮你快速定位现象常见原因解决方法Keil提示“Cannot access target”接线错误、目标板未上电、VTref未接检查SWD四根线确保VTref接3.3VS32DS连接时报“No core connected”芯片进入保护状态、复位电路异常按5.1的解锁思路处理或降速到100kHz再连烧录到一半卡住进度条不动USB线质量差、供电不足换短粗USB线改用独立5V/3.3V电源给板子供电“Flash Download failed - Could not find Flash algorithm”Keil没添加Flash算法在Utilities - Flash Download里添加S32K1xx 256kB Flash程序能烧进去但复位不运行复位脚被拉低、看门狗在复位后咬住检查RESET引脚电平确认没有外部复位电路下拉串口打印乱码或无输出LPUART波特率分频不匹配、引脚复用没配好核对OSR和SBR寄存器值检查引脚复用功能断点打上了但不停编译优化级别过高把Optimization改为-O0调试器频繁掉线J-Link固件旧、SWD速率过高更新J-Link固件降低SWD速率关于SWD速率还有一个实操经验条件允许时优先用默认自动速率如果连接不稳定手动降到1MHz或100kHz试试。很多“一连接就死机”的问题其实是速率太高、线材太长引起的信号反射跟芯片本身没关系。J-Link的线材超过20cm且没有屏蔽时不要追求高速度。5.3 在线调试时的不稳定现象分析调试过程中你可能会遇到程序一跑就进HardFault或者全速运行时Watch窗口看到的变量值完全不正常。这类问题大概率是外部因素干扰而不是代码逻辑本身。最常见的三个原因第一电源纹波太大。电机、继电器动作时板上电压跌落会导致MCU复位或程序跑飞调试时如果你用仿真器供电还带负载大概率会复现这种问题。建议独立供电并在MCU电源引脚附近加100nF10uF去耦电容布局上离MCU越近越好。第二调试期间看门狗复位。有些工程初始化阶段就把看门狗打开了调试器停住的时间足够看门狗超时于是每次暂停一会儿就自动复位。解决办法是在调试阶段临时注释掉看门狗初始化或者在看门狗喂狗函数里下断点确认喂狗路径是否正常。第三低功耗模式锁死调试口。S32K144进入Stop模式时如果调试端口没有保持使能J-Link就再也连不上了。这是芯片设计行为不是故障。排查方法是在进入低功耗的代码前加打印或断点先确定停在了哪个位置再检查调试保持相关的配置位。我见过一个案例朋友调低功耗代码程序进入Stop模式后J-Link彻底失联他以为是芯片坏了换了新片还是一样的现象后来才发现是调试器在目标芯片休眠时也无法保持连接。遇到这类情况不要急着换芯片先在进入休眠前的代码处打断点确认程序确实执行到了休眠指令再考虑是否配置了调试保持位。6. 还想补充的几个小技巧这篇内容已经足够长最后再用我自己实操的体会收个尾吧。第一如果你同时用S32DS和Keil建议把每个阶段生成的配置代码比如引脚初始化、时钟初始化单独保存一份整理成一个模板工程。S32K144的引脚复用功能表比较绕每次重选设备都要查Datasheet的Pin Mux表很浪费时间。我自己维护了一个本地模板把常用外设的初始化都配好之后新建项目只需要复制粘贴改引脚编号就行。第二养成“程序烧录后先读回Flash再跑”的好习惯。S32DS和Keil都提供烧录后的校验选项默认是勾选的但有时候为了提速会有人把校验关掉。校验功能卡掉的是那种“烧录时看着成功实际上Flash里是空代码”的诡异问题。有一次我关了校验程序烧进去以后跑起来行为完全不对最后发现是Flash下载算法选错了文件压根没正确写入。开着校验这类问题一烧就知道。第三永远保留一个能点亮板载LED的最小工程别删。每次拿到一块新S32K144板子第一步就是用这个工程确认硬件、调试器、工具链、串口都正常然后再开始别的工作。这个习惯帮你把所有环境问题收敛在开发的第一天而不是在项目后期被“板子能不能跑”这种基础问题反复折磨。第四善用J-Link的RTT功能在没有串口线的情况下也能快速看日志。S32K144调试阶段RTT比串口方便得多速度更快、不占额外引脚唯一的成本是工程里要加一点RTT相关的源码。调试稳定的固件最终量产时RTT代码可以留着不会影响正常功能。S32K144是个学习价值很高的芯片裸机开发能让你对ARM Cortex-M4F的外设操作和NXP的时钟/复位体系有非常扎实的理解。希望这篇环境搭建和调试经验能帮你把最基础的“建工程、点灯、烧录”顺利通关后面遇到外设模块调不通的时候至少能确定问题不在环境上。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号