ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

STM32F103国产替代实战:MH32F103A软硬件兼容移植与避坑指南

STM32F103国产替代实战:MH32F103A软硬件兼容移植与避坑指南 做嵌入式的朋友应该都有体会最近两年ST原厂的STM32F103系列尤其是C8T6、RCT6这些明星型号价格和交期就像过山车。缺货的时候一颗从几块炒到几十块项目明明已经量产BOM说断就断那种感觉实在太难受了。所以很多人开始认真评估国产替代方案各类兼容芯片也陆续冒头。我手上这颗MH32F103A就是其中一个代表官方定位很明确针对STM32F103CCT6、RCT6、RBT6等型号做软硬件兼容替代。这篇文章我就把这颗芯片从选型、硬件换板、软件移植到量产出货的全过程包括踩过的坑一次性写清楚。不管是正在选型的量产项目还是学校里的毕业设计只要你在为STM32F103的供货和成本发愁这篇内容都应该能帮到你。1. 项目核心思路MH32F103A为什么能“软硬件兼容替代”1.1 从Cortex-M3内核到外设寄存器兼容的底层逻辑先说结论MH32F103A能兼容替代STM32F103系列核心原因在于它和STM32F103一样都基于ARM Cortex-M3内核而且内存映射、中断控制器NVIC、系统节拍定时器SysTick以及绝大部分外设寄存器的布局都对齐了STM32F1系列。这句话拆开看就很好理解了。Cortex-M3内核保证了指令集一致所以在STM32F103上编译出来的机器码在MH32F103A上能执行NVIC和SysTick一致意味着中断优先级配置、延时函数这些基础代码不用改。外设寄存器布局一致意味着操作GPIO、USART、TIM、SPI、I2C、ADC时软件看到的寄存器地址和位定义几乎一样标准外设库和HAL库里的寄存器操作代码可以直接跑。我记得第一次测试时直接把一个用STM32标准外设库写的工程芯片型号改成MH32F103A编译后烧进去串口居然直接打印出数据了那一刻确实有点意外。因为“兼容”这两个字在市面上被用得太滥很多芯片宣传说兼容实际烧进去不是外设不进中断就是ADC数值不对能做到这种程度的说明厂家在架构上下了真功夫。当然兼容不意味着连编译目标都不用换。原工程如果用的启动文件、链接脚本、设备头文件是基于STM32F103的通常能直接编译但更规范的做法是安装MH32F103A对应的器件支持包让编译器知道这颗芯片的Flash和RAM边界。这一步后面讲工程搭建时会详细说。1.2 命名、封装与管脚对比CCT6/RCT6/RBT6怎么选先帮新手理一下型号后缀的意思。以STM32F103为例CCT6代表LQFP48封装、256KB Flash、64KB RAM工业级温度范围RCT6代表LQFP64封装、256KB Flash、48KB RAMRBT6则是LQFP64封装、128KB Flash、20KB RAM。三个型号引脚数量和资源不同但都属于STM32F103的“中端容量”序列。MH32F103A的命名体系基本对标这套逻辑所以你在选型时可以直接把原来的STM32型号后三位搬过来。封装上LQFP48和LQFP64的引脚定义MH32F103A和STM32F103是pin-to-pin兼容的。这一点对老项目特别关键。硬件工程师不用重新画板生产线上直接把老芯片换成新芯片就能过回流焊改动成本趋近于零。我做过一次实测把原来贴STM32F103RCT6的板子换成MH32F103A程序改动只有器件选择其余完全没动上电就跑。但要注意这里的“管脚兼容”指的是引脚功能定义一致不代表电气特性完全一模一样。比如GPIO的驱动能力、灌电流能力、上下拉电阻阻值不同芯片会存在细微差别。如果你的产品往GPIO上挂了比较重的负载比如直接驱动LED或者三极管替换前最好翻一下MH32F103A数据手册里的电气参数表看看IO输出电流和STM32F103的差异。1.3 “尽量兼容”不等于“完全一样”先认清差异再动手这句话是我做国产替代这几年最大的体会。MH32F103A在软件层面确实做到了很高的兼容度但细抠起来仍有一些需要留意的点。首先Flash的访问时序和擦写算法可能不同。STM32F103内部Flash编程是以页为单位擦除的每页1KBMH32F103A的Flash组织形式可能与之不完全相同。如果你用STM32标准库里的FLASH_ErasePage、FLASH_WriteWord等函数行为基本一致但如果你直接在应用里做了IAP升级就需要确认MH32F103A的Flash扇区划分和写入时序不要直接照搬原工程。其次96位唯一ID的地址未必一样。STM32F1系列的UID地址在0x1FFFF7E8很多产品用它做加密或设备序列号。国产替代芯片大多也有类似功能但寄存器的基地址可能不同。如果你的原工程读取了UID一定要查一下MH32F103A的UID存放在哪里改成对应的地址。第三低功耗模式的电流和唤醒源可能有差异。STM32F103的Stop模式待机电流在手册里有明确范围MH32F103A的实测值不一定相同。做电池供电的产品不能只看“支持Stop模式”就完事必须实测待机电流。所以我把这个项目的第一条经验定为不要迷信“软硬件兼容”四个字把它当成一把打开工程便利性的钥匙但在量产前该做的验证一个都不能省。2. 硬件设计直接替换前的关键检查项2.1 电源、复位、时钟电路怎么处理先说电源。STM32F103和MH32F103A都是3.3V供电这是大多数场景能直接替换的基础。但硬件上要注意VDDA和VREF的滤波原设计如果用的是STM32的经典参考电路比如VDD每个引脚并100nF电容VDDA单独接磁珠和1μF电容这些在新芯片上依然适用。供电电压范围方面STM32F103典型应用是2.0V到3.6VMH32F103A的具体范围以数据手册为准如果原产品用3.3V基本不用担心。复位电路部分STM32F103的NRST是低电平复位通常用10kΩ上拉到3.3V再并一个100nF电容到地形成上电复位延时。MH32F103A也采用类似的低电平复位逻辑。我实际测试过直接沿用这套复位电路没有出现上电复位不彻底的问题。但如果你原来的板子没有预留外部复位电路而是完全依赖芯片内部上电复位替换后也要注意观察上电瞬间程序是否稳定运行特别是有外部看门狗的设计。时钟电路是很多人容易忽略的地方。STM32F103支持外部8MHz晶振和内部8MHz RC振荡器。MH32F103A同样有HSE和HSI两套时钟源但HSI的精度和温度漂移可能与ST的有差异。如果你的产品对串口波特率精度要求高比如长时间通信不掉线建议优先使用外部晶振。晶振电容的选择有个基础公式负载电容CL (C1×C2) / (C1C2) 寄生电容Cstray。例如选用负载电容20pF的8MHz晶振C1C2C忽略寄生电容时CL约等于C/2所以C大约取40pF实际板上寄生电容通常在3到6pF因此C取20到30pF是常见范围。我看到很多开发板上直接用两个20pF配合负载电容15到20pF的晶振也能正常起振但量产设计最好按公式算一遍并且留出调试焊盘。2.2 SWD下载与ISP保护的硬件预留无论用什么单片机下载接口都是硬件设计的重中之重。MH32F103A同样支持SWD和JTAG两种调试接口实际项目里我强烈建议只引SWD四根线就够SWDIO、SWCLK、GND、3.3V。配合ST-Link、J-Link或者DAP-Link都可以连接。SWD接口的硬件上SWDIO和SWCLK可以各加一个10kΩ上拉电阻到3.3V防止下载器没接的时候引脚电平飘忽。有些下载器内部已经带上拉板上电阻可加可不加但加上会更稳定。如果板子空间紧张不加上拉电阻也能下载只是在线调试时抗干扰能力会弱一些。另外要预留BOOT0和BOOT1的跳线或者拨码开关。STM32F103的BOOT0拉高、BOOT1拉低时可以从系统存储器启动也就是进入ISP模式通过串口下载程序。MH32F103A如果要通过串口刷写固件同样需要这个机制。量产阶段即使只用SWD下载BOOT0的预留也能在固件异常时多一条救命的通道。我在实际项目中会把BOOT0拉低正常启动模式作为默认状态同时留出焊盘或测试点方便紧急恢复。还有一点USB接口的板子要预留USB D上拉电阻的控制引脚。STM32F103的USB从设备一般通过PA12内部上拉来让主机识别设备国产兼容芯片的USB控制器如果复用方式一样原工程的初始化代码就不用改。网上很多人遇到虚拟串口在设备管理器里显示黄色感叹号多半是D上拉没拉起来或者晶振频率偏差导致USB枚举失败。这个后面排查清单里再展开。2.3 在现有STM32 PCB上直接替换的注意事项硬件直接替换是最爽的体验但有几个细节我建议在换板前检查。第一检查原PCB上STM32F103芯片底部的裸露焊盘。LQFP48和LQFP64封装的芯片底部有散热焊盘虽然不连接电气网络但一般在PCB设计时接地。MH32F103A的封装如果与ST的一致替换没问题如果封装的焊盘尺寸有细微差异可能存在虚焊风险。这部分最好向厂家要封装对比确认不要拿热风枪吹上去就算了。第二检查IO口的电平兼容性。有些国产替代芯片的IO不是真正的5V容忍或者5V容忍度与ST不完全相同。如果你的板子上有IO直接连接5V逻辑器件比如与5V单片机通信、驱动5V电平的传感器要确认MH32F103A对应引脚的耐压范围必要时加电平转换电路。第三检查外部晶振的起振电流和负阻。国产芯片内部振荡器电路的驱动能力可能与ST不同导致同一个晶振在STM32F103上正常起振换到MH32F103A上却不稳定。判断方法是用示波器探头夹在晶振引脚上观察起振时间和幅度最稳妥的做法是直接按MH32F103A数据手册推荐的晶振负载电路重新匹配。硬件这些问题排查起来通常比软件更隐蔽因为程序能跑、灯能亮但不代表长时间运行没问题。我踩过最深的坑就是晶振匹配不当导致的间歇性乱码排查了三天最后换了一对匹配的电容就好了。所以替换后一定要做长时间老化测试别急着量产。3. 软件移植与开发环境实操3.1 Keil工程改造芯片包、器件选择与启动文件软件部分先从开发环境说起。如果你一直用Keil MDK写STM32F103MH32F103A的工程搭建非常顺流程和给STM32安装器件支持包一样。第一步安装MH32F103A对应的Device Family Pack。官方会提供一个.pack文件在Keil里双击安装即可。安装完成后在Options for Target的Device选项卡里就能看到MH32F103A系列的具体型号。这一步相当于告诉编译器这颗芯片的Flash容量、RAM起始地址和大小以及烧录时要用哪个Flash算法。第二步确认启动文件。STM32F1系列根据Flash容量大小启动文件分startup_stm32f10x_ld.s、md、hd、xl等几类。MH32F103A如果完全兼容CCT6和RCT6这种256KB Flash的型号对应hd启动文件RBT6128KB对应md启动文件。选错启动文件会导致中断向量表错位编译能通过但一跑就HardFault。如果你在原有STM32工程里开发原工程用哪个启动文件换芯片后继续沿用即可。第三步设置调试器和Flash下载算法。调试器选ST-Link或J-Link然后到Utilities Setting里检查Flash Download列表。安装官方pack后这里会自动出现MH32F103A对应的编程算法选择它烧录速度可以先设成默认比如1MHz或4MHz稳定通过后再逐步提高。这里有一个容易踩的坑如果你安装pack后没有在Device里切换芯片仍然沿用STM32F103的器件选项程序大概率也能烧进去但下载算法用的是ST的FLM文件。如果MH32F103A的Flash读写时序与ST存在细微差异就会在擦除或校验时报错。我建议所有新项目都改用官方pack不要图省事。3.2 标准库代码迁移体验与HAL工程兼容性MH32F103A的寄存器布局如果完全对齐STM32F1系列那么STM32标准外设库V3.5的代码可以直接编译运行。这一点对存量项目太重要了因为很多老项目用了好几年标准库代码结构健壮工程师也很熟悉迁移成本极低。我在一个实际项目里验证过一个用STM32F103RCT6做的设备里面有TIM2输出PWM控制舵机、USART1跑Modbus从机、ADC1采集两路模拟量全部用标准库写。把Keil里的Device切换成MH32F103A对应型号重新编译零错误零警告烧录后所有功能正常功耗和发热也没有异常。整个软件迁移过程用时不到半小时。HAL库的兼容性同样值得关注。STM32CubeMX生成的HAL工程如果底层寄存器布局一致HAL库代码一样能跑。但要注意两点一是CubeMX生成代码时选择的芯片型号要能改成MH32F103A或者在CubeMX里手动添加这颗芯片的支持包二是时钟树配置MH32F103A的HSI和HSE范围可能与STM32F103有细微差别生成代码后要检查SystemClock_Config函数里的PLL倍频系数是否在MH32F103A支持的范围内。如果你更喜欢用VSCode GCC工具链开发流程也一样芯片头文件、链接脚本、启动文件这三件套用MH32F103A对应的版本编译器直接复用ARM GCC写代码和烧录体验与STM32没有差别。3.3 烧录配置与固件验证点灯和串口打印流程讲一个最小验证流程虽然简单但能快速确认芯片是否工作、SWD是否通畅、开发环境是否配置正确。先写一个点灯程序。用标准库的写法大概是这样#include stm32f10x.h void Delay(volatile uint32_t n) { while (n--) { __NOP(); // 空指令延时方便简单演示 } } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStructure); while (1) { GPIO_SetBits(GPIOB, GPIO_Pin_0); Delay(1000000); GPIO_ResetBits(GPIOB, GPIO_Pin_0); Delay(1000000); } }编译下载后LED应该以大约1秒周期闪烁。这一步能验证芯片是否正常执行代码、GPIO翻转是否正常。接着初始化一个串口打印一串字符。选择USART1引脚PA9 TX、PA10 RX波特率115200。代码和STM32F103完全一致烧录后接USB转串口电脑上应该能看到字符串循环输出。如果这一步通过说明RCC时钟配置、USART外设、引脚复用都兼容。最后可以测一下ADC内部温度传感器或者读取芯片唯一ID进一步确认模拟外设和内部资源是否正常。如果你打算做IAP升级还要写一段通过串口接收bin文件写入Flash的测试代码确认Flash写操作稳定。做完这四步一颗芯片的基础健康度基本就有底了。4. 实际项目移植实录从STM32F103到MH32F103A4.1 移植前的资源盘点把老项目从STM32F103迁移到MH32F103A之前我习惯先做一次完整的资源盘点避免中途才发现某些外设不被支持或者Flash和RAM不够用。第一步统计原工程经过编译后占用的Flash和RAM。在Keil编译后的Build Output窗口能看到Program Size包括Code、RO-data、RW-data、ZI-data。Code加RO-data是Flash占用RW-data加ZI-data是RAM占用。把这两个值和MH32F103A对应型号的容量做对比留出至少20%余量因为后续可能要加功能或者做OTA。第二步列出原工程用到的所有外设包括GPIO、USART、TIM、I2C、SPI、ADC、DMA、USB、CAN等。对照MH32F103A的数据手册和外设列表确认这些都支持。绝大多数情况下兼容芯片会完整保留STM32F103的外设集合甚至可能多出一些功能但还是要逐个确认。第三步检查代码中是否有特定于STM32F103的寄存器或魔法地址比如UID地址、Flash大小寄存器、内部温度传感器校准值地址。这类地址在不同厂商芯片上最容易出现差异最好在代码里用宏隔离起来方便后续适配。我在移植前还会检查一下有没有用到外部中断EXTI的特定触发方式和唤醒功能因为这类功能与NVIC的耦合比较深兼容芯片即使硬件支持中断路由也可能有细微区别。稳妥起见先用最小测试程序把EXTI跑通再迁移整个工程。4.2 一步一步完成替换与验证我当时做的项目是一个RBT6的工业控制板功能包括USART1接上位机跑Modbus RTUTIM3做三路PWM输出控制电机GPIOB读取限位开关ADC1采集电位器反馈。整体逻辑不复杂但通信和实时性都有要求。替换步骤大概是这样的。硬件上先把PCB上的STM32F103RBT6拆下来换上MH32F103A。这里注意先看丝印方向LQFP64封装的1脚一般在左上角有圆点标记。焊好后先用万用表量一下VDD和GND有没有短路再上电测各引脚的电源电压确认无误后再接下载器。最好在第一次上电时用电流表串在电源输入端观察电流是否在正常范围。STM32F103RBT6空载程序运行时电流大概在20到50mA如果新芯片一上电就超过100mA基本说明焊接短路或者芯片有问题。软件上我没有直接拿整个工程编译而是先创建了一个最简单的点灯工程目标芯片选MH32F103A对应型号编译下载确认SWD通信和芯片工作正常。这一步通过后再把原工程的外设初始化代码分模块搬过来每搬一个模块就编译烧录测试一次重点观察串口输出和外设行为。整个验证过程花了两天。第一天上手熟悉环境和移植基本外设第二天跑完整功能和长时间稳定性测试。最终程序在MH32F103A上连续运行72小时Modbus通信没有出现过一次CRC错误PWM输出频率和占空比的实测值与STM32F103几乎一致。这个结果让我对这颗芯片有了信心之后才敢在计划量产的产品里使用。4.3 功耗、时序和误差实测感受除了基本功能量产品还关心芯片的功耗和时序表现。我在MH32F103A上做了几项实测。第一项是GPIO翻转速率测试。在PB1上做一个GPIO翻转循环用示波器量取翻转频率对比STM32F103在相同代码下的翻转频率。实测下来MH32F103A在GPIO翻转速率上与STM32F103基本一致差异在误差范围内这说明GPIO外设的总线时钟配置兼容度很高。第二项是串口波特率误差。用8MHz外部晶振USART配置成115200用示波器抓取TX引脚的波形测量一帧数据的位宽。结果和预期值偏差很小长时间通信也没有漂移。这说明内部PLL和USART分频器的行为与STM32F103一致。第三项是待机电流。把芯片进入Stop模式后测量电流读取的是几个毫安的级别比STM32F103数据手册的典型值略高一点点但这个差异可能是单片样品或者测量环境造成不能直接下结论。如果产品对功耗极其敏感建议多测几个批次并且对比数据手册的电气参数表。时序方面我特别测试了外部中断响应时间。用一个GPIO输入跳变触发EXTI在中断服务程序里翻转另一个GPIO用示波器双通道记录从输入跳变到输出翻转的时间差。实测结果与STM32F103没有明显差别都能达到微秒级别的响应。对大部分工业控制场景来说这个性能完全够用。不过说实话这些测试只能证明我这颗样品的基本素质不能代表所有批次。所以我一直强调国产替代芯片一定要做“批次回归”每批来料都抽测基本功能才能避免后续批量问题。5. 常见问题排查与避坑清单5.1 下载失败找不到目标芯片怎么办软件移植过程中最打击人的问题就是下载失败。Keil里报错“No STM32 Target Found”或者“Error: Flash Download failed - Cortex-M3”这类信息我先按下面几步排查。第一步检查SWD接线。SWDIO、SWCLK、GND三根线必须连通下载器的3.3V和板子供电如果是分开的一定要共地否则信号无法形成回路。很多新手把下载器插上但没共地连接就时好时坏。第二步检查复位引脚。MH32F103A的NRST如果被外部电路强制拉低芯片会一直处于复位状态SWD自然连不上。用万用表量NRST电压正常应该接近3.3V。如果板上有外部看门狗也可能在复位期间干扰下载这种情况下可以先断开看门狗供电再下载。第三步确认芯片没有进入低功耗模式。如果原程序运行后把芯片切到了Stop或Standby模式SWD连接可能失败。解决办法是按住板子上的复位按键在Keil里点击下载同时松开复位让芯片在上电早期被调试器抓住。Keil里还有“Connect under Reset”选项如果下载器把NRST引脚也连到了芯片勾上这个选项能大大提高成功率。第四步检查SWD引脚是否被程序复用。如果原工程把PA13或PA14配置成了普通GPIO程序跑起来后调试接口就被关闭了。此时可以用串口ISP方式把BOOT0拉高再上电通过串口擦除整个Flash。MH32F103A如果支持ISP操作方法和STM32F103一样用FlyMcu这类工具选择串口波特率先低一点比如57600擦除后重新下载。5.2 时钟不对、串口乱码、Flash读写异常程序能烧进去但运行不正常问题多半出在时钟或者Flash配置上。串口乱码是最常见的现象。先看PC端串口助手接收到的数据是不是有规律的乱码比如每隔一段时间出现一两个错误字符。这种情况多半是波特率不对而波特率不对又多半是因为HSE没起振芯片自动切换到了HSI 8MHz但程序里PLL配置还是按8MHz外部晶振来算的导致系统时钟偏了。解决办法是先检查外部晶振的负载电容再用逻辑分析仪或示波器量一下MCO引脚输出的系统时钟频率确认时钟树是否正常。还有一种是电源纹波导致的串口乱码。芯片工作电流动态变化大电源没做好去耦地线上出现毛刺串口信号就会受影响。现象是示波器上看TX波形有明显振铃和毛刺。解决办法是检查VDD的100nF电容是否都贴上了VDDA和VREF的滤波是否到位LDO的输出电容是否够大。Flash读写异常的表现比较多比如程序下载后校验失败运行时写入的参数掉电丢失或者IAP升级时擦除失败。遇到这类问题先确认Keil里选的是MH32F103A对应的Flash算法不要沿用STM32的FLM其次确认程序里对Flash操作时的电压范围和时间参数是否与数据手册一致。还有一个容易忽略的点如果你开启了读保护RDP再去用调试器读Flash数据可能会被拒绝。国产芯片读保护的等级划分和解除方式可能和ST不同务必查手册不要拿ST的操作方法硬套。5.3 与GD32、APM32等其他国产替代型号横向对比做国产替代选型时肯定会在几个品牌之间犹豫。我也对比过GD32F103、APM32F103这类流行型号简单说下个人感受。GD32F103是国内较早打出“兼容替代”旗号的系列软件上可以跑STM32的代码但GD32F103的内核最高主频能到108MHz高于STM32F103的72MHz如果你沿用ST的标准库代码默认是72MHz不会出问题但如果你想把主频拉高就要特别注意Flash的零等待配置。GD32的USART、SPI等外设寄存器大体兼容但某些细节比如I2C的时序参数和仲裁逻辑在实际项目里可能需要动代码。APM32F103我了解到的口碑也不错官方提供了比较完整的移植指南兼容度很高很多客户直接替换成功。它和MH32F103A的思路类似都是把“少改代码”作为卖点所以如果你最终在APM32和MH32F103A之间犹豫最好的办法是拿一块评估板跑一遍自己的核心代码看编译报错数量和实际运行的稳定性用数据说话。MH32F103A相对我个人使用感受的优势是型号对标直接CCT6、RCT6、RBT6都有对应版本在不改PCB和代码的前提下就能完成替代而且基础外设的寄存器兼容度做得比较到位。当然它也还有需要验证的地方比如更多批次的稳定性、长期可靠性和供货持续性这些都需要时间检验。选型建议上我给三个标准第一看你的代码量如果项目复杂、外设用得多优先选兼容文档详尽、能提供FAE支持的型号第二看你的供应链需求如果只做小批量随便选都行如果大批量一定要和原厂签订供货协议第三看你的时间成本不要为了“体验国产芯片”而做迁移而是要有明确的产品驱动。5.4 移植前后必做的测试清单和避坑心得最后整理一份移植前后必做的测试清单这部分算是拿真金白银换来的经验。硬件方面1. 量VDD对地阻抗排除焊接短路2. 上电测各路电源电压纹波3. 用最小点灯程序确认芯片工作4. 用示波器测外部晶振起振波形5. 检查NRST电压6. 测试SWD在复位下连接能力7. 长时间老化运行观察温升。软件方面1. 编译后检查Flash和RAM占用2. 逐个外设做功能测试不要一次迁移整个工程3. 测试所有中断路径量测响应时间4. 测试串口收发大文件确认波特率精度5. 做掉电保存测试验证Flash写入稳定性6. 做看门狗复位测试7. 最后整体跑一版完整固件至少连续运行48小时以上。避坑心得概括成一句话兼容性不是靠宣传页判断的而是靠测试用例量出来的。每换一个芯片品牌甚至一个批次都把自己当成第一次用这颗芯片的人老老实实走一遍全流程才能避免在量产现场暴雷。我用MH32F103A这段时间最深的感觉是国产替代已经从“能不能用”进入到了“好不好用”的阶段。它的出现让更多人有了选择权不再被单一供货绑死。但选择权也意味着责任作为工程师我们要做的不是盲目替换而是用完整的测试流程确认每一颗芯片都值得被信任。如果你也想把手头的STM32F103项目切换到国产方案可以先从一颗加上点灯和串口的测试板开始一步步验证跑通了再做批量替换。这个思路适用于任何兼容芯片也适用于任何一个即将启航的新项目。
返回列表