新闻详情

新闻详情

首页 / 资讯中心 / 详情

STM32F103国产化替换实战:基于GC32F103的GPS定位器移植与调试

发布时间:2026/9/29 2:55:33来源:尧图网络
STM32F103国产化替换实战:基于GC32F103的GPS定位器移植与调试
这段时间一直在折腾一个车载GPS定位终端客户提了个很实际的要求板子上的STM32F103必须换成国产32位MCU。做硬件的朋友都懂这种“替换”要求听起来不复杂真动起手来全是细节。我们把目标平台定在GPS定位器上基于国芯思辰这颗国产MCU做了一轮完整的替代验证从选型评估、硬件改版到固件移植、整机联调踩了不少坑。这篇文章就把整个替换过程、技术要点和现场实录整理出来给准备做STM32F103替换或者正在开发GPS定位器硬件的朋友一个能直接参考的路线图。1. 为什么GPS平台都爱用STM32F103替换前先摸清家底1.1 GPS终端的活儿并不轻松一个“小钢炮”MCU的职责清单先看看GPS平台在MCU身上到底要扛多少事。以我们这款车载定位终端为例主控芯片的日常工作有通过UART接收GPS模块持续输出的NMEA 0183数据流解析出经纬度、速度、航向、UTC时间控制4G模组把位置信息定期上报到云平台偶尔还要走AT指令通道采集汽车电瓶电压、环境温度温度传感器常用MLX90614这种红外测温芯片走I2C接口检测ACC点火信号根据车辆状态在正常模式和低功耗模式之间切换把一些配置参数存在Flash或外部EEPROM里掉电不能丢利用GPS模块的PPS秒脉冲做时钟校准即使上了4G也要保证本地时间尽量准。这些活加起来对主控的性能要求并不极端但外设要够用、稳定性要好、开发效率要高。STM32F103用的是ARM Cortex-M3内核主频最高72MHzFlash和RAM的搭配方式灵活串口、SPI、I2C、ADC、定时器一应俱全。更关键的是这颗芯片的资料多到可以用“泛滥”来形容中文参考手册、标准库V3.5.0工程模板、各种外设例程网上一搜一大把。哪怕是个刚入行的工程师拿着一块最小系统板也能在两周内把GPS解析跑通这种成熟度让STM32F103成了很多GPS定位器方案默认的“街机”。GPS终端还有一个行业特点它经常在弱信号、温度变化剧烈的环境里工作。放在挡风玻璃下面的设备夏天暴晒能到70多度冬天又可能到零下二三十度即便不算车规级至少也得是工业级。STM32F103经过这么多年的量产验证稳定可靠是大家敢直接用的底气。但正因为大家都在用一旦供应链要求国产化整个方案就必须重走一遍选型和测试不能简单“吹掉旧片换新片”。1.2 替换不是“换芯片”这么简单评估清单先行在动PCB之前我把替换评估拆成了五个维度引脚兼容性、内核与外设差异、供电和时钟、Flash/RAM容量、工具链生态。逐项确认完再决定具体选哪颗国产芯片。引脚兼容性是最优先看的。如果新芯片和STM32F103引脚完全兼容原有PCB布局可以不推倒重来硬件改动成本直接降一半。我们最后选的是国芯思辰的GC32F103CBT6这颗料管脚定义和STM32F103C8T6/CBT6基本一致不用改封装和布局。同为Cortex-M3内核中断向量表、调试接口也类似这意味着原有的标准库工程不用推翻重写只需要换启动文件和Device头文件再逐个核对寄存器差异。否则如果选了一颗内核完全不同或者外设映射差异很大的芯片那基本等于重新开发一个产品评估阶段就要叫停。供电和时钟方面STM32F103是3.3V系统外部晶振用8MHzPLL倍频到72MHz国产替代芯片也大多照这个套路来但寄存器定义可能会有细微差别。Flash和RAM容量更不用说原项目用的C8T6是64KB Flash、20KB RAMGC32F103CBT6给到了128KB Flash、20KB RAM编代码时不用太抠空间。工具链上J-Link和ST-Link都能通过SWD调试标准库代码基本兼容整体迁移风险完全可控。下表是我当时记录的选型对比具体参数以各芯片官方手册为准这里只列项目相关的重点项对比项STM32F103C8T6GC32F103CBT6内核Cortex-M3 72MHzCortex-M3 72MHzFlash64KB128KBSRAM20KB20KB硬件UART3个3个12位ADC通道10个16个GPIO数量37个37个工作温度范围-40℃ ~ 85℃-40℃ ~ 85℃这块表的价值在于把“能不能换”变成了“有哪些地方要单独确认”。后面所有软件适配工作其实就是围绕这张表里的差异项逐个击破。2. GPS平台硬件替换设计核心细节与实操要点2.1 最小系统电路三件事做好了板子才可能“一次点亮”最小系统电路是替换工作的第一条护城河。很多人拿到国产MCU后直接把PCB上的STM32F103吹掉把新片焊上去上电发现不跑回头就骂芯片不行。实际上大多数情况是外围电路没有按新芯片的要求重新核对最小系统的三个关键点供电、时钟、复位有一个不对整块板子就是不工作。供电部分MCU用3.3V供电每个VDD引脚旁边必须放100nF去耦电容电源入口处再放一个10µF左右的钽电容或陶瓷电容。GPS模块如果和MCU共用同一路3.3V还要注意模块冷启动时的瞬间电流NEO-M8N这类模块虽然正常工作电流只有几十毫安但天线馈电和首次搜星时会产生电流尖峰电源如果撑不住MCU会跟着复位或者串口出现偶发乱码。时钟部分是GPS平台最容易埋雷的地方。MCU的外部8MHz无源晶振需要配两个负载电容容量一般选15pF到20pF具体要看晶振手册并且晶振下面尽量不要走其他信号线。为什么这么讲究因为GPS串口波特率9600就是靠这个时钟源算出来的如果晶振起振不稳或者负载电容配错串口会偶发误码GPS数据解析就跟着抽风。更关键的是很多国产芯片内部RC精度一般做普通跑马灯无所谓但接GPS模块时千万别偷懒省略外部晶振。复位电路也不能照搬老经验。NRST引脚一般用10kΩ电阻上拉到3.3V再并联一个100nF电容到地。但是不同芯片的NRST内部结构有差异有些芯片的上电复位时间比ST长如果配合外部看门狗要确认复位信号极性和时序。BOOT0和BOOT1引脚必须明确拉低从Flash启动绝对不能悬空。我遇到过板卡在量产阶段偶尔启动失败查了半天就是BOOT0走线太长被干扰电平偶发拉高MCU直接进了串口启动模式程序当然跑不起来。2.2 GPS模块接线与天线走线最容易翻车的地方GPS模块我们用的是经典的NEO-M8N默认9600波特率输出NMEA数据。模块和MCU的硬件连接看起来很简单但每一步都有讲究。VCC接3.3VGND共地TXD接MCU的USART1_RX引脚RXD接MCU的USART1_TX引脚。这里要特别提醒新手模块的TXD是输出MCU是接收交叉连接千万别接反。PPS秒脉冲输出建议接到MCU的定时器输入捕获引脚后面做时间校准和休眠唤醒策略会用到。NEO-M8N还有一个V_BCKP备份电源引脚可以接一颗小纽扣电池或者法拉电容用来保持星历和RTC数据这样下次上电时热启动或温启动时间能从几十秒压缩到几秒。天线走线是GPS项目里的重灾区。如果板上直接贴无源陶瓷天线天线馈线必须按50Ω阻抗控制来设计参考地层要保持完整。我第一次画GPS板时犯过一个典型错误天线正下方铺了好几根电源走线结果搜星数量从12颗掉到6颗定位误差还忽大忽小。后来把天线周围1cm区域做了净空底层对应位置也掏空只放了一圈接地过孔做隔离问题才彻底解决。天线馈线要尽量短远离MCU晶振、4G天线、DCDC电感这些干扰源。GPS信号到板端往往已经是-130dBm量级非常微弱数字信号的一点噪声耦合进去可能直接把信噪比拖下好几个dB。如果板子空间确实紧张至少把天线放在板边保证净空区这是底线。另外在MCU接收引脚上串一个100Ω左右的小电阻能有效抑制模块TXD线上的振铃实测对降低串口误码率有明显帮助。2.3 电源树与低功耗不能一上来就上大锤车载GPS定位器的供电环境是12V或24V电瓶板子上要先做一级DCDC降压到5V再用LDO降到3.3V给MCU和GPS模块。DCDC选型时除了效率还要看输出纹波。GPS模块对电源纹波比MCU敏感得多纹波太大会直接影响低噪声放大器的工作点导致接收灵敏度下降。如果板子上实在避不开DCDC噪声可以考虑给GPS模块单独加一级LC滤波。低功耗方面STM32F103的待机模式能做到几微安级别国产替代芯片也基本都有对应模式。但GPS定位器的功耗瓶颈通常不在MCU本身而是GPS模块和4G模组。我们的策略是休眠前用MCU的一个GPIO控制MOS管或负载开关直接切断GPS模块和4G模组的电源只保留MCU的RTC和外部唤醒源整机待机电流才能压到几十微安。唤醒方式选用外部中断比如ACC点火信号上升沿、RTC定时闹钟按客户需求灵活配置。还要注意RTC时钟源。国产MCU的RTC可以用内部低速RC也可以用外部32.768kHz晶振。如果系统有GPS的PPS秒脉冲做校准内部RC的误差可以容忍如果没有PPS我建议老老实实把32.768kHz晶振加上否则休眠唤醒的时间会越偏越多上报数据的时间戳会乱掉。2.4 打样时的兼容设计给自己留退路这块经验是踩过坑之后才养成的。强烈建议大家在做PCB兼容设计时把STM32F103和国产MCU做成同一个封装焊盘板上同时预留两套芯片位置通过0Ω电阻选焊决定实际用哪一颗。这样做的好处非常明显如果国产芯片在调试阶段暴露了严重问题或者供应链又出现新变化硬件团队可以快速切回ST版本不用重新画板如果国产芯片量产稳定那就继续用国产切换成本只是一次贴片调整。软件层面也要提前留接口。工程里定义一个芯片类型宏初始化时按宏走不同的寄存器配置分支。只要把启动文件、Device头文件和芯片底层库换掉上层的GPS解析、4G上报、电源管理代码全部复用。我见过不少团队把代码写到和具体芯片寄存器强绑定的程度一换芯片就重写这就是前期规划没做到位。做替换项目的正确姿势是第一天就按“双芯片兼容”的思路来设计。3. 固件移植实战从STM32标准库到国产SDK3.1 工程模板搭建启动文件和时钟树是第一道关软件移植我们直接基于STM32标准库V3.5.0工程模板来改整体思路是尽量保留原工程结构只替换和芯片强相关的部分。首先拷贝一个干净的标准库模板保留CMSIS底层文件和标准库核心代码。然后把STM32F103的启动文件、system_stm32f10x.c、stm32f10x.h这些Device文件全部换成目标芯片厂商提供的版本。国芯思辰这颗芯片的固件库风格和ST非常接近GPIO、USART、RCC这几个核心外设的API可以直接编译通过只有少量寄存器位定义需要按手册调整。时钟树初始化必须逐行读不能惯性照搬ST代码。STM32F103在72MHz主频下Flash等待周期要配2个等待周期有些国产芯片虽然也是72MHz但Flash加速单元做法不一样等待周期配错的话程序会随机死机而且问题极难定位。上电后第一件事就是把SystemInit里的HSE启动、PLL倍频、Flash等待周期、总线分频全部确认一遍。下面这段简化代码展示了核心逻辑不同芯片的位定义有差异实际使用时必须翻对应手册void SystemInit(void) { // 启用外部高速晶振HSE RCC-CR | RCC_CR_HSEON; while ((RCC-CR RCC_CR_HSERDY) 0); // 配置PLL外部8MHz9倍频到72MHz RCC-CFGR ~RCC_CFGR_PLLMULL; RCC-CFGR | RCC_CFGR_PLLMULL9; RCC-CFGR | RCC_CFGR_PLLSRC_HSE; // 打开PLL并等待锁定 RCC-CR | RCC_CR_PLLON; while ((RCC-CR RCC_CR_PLLRDY) 0); // 切换系统时钟到PLL RCC-CFGR | RCC_CFGR_SW_PLL; while ((RCC-CFGR RCC_CFGR_SWS) ! RCC_CFGR_SWS_PLL); }还有两个细节容易被忽略。一是启动文件里的堆栈大小如果解析GPS字符串时用了大量局部变量建议把Stack_Size从默认的0x400改成0x800避免深层次函数调用时栈溢出。二是中断向量表国产芯片可能比ST多出几个外设中断号用不到没关系但不要随便乱配否则会跳进DefaultHandler看起来像程序跑飞。3.2 外设驱动逐项迁移UART、软件串口和模拟I2CGPS主串口用USART19600波特率8位数据位1位停止位无校验标准库初始化代码如下基本可以直接编译void GPS_UART_Init(void) { GPIO_InitTypeDef gpio; USART_InitTypeDef usart; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); // TX: PA9 复用推挽输出 gpio.GPIO_Pin GPIO_Pin_9; gpio.GPIO_Mode GPIO_Mode_AF_PP; gpio.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, gpio); // RX: PA10 浮空输入 gpio.GPIO_Pin GPIO_Pin_10; gpio.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, gpio); usart.USART_BaudRate 9600; usart.USART_WordLength USART_WordLength_8b; usart.USART_StopBits USART_StopBits_1; usart.USART_Parity USART_Parity_No; usart.USART_HardwareFlowControl USART_HardwareFlowControl_None; usart.USART_Mode USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, usart); USART_Cmd(USART1, ENABLE); }如果UART数量不够用一个常见操作是用定时器加外部中断做软件串口。我试过用STM32F103定时器实现软件串口来扩展一路调试输出在国产芯片上也跑通了。但软件串口有个致命弱点数据持续不断时容易丢位。GPS模块的NMEA数据是连续往外吐的而且每条语句之间间隔固定如果软件串口接收中断处理不过来就会产生解析乱码。所以我的建议是GPS模块必须用硬件UART软件串口只用来打印日志如果必须用软件串口接GPS波特率不要超过9600并且把接收引脚的外部中断优先级调到最高。I2C部分也一样GPS平台上接MLX90614红外温度传感器或EEPROM时我从来不推荐用硬件I2C。各家芯片的硬件I2C从时序到错误标志都有一堆差异调试起来非常头疼。直接拿GPIO软件模拟开漏输出加外部上拉电阻时钟自己控制稳定可靠匹配MLX90614和EEPROM这种低速设备绰绰有余。还有一个值得单独说说的点ADC内部温度采集。很多人问STM32F103内部温度采集准不准我的回答是做个温度保护够用当测量工具会失望。国产替代芯片的内部温度传感器同样别指望直接拿来就用换算公式里的偏置电压和斜率很可能与ST不一样。我们换芯片后实测同样的代码算出的内部温度比环境温度表高了十几度后来用已知温度源校准了一次才勉强能用。3.3 中断、HardFault与状态机稳定性是硬指标GPS定位器挂在车上24小时运行程序一旦死机整台设备就等于失联。所以在固件移植时我第一时间把HardFault监控加进去。HardFault_Handler里不能只放一个while(1)至少要抓出故障现场void HardFault_Handler(void) { volatile uint32_t *stack (uint32_t *)__get_MSP(); volatile uint32_t pc stack[6]; volatile uint32_t lr stack[5]; volatile uint32_t psr stack[7]; fault_pc pc; fault_lr lr; fault_psr psr; // 亮故障指示灯 GPIO_SetBits(GPIOC, GPIO_Pin_13); while (1); }这里有个细节需要注意__get_MSP()拿到的是主栈指针如果程序运行在线程模式且使用的是进程栈PSP直接读到的就不是当前栈。要准确判断需要先读CONTROL寄存器。这个坑我们也是在现场反复测试才注意到。抓到PC值后配合编译器生成的map文件和AXF文件就能精确定位是哪个C文件哪一行出了问题。如果怕现场无法串口打印可以先把故障信息写到Flash的固定地址下次上电时再上报到平台。程序逻辑架构上GPS数据解析非常适合用状态机。NMEA字符串是一帧一帧连续到达的如果在串口中断里做复杂解析容易漏字符。我的做法是串口中断只负责把收到的字符塞进环形缓冲区主循环里用一个状态机逐帧处理typedef enum { GPS_WAIT_DOLLAR, // 等待帧头 $ GPS_READ_HEADER, // 读取语句类型 GPS_READ_BODY, // 读取数据字段 GPS_READ_CHECK, // 读取校验和 GPS_DONE // 一帧完成 } GpsParseState;状态机的优势是逻辑清晰、不会在某一条脏数据上卡死。实际运行下来即使GPS信号很差、NMEA语句残缺主循环也能自动回到等待帧头的状态不会影响后续数据解析。4. GPS数据解析与整机联调把“定位准”落到实处4.1 NMEA 0183解析从$GPRMC里提取你真正要的信息GPS模块上电后会同时输出多类语句常见的有$GPRMC、$GPGGA、$GPVTG、$GPGSA等。定位器最关心的通常是$GPRMC因为它包含有效状态、UTC时间、纬度、经度、速度、航向、日期。NMEA帧的通用格式是“$GPXXX字段1字段2……校验和”校验和是$和之间所有字符的按位异或值用十六进制表示。解析时校验和必须做不做校验的程序碰到空中干扰或串口误码就会产生假定位点。校验代码很简单static int nmea_check(const char *buf) { unsigned char xor 0; const char *p buf 1; // 跳过 $ while (*p ! *) { xor ^ *p; } int check; sscanf(p 1, %2x, check); return (xor check) ? 0 : -1; }真正麻烦的是纬度和经度的格式转换。NMEA 0183里的经纬度是“度分”格式比如北纬4807.038是指48度07.038分要转成小数度需要这样算度取整数部分分除以60加到度上。转换公式不复杂但非常容易踩32位有符号整数的坑。我之所以单独把“32位有符号整数”拎出来说是因为这次联调时同事就翻过一次车。他定义了一个int32_t变量存经度直接用整数部分乘以1000000的方式放大结果测试到东经120度左右数据就开始不对。算一下就明白了int32_t最大值约21.47亿如果经纬度用小数度乘以1e7表示180度经度放大后是18亿刚好安全但如果用放大1e8的方案直接就溢出了。更别说中间运算时如果错误地用了int16_t数据到正负几十度就会崩。实际项目中我习惯用一个int32_t变量保存0.1e-7度的定点值并提前判断角度范围非法数据直接丢弃int32_t lon_e7 (int32_t)(longitude_deg * 10000000.0f); if (longitude_deg 180.0f || longitude_deg -180.0f) { // 丢弃无效数据 }还有一个经验只解析$GPRMC不够。RMC语句里有状态位A表示有效V表示无效但如果卫星刚刚定位成功RMC状态偶尔会滞后半拍。可靠性要求高的项目建议再交叉校验$GPGGA里的定位质量字段两个都有效时才认为定位可信。4.2 实测中的定位漂移与“天线玄学”整机上路实测时定位漂移几乎是必然遇到的。我们遇到最典型的场景是车辆在高架桥下行驶定位点开始乱跳在地图上画出来就是一堆无序的散点。这主要归因于卫星信号遮挡和多径效应信号经过高架桥面和旁边建筑物反射后到达接收机的路径变长测距出现偏差定位自然不稳。软件滤波可以做但要分清主次。我的处理顺序是首先检查原始NMEA里的信噪比和卫星数量。如果可见卫星低于6颗或者信噪比普遍低于30dBHz优先怀疑天线和布线问题而不是调整滤波参数滤波策略上加简单的速度门限和方向变化率限制相邻两个定位点计算出来的速度超过合理上限或者出现90度以上的折返跳变直接把后一个点丢弃更平滑的轨迹可以用滑动平均或卡尔曼滤波但对MCU算力有要求GPS定位器这种平台用滑动平均就够了。GPS误差的物理来源也要心里有数卫星时钟误差、星历误差、电离层和对流层延迟、多径效应、接收机噪声、卫星空间几何分布都会影响最终精度。单点定位的精度通常在2到5米如果是高架下或者高楼密集区误差扩大到十几米是正常的。客户如果坚持要厘米级精度那就不是换MCU能解决的得上RTK方案成本完全不一样。PPS秒脉冲在联调时的作用很大。把PPS接到MCU的输入捕获引脚主控在捕获中断里记录时间戳过一段时间对比GPS给出的UTC时间就能算出MCU本地RTC的走时偏差。国产MCU的定时器输入捕获配置和ST差不多但要注意中断标志位的定义可能有差异跑一遍例程确认下就好。4.3 整机联调中的其他坑波特率、启动时间、烧录有几个问题在实验室里很难暴露一上路就现原形。第一个是串口波特率误差。GPS模块通常用TCXO做时钟频率非常准MCU如果用了内部RC而不接外部晶振经过长时间运行、温度变化后串口偶发乱码的概率会明显上升。解决办法没有捷径就是用外部晶振并且按8MHz到72MHz的标准PLL配置来跑不要用内部RC去省那几颗物料。第二个是GPS模块冷启动时间。NEO-M8N这类模块第一次上电或者彻底断电后冷启动可能要30秒甚至更久才输出有效定位。很多测试工程师一上电看不到数据就报bug其实模块正在搜星。合理的设计是给模块的V_BCKP引脚持续供电让星历和RTC不丢失这样下次上电热启动能缩短到几秒。第三个是SWD烧录失败。调试时如果把SWDIO或SWCLK引脚误配置成普通GPIO烧录器就连不上芯片。解决方法是把BOOT0拉高让MCU进入系统存储器模式再连接烧录器恢复或者按住复位引脚在烧录器开始连接时释放。这个操作对国产MCU同样适用只是每个厂家的固件模式细节略有差异。5. 常见问题速查表国产化替换过程中我踩过的坑5.1 问题与排查速查表把这段时间遇到的故障现象、原因和处理办法整理成一张表方便现场快速定位故障现象可能原因排查与处理办法上电后完全不跑供电异常、晶振没起振、BOOT0悬浮先查3.3V再看NRST用示波器确认晶振波形BOOT0明确拉低程序随机死机Flash等待周期配置错、电源纹波大检查PLL与Flash等待周期DCDC输出增加LC滤波串口输出乱码波特率不准、晶振负载电容不匹配使用外部晶振调整负载电容到晶振手册要求GPS模块无数据TXD/RXD接反、波特率不对、模块供电不足确认交叉接线用示波器抓模块TXD波形搜星数量明显偏少天线净空不足、馈线过长、天线下方有走线调整布局天线周围净空底层掏空并加过孔屏蔽定位点漂移严重高架遮挡、多径效应、DOP值过高增加速度门限与异常点丢弃结合GGA和RMC双重校验休眠电流居高不下GPS/4G模组未断电、GPIO上拉漏电用MOS管或负载开关切断模组电源检查休眠态GPIO配置HardFault进入死循环数组越界、外设配置冲突、中断优先级设置不当抓取PC和LR配合map文件定位优先排查缓冲区访问这张表不一定覆盖所有项目但大多数替换场景遇到的问题都逃不出这些方向。GPS定位器长期挂在恶劣环境下建议把表格里每一项都过一遍测试别等客户反馈问题再补救。5.2 几条切实可行的“国产化替代”建议如果让我再做一个类似的STM32F103替换项目我会从第一天就坚持下面这四条原则第一选型时不要只盯引脚兼容还要确认Flash页大小、ADC采样保持时间、复位时序、启动文件差异等细节。引脚兼容是省事的前提但真正决定稳定性的往往是数据手册角落里那些小参数。第二PCB预留双芯片兼容焊盘。这个投入很小却能在项目出问题时给你留一条快速回退的路。批量切换成本只是一次贴片调整相比重新画板、重新验证省下的时间和人工成本非常可观。第三主动联系芯片厂家的FAE并且一定要拿到勘误表。我们这次就看到一份勘误表里提到某个定时器输入捕获寄存器的初始值问题如果不知道这个点遇到后可能排查一周都找不出原因。第四软件风格上优先选标准库或寄存器操作别一上来就上HAL。GPS平台的业务逻辑固定、外设不复杂寄存器方式更直接出了问题也好查。HAL在不同芯片之间的“兼容性”往往是表面现象底层一堆宏开关反而增加移植工作量。做替换项目还要记住测试不能只做常温功能测试。车载GPS定位器是24小时在线设备温度变化、电瓶电压波动、GPS信号丢失后再恢复这些场景都要反复测。我建议至少跑一轮72小时连续上电拷机重点观察RTC是否走偏、看门狗是否误复位、4G模块是否异常掉线。最后再分享一个经验在硬件设计阶段就把MCU的最小系统、GPS模块接线、天线净空区当成一个整体来做不要等软件调不通了再回头改板子。国产MCU替代STM32F103技术上的门槛已经很低真正考验团队的还是硬件基本功和系统化测试能力。以上这些坑希望各位能绕过去。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

DDR4结构与寻址:从Bank Group到地址映射的完整指南 2026/9/29 4:51:03

DDR4结构与寻址:从Bank Group到地址映射的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DeepSeek通用生产力指南:从提示词到API与本地部署 2026/9/29 4:51:03

DeepSeek通用生产力指南:从提示词到API与本地部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
固定翼飞控调优:重心、舵面、传感器校准与首飞验证 2026/9/29 4:51:03

固定翼飞控调优:重心、舵面、传感器校准与首飞验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
PyTorch+FinRL量化交易实战:从训练到实盘部署避坑指南 2026/9/29 4:50:57

PyTorch+FinRL量化交易实战:从训练到实盘部署避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Ubuntu SSH Server安装、配置加固与远程连接实战 2026/9/29 4:50:57

Ubuntu SSH Server安装、配置加固与远程连接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
DeepSeek API 实时舆情监控:从数据管道到预警触发实战 2026/9/29 4:50:57

DeepSeek API 实时舆情监控:从数据管道到预警触发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉