尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

基于STM32的智能药盒设计与实现:硬件选型、代码逻辑与仿真验证全解析

发布时间:2026/9/8 7:56:49

资讯中心
01
ARTICLE

基于STM32的智能药盒设计与实现:硬件选型、代码逻辑与仿真验证全解析

基于STM32的智能药盒设计与实现:硬件选型、代码逻辑与仿真验证全解析
先说为什么做这个项目。家里老人上了年纪之后药越吃越多早中晚剂量还不一样光靠口头提醒根本不牢靠漏吃一顿、重复吃一次轻则影响药效重则可能出问题。市面上成品智能药盒也有不少但基本是封闭系统没法按家里的实际情况改用药计划有些提示音还不够大。与其纠结买哪款不如直接动手做一套开源的方案STM32做主控按键设定服药计划到点蜂鸣器响、舵机出药OLED屏显示时间和用药信息整套工程包括代码、原理图、仿真全部分享出来。这篇文章我打算把硬件选型、原理图设计、代码逻辑、仿真验证和踩坑记录一次性讲透适合准备毕设或课设的电子类学生也适合想给家人做一套真正能用的小工具的DIY爱好者。先说一下参考这个开源项目时你要有的心理预期。它不是一个“刷个固件就能用”的成品而是一套让你能理解完整嵌入式开发流程的学习型工程。代码基于标准外设库编写逻辑上不依赖RTOS纯裸机状态机就能跑非常适合新手读懂每一行代码背后的用途原理图我用立创EDA和Altium Designer各出一版方便不同工具习惯的人直接拿去打样仿真基于Proteus搭建即使手头还没买芯片和模块也能先把核心的定时提醒、按键输入、显示逻辑跑通。接下来我按整个项目的开发顺序来讲从需求拆解到最后的排障经验一步一步过。1. 项目整体思路与方案选型1.1 先拆需求别急着画板子很多人拿到这种项目第一反应就是找芯片、找模块然后把线一连就开始写代码。我建议先花半小时把需求写清楚哪怕只是几张便利贴。这套药盒其实只有四件事第一能设定用药时间比如每天早8点、午12点、晚6点每种药在不同时间服用的数量可能还不一样第二到点能明显提醒蜂鸣器响、屏幕亮起来最好还能多次提醒防止老人正好走开没听到第三能让人简单操作按键设定时间、加减药量OLED屏能显示当前日期、时间以及今天的服药情况第四掉电之后时间不能乱需要独立的实时时钟和备用电池。需求拆完之后功能边界就清楚了。整个系统按模块划分主控单元、实时时钟单元、人机交互单元显示按键、提醒单元蜂鸣器指示灯、出药执行单元舵机再加上电源管理。出药结构反而比电路更难机械可靠性决定这玩意儿是真能用还是只能摆在桌上当摆设。所以我建议第一版先把电子逻辑跑通机械结构用简单的旋转式药盘验证后续再慢慢优化。1.2 主控选型为什么是STM32F103C8T6主控我选了STM32F103C8T6这颗芯片在开源项目里可以说是最“熟面孔”的一颗料。72MHz主频、64KB Flash、20KB SRAM片上集成USART、I2C、SPI、多路定时器和ADC对于药盒这种体量完全够用。对比51单片机STM32在计算能力、外设数量和代码组织方式上更接近工业产品开发对比ESP32STM32没有Wi-Fi这些用不上的无线功能功耗和稳定性控制更直接而且CubeMX和标准库的资料铺天盖地出问题搜一搜基本都有答案。另外一个考虑是成本。F103C8T6的LQFP48封装手工焊接不算难价格也稳定几块钱一颗对开源项目来说别人拿到物料清单照着打板不会肉疼。有人问为什么不用F103RCT6或者F407说实话杀鸡不用牛刀C8T6的资源跑裸机状态机加几个外设绰绰余而且市面上“最小系统板模块搭积木”的方案也是按C8T6设计的参考资料多到看不完。如果你后续想加语音播报、加传感器再把Flash需求往上提一档换RCT6也来得及引脚兼容性很好。1.3 外设模块怎么搭各自承担什么职责模块选型围绕“少而稳”的原则。时间模块我用的DS1302三线接口CE、IO、SCLK带备用电池座断电后还能走时实测一个月误差在20秒以内对吃药提醒来说完全够用。这里有个技术点值得说STM32内部也有RTC但掉电后需要VBAT引脚供电还需要外部32.768kHz晶振配置上多一道工序而DS1302是独立的时钟芯片接口简单、代码成熟初学更友好。显示模块用0.96英寸OLEDSSD1306驱动I2C接口4个引脚就能接好显示内容清晰功耗也低。有些人喜欢用LCD1602但1602需要8根或4根数据线接线麻烦亮度也一般在药盒这种小设备上OLED的优势非常明显。提醒部分用有源蜂鸣器PWM控制响度和节奏指示灯用三色LED区分状态。执行机构我第一版用SG90舵机旋转药盘到对应隔间如果你手头有步进电机方案也可以平移核心逻辑就是出药时把机械结构转到目标位置。1.4 软件架构规划裸机状态机不用上RTOS这个系统的实时性要求没那么苛刻没必要一上来就上FreeRTOS。我用一个超级循环加状态机的结构程序长时间停在“待机显示”状态每秒刷新一次时间按键触发状态跳转定时到达进入“响铃提醒”状态提醒结束回到待机。这种结构最大的好处是每一块逻辑都清晰可控出问题能按状态逐个排查而且代码量不大初学者容易完整读懂。我先把软件分成了这几个模块硬件驱动层OLED、DS1302、蜂鸣器、舵机、按键、业务逻辑层定时判断、服药记录、状态机、应用层菜单、显示界面。这样写的好处是后面想移植到别的芯片或者把显示界面做大改只需要改驱动层业务逻辑不用动。2. 硬件设计与原理图解析2.1 最小系统电路别在电源和晶振上省事原理图设计我从最小系统开始。STM32F103C8T6需要3.3V供电我用了AMS1117-3.3把外部5V稳压到3.3V输入输出两端各加一个10uF电解电容和一个0.1uF陶瓷电容去耦。这里踩过一个教训如果蜂鸣器和舵机直接从同一路3.3V取电舵机启动瞬间电流跌落会拉低电压OLED会闪白、单片机甚至直接复位。所以我后来把舵机电源单独从5V取3.3V只给主控和敏感外设电源域分开后系统稳定很多。晶振电路是很多新手抄板时容易忽略的。主晶振用8MHz无源晶振两个20pF负载电容并接到GND启振后系统时钟经过PLL倍频到72MHz。另一个关键的振荡器是DS1302用的32.768kHz晶振它的负载电容一般也是6-12pF具体看芯片手册。这里有个细节32.768kHz晶振布线要尽量靠近DS1302芯片走线短两边负载电容严格对称不然时间误差会大得离谱我实测过走线过长时一天能差好几分钟。复位电路是10k上拉电阻加0.1uF电容到GND按常规接法即可。BOOT0引脚必须下拉到GND确保从Flash启动BOOT1可以悬空或者接GND。最后别忘了把SWD调试接口引出来只需要SWDIO、SWCLK、GND三条线加上一个3.3V电源引脚方便烧录和调试。接插件我用了4Pin的2.54mm排针调试器用ST-Link V2的SWD模式就能连。2.2 STM32F103C8T6引脚分配与接线设计引脚分配是画原理图之前就要想清楚的别上一块画一块。我按功能分了组避免I2C和SPI之间抢引脚同时把PWM输出放到定时器通道上。功能模块引脚说明OLED SDAPB7I2C1数据线软件模拟I2C也可以OLED SCLPB6I2C1时钟线DS1302 CEPA11芯片使能DS1302 IOPA12数据线需要接上拉电阻DS1302 SCLKPA10时钟线蜂鸣器PA8TIM1_CH1PWM控制音量舵机信号PA0TIM2_CH150Hz PWM按键行PB0-PB3矩阵键盘行按键列PB4-PB5矩阵键盘列LED指示灯PA1-PA2红绿双色为什么把舵机放在PA0而不是PA8因为PA0是TIM2_CH1的输出通道可以直接输出50Hz的PWM蜂鸣器用PA8挂到TIM1_CH1这路PWM用来产生多级音量。矩阵键盘占用PB0到PB5六个IO加上PA11、PA12给DS1302加PB6、PB7给OLED整颗芯片的IO还剩不少余量后续扩展语音模块或者Wi-Fi模块都有位置。这里要特别提醒PA13和PA14是SWDIO和SWCLK默认用于调试项目里千万不要把它们复用成普通IO否则烧录口会被锁死。2.3 原理图绘制与PCB布线的几个要点原理图我出了两版一版用立创EDA适合国内同学直接打开就能修改和下单打样另一版用Altium Designer绘制给习惯AD的人参考。文件包里都带完整的原理图PDF和BOM清单照着买料即可。PCB布线上有几个经验值得写出来。第一模拟部分和数字部分尽量分开DS1302的走线远离舵机PWM信号线避免干扰导致时间跳动第二I2C和DS1302的数据线加上拉电阻I2C一般用4.7kDS1302的IO线我实测用10k也可以第三舵机的信号线建议做包地处理我就是在信号线两侧走了GND出药时屏幕纹波明显减少第四电源走线加宽5V和GND我放到1mm以上过电流能力强一些避免板子上出现压降。如果只是做验证用洞洞板飞线也行但晶振附近飞线要短这是唯一一个硬性要求。3. 软件逻辑与代码实现3.1 开发环境搭建与工程目录规划软件部分我用MDK5Keil uVision5作为集成开发环境。新建工程前先装好三样东西MDK5本体、F103系列器件支持包Keil.STM32F1xx_DFP、ST-Link驱动。如果觉得MDK的编辑器不好用可以配合VSCode的Keil Assistant插件或者直接用EIDE代码编辑体验会好很多。工程结构上我把文件分成Hardware、System、User三个文件夹Hardware下放各外设驱动System放延时和中断相关User放主函数和业务逻辑这么分的好处是文件多了也不乱功能定位一目了然。时钟初始化要注意STM32在运行用户代码前要先把系统时钟从内部8MHz切换到外部8MHz晶振再倍频到72MHz。用标准外设库就是调用SystemInit加三个PLL配置寄存器用CubeMX就是图形化选一下时钟树输出的Automatically Generated中间文件虽多但好在不用手敲时钟树。我项目里用的是标准外设库的写法代码量少、结构清晰而且下载后不需要额外装中间层依赖打开就能编。3.2 状态机设计程序为什么不容易“跑飞”整个业务逻辑的核心是一个枚举型状态机。我定义的状态有STATE_IDLE待机显示、STATE_MENU菜单设置、STATE_SET_TIME设置时间、STATE_SET_MED设置药量、STATE_ALARM响铃提醒、STATE_SERVO出药执行。主循环里反复执行状态调度函数每次只做当前状态该做的事。这样写最直观的好处是程序从“显示”切到“提醒”时不会乱因为只有STATE_ALARM这一个地方能触发蜂鸣器和舵机。拿一个典型流程举例系统上电后进入STATE_IDLEOLED显示日期、时间和今日用药计数。每秒钟检查一次DS1302时间当时间到达设置的服药时间点跳到STATE_ALARM蜂鸣器开始响。警报响了30秒后进入STATE_SERVO舵机旋转到对应药槽位置并停留5秒OLED提示“请取药”。确认取药后用药次数写入Flash存储然后跳回STATE_IDLE。这个过程中任何状态都只关心两件事进入时初始化、持续时轮询退出条件。这样以后要加“语音提示”或者“远程通知”只需要新增两个状态和一条转移路径不用动其他逻辑。3.3 定时提醒逻辑从DS1302读时间到触发响铃时间管理的核心在DS1302驱动上。DS1302的数据格式是BCD码读出来之后要转成十进制我封装了两个函数DS1302_GetTime()把时分秒日期星期存到全局结构体里DS1302_SetTime()在菜单设置时写入。主循环里每秒调用一次读时间比较当前时分秒和药物时间表里所有条目是否匹配。匹配条件做精之后提醒次数会是一个需要特别注意的点。如果只有“秒到了”这一条判断程序会每秒钟都触发一次响铃。所以我在结构体里加了lastAlarmDay和lastAlarmMinute两个变量只有日期或者分钟变化了才会再次触发这样一次到点提醒只会响一轮。再讲一个实际场景。假设老人早上要空腹吃的药是8点饭后吃的药是9点半。我的用药时间表是个结构体数组每条记录包括小时、分钟、药槽编号、药粒数量、是否每天重复。按下“设置”键进入菜单后可以翻到“时间设置”修改这些字段。数组长度我放在宏定义里默认支持每天6个时间点早上、中午、晚上三次每次两格药后面的扩展就简单了改宏再重新编译下载即可。3.4 人机交互设计OLED界面与按键防抖OLED我用的是SSD1306驱动芯片软件模拟I2C时序。驱动层核心函数包括OLED_Init()、OLED_Clear()、OLED_ShowString()、OLED_ShowNumber()外加几个中文取模的汉字显示函数。界面设计原则是“一屏只干一件事”待机界面显示大号时间和日期提醒界面显示“服药时间到”和药槽编号设置界面显示当前修改的字段和范围这样老人或者开发者在调试时都能一眼看懂。按键是矩阵键盘扫描原理是行列电平检测。由于按键伴随机械抖动我不用延时消抖这种笨办法而是用状态机消抖检测到低电平后启动一个5ms计时连续两次读数一致才算有效按键。手感和误触问题也要考虑我在待机屏幕长按“OK”键3秒才进入菜单防止老人误操作把设置改掉设置过程中10秒无按键操作会自动保存并退回待机避免菜单卡死。这个交互细节在实际使用中非常重要没有它老人可能不知道按了哪里系统状态就变了。3.5 掉电存储用STM32内部Flash保存设置服药计划要断电不丢我选择把数据存到STM32内部Flash的最后两页里而不是外挂AT24C02。原因很简单F103C8T6自带64KB Flash前62KB放代码最后2KB专门用来存用户设置完全够用省掉一颗芯片和一个I2C地址的额外接线。写入时需要先擦除整个页按页擦除然后再写入注意Flash写入次数有限制大概一万次级别普通药盒一天最多写几次所以寿命完全没问题。为了减少擦写次数我做了一层简单的写入合并只有设置菜单里点“保存”或者在每天服药记录变更时才触发写Flash。内部Flash写入有一个坑必须提醒大家写的时候要关中断否则中断服务函数里的代码执行会影响Flash写时序严重时会导致HardFault。我在实现里用了__disable_irq()包住擦写过程写完后恢复。读Flash就简单了直接用指针读取地址空间即可。这样每次开机启动软件先读Flash恢复到上一次的用药计划不用每次重新设定体验好很多。4. 仿真搭建与验证4.1 为什么第一版先跑仿真很多学生在做嵌入式项目时板子还没回来就开始焦虑担心硬件不可用。我的习惯是先搭仿真把逻辑验证得七八成再等实物板子到了直接烧录调试这样能省至少两三周的返工时间。Proteus里可以放STM32F103C8T6、DS1302、虚拟OLED用LM016L或LCD模型代替、按键和LED跑起来虽然不如实机流畅但足以验证代码里的状态机跳转、时间比较逻辑和按键交互。仿真还有个好处是波形可视化比如舵机PWM用虚拟示波器看占空比不用拿万用表去戳引脚。Proteus版本我建议用8.6以上的版本因为8.6之后对STM32的仿真支持才算比较完整低版本可能找不到F103C8T6的模型。仿真工程里我放好了芯片、晶振、复位、电阻网络和OLED模型打开之后双击芯片加载项目里的HEX文件就可以直接运行。注意Proteus仿真默认不带外部晶振模拟的需要双击芯片把Clock Frequency改成8MHz否则程序跑在内部RC上逻辑可能也能跑但时间戳可能会不准。4.2 仿真模型搭建步骤打开Proteus新建工程在元件库里检索STM32F103C8T6放到底板上。然后按原理图依次添加DS1302、两个按键作为行列键盘的简化替代、一个虚拟终端、一个逻辑探针监测蜂鸣器电平和一个双色LED。如果OLED模型不好找我建议先用一个16x2 LCD替代只验证显示文本内容等实物再用OLED因为SSD1306的I2C时序仿真在Proteus里通常需要额外的插件代码量也会大一些对新手不友好。用LCD替代的方案改动很小驱动接口换成LCD1602的库就行。接着设置电源。给STM32的VDD接5V或3.3VProteus默认是5V但STM32工作电压是2.0-3.6V所以要把电源电压改到3.3V。晶振不用额外放置直接在芯片属性里设好主频。双击芯片导入keil生成的HEX文件路径不要带中文Proteus对中英文路径的处理一直有点神经质。运行仿真后如果代码正常工作LCD会交替显示时间和日期按下按键能进入菜单设定好闹钟时间后到点LED和虚拟终端会输出提醒信息。4.3 仿真重点验证哪些场景我建议把验证重点放在三个场景上。第一是“定时触发”场景把设置里的提醒时间改成当前时间加1分钟然后盯着屏幕等触发确认状态转移只发生一次而不是反复响第二是“按键菜单”场景把时间设置、药量设置、保存这三个流程完整走一遍确认每个按键的操作有反馈第三是“异常恢复”场景仿真过程中直接暂停再继续看程序是回到待机状态还是卡死验证状态机的健壮性。我说的这三个场景覆盖了药盒最核心的逻辑链路时间采集、状态切换、人机交互。仿真通过了再上实物会非常有底气。如果仿真里发现有按键点击没反应或者时间不更新99%是I2C时序或者时钟配置出了问题先用逻辑分析仪看波形或者加串口打印调试信息。Proteus自带虚拟终端可以在代码里预留一个调试宏把所有状态转移打出来排查效率特别高。4.4 仿真的局限性哪些地方不能靠仿真必须说清楚仿真不是万能的。Proteus对STM32模拟外设的支持程度有限比如它的GPIO翻转速度、定时器中断精度、Flash写入时序都和真实芯片有差异SSD1306 OLED模型的I2C时序也未必和实物一致可能仿真里显示正常实物却白屏。更关键的舵机这种机械执行机构在Proteus里只能用LED或虚拟示波器表示动作逻辑真正“转不转、卡不卡”只能在实物上验证。所以我把仿真定位成“逻辑验证工具”而不是“硬件验证工具”这点大家心里要有数。如果你觉得Proteus不够过瘾也可以用QEMU模拟器搭配STM32CubeMonitor做系统级测试但学习成本会拉高对药盒项目来说性价比不高。回归到项目目标仿真阶段最重要的产出是一份“逻辑已经跑通”的信心和一套可直接复现的测试用例剩下的硬件琐事交给实物阶段去处理。5. 常见问题与排查技巧5.1 烧录报“No STM32 target found”怎么办这是STM32新手最常撞的一堵墙。用ST-LINK连接目标板之后MDK提示Error: No STM32 target found! If your product embeds debug authentication先从这五个方向排查排线是否正序SWDIO、SWCLK、GND三根线必须一一对应别把SWDIO和SWCLK插反目标板是否单独供电调试器不能替代目标板主电源BOOT0引脚是否被拉高如果拉高了芯片会进入ISP模式SWD是连不上的调试接口是否在代码里被复用成普通IO如果工程里把PA13/PA14配成了GPIO输出先按住复位键再烧录就能救回来最后检查ST-Link驱动和MDK的Debug设置里Port选的是不是SW而不是JTAG这个设置藏在Utilities选项卡里常常被忽略。我自己还碰过一次坑目标板电源纹波太大SWD时序被干扰烧录时偶尔成功偶尔失败。后来在SWCLK和SWDIO上各串了一个100欧姆电阻再挂上10k上拉烧录就稳定了。如果手头没有ST-Link用USB转TTL也可以走串口ISP下载但需要先设置BOOT01下载完再拨回0复位操作上多几个步骤不推荐作为日常烧录方式。5.2 OLED白屏或乱码排查OLED白屏最常见的三个原因I2C地址不对、SDA/SCL接反、驱动电压不足。SSD1306的I2C地址一般是0x787bit地址0x3C如果用的是0x7A版本就要在源码里改宏。接线反掉会导致初始化时IO口写电平方向不对表现就是屏幕偶尔亮一下然后一直白屏。驱动电压不足则比较隐蔽OLED的VCC接的是3.3V如果系统里5V干扰大或者VCC走线又细又长屏幕亮度会不稳定可以用万用表量一下OLED供电脚电压低于3.0V基本就会白屏。还有一个非常容易踩的软件坑初始化顺序。SSD1306上电后需要一个短暂延时让内部复位完成如果上电后立刻发初始化命令芯片可能不响应。我在OLED_Init()里加了一个不小于100ms的延时实测白屏率降到零。如果你已经用了标准库的官方代码还是白屏试试降低I2C时钟频率软件模拟I2C时把延时调大一点SCL频率超过400kHz很容易出问题。5.3 时间不准或掉电后时间归零时间不准先看DS1302的32.768kHz晶振和负载电容。我第一次画板时把晶振离芯片放得比较远结果一天误差到5分钟。把晶振贴近芯片、负载电容调整为6pF之后误差降到一天不到3秒。另外DS1302的VCC1备用电池如果没安装或者装反掉电后时间必然会清零这是硬件问题检查电池座的正负极标注。软件层面还有一个细节DS1302写保护寄存器默认是0x80即写保护状态每次写时间前要先把写保护关掉写完再打开很多资料里的代码都把这一步省略了实测会导致偶发性写入失败。如果你不用DS1302而用STM32内部RTC还要额外注意VBAT引脚的供电不接电池的话掉电后整个RTC就失去依赖了。内部RTC还有一个大坑就是复位后默认使用LSI内部低速时钟频率不准温度影响也大想要准就必须开启LSE外部32.768kHz晶振。总之药盒这种和时间强相关的系统独立RTC芯片是最省心的选择。5.4 舵机抖动、不动或有啸叫舵机问题基本都是PWM参数和供电问题引起的。SG90舵机要求50Hz的PWM信号周期20ms脉宽0.5ms到2.5ms对应0到180度。很多人用STM32的定时器输出PWM时搞错预分频和重装值导致频率不是50Hz舵机就会要么不动要么一直抖动。我的参数是定时器时钟72MHz预分频PSC71即1MHz计数频率自动重装ARR19999即20ms周期通道比较值在500到2500之间对应角度。这个配置在代码注释里写得很清楚你直接抄就能用。供电问题就更常见了。SG90堵转时电流可能拉到300mA以上如果和STM32共用3.3V电压跌落必然引起复位。我建议舵机用外部5V供电GND和主控板共地。如果舵机已经有了PWM信号还是啸叫那基本是舵机本身质量问题或者机械结构卡住先用手转动一下药盘确认没有卡死再试舵机。5.5 系统无故复位怎么办系统复位最恶心的就是“偶发性回来”的bug。第一步排查电源用万用表量5V输入在蜂鸣器响、舵机转时的电压波动如果低于4.5V就换更大电流的适配器或者加一个大容量电解电容做储能缓冲。第二步排查看门狗如果代码里开了IWDG但主循环执行时间太长看门狗会误复位需要把IWDG喂狗放在主循环开头并保证每个状态里的耗时操作及时分段。第三步排查中断优先级和临界区如果多个中断同时触发或者Flash写入时被更高优先级打断也可能导致HardFault复位。我建议系统里只开启定时器中断和外部按键中断优先级配置合理主循环里不要做长阻塞延时能把大多数复位问题扼杀掉。6. 我的实操心得与扩展建议6.1 迭代两版之后哪些地方我最后悔这个项目我前后做了两版第一版的问题主要集中在机械结构和供电上。第一版出药用的是一整个步进电机加丝杆结构运动控制复杂而且步进电机功耗大待机电流就很高导致电池供电方案直接夭折。第二版改成SG90舵机加旋转药盘结构简化成本降到十几块钱可靠性反而更高。如果要复刻我真心建议一开始就做旋转式药盘别在机械结构上过度设计。供电方案也是一样。最初想着用锂电池加升压模块体积和充电管理都麻烦。第二版直接用USB 5V适配器供电舵机5V直供主控3.3V经过稳压芯片整个系统稳定得一批。如果要做成便携式后续可以用18650电池加5V升降压模块但前提是舵机供电必须和主控电源分开这个是底线。6.2 顺着这个项目还能怎么扩展这套系统的扩展空间非常大。最直接的是加一个语音播放模块比如用DFPlayer Mini或者SYN6288语音合成模块到点除了蜂鸣器响还能语音播报“爷爷该吃降压药了”对听力下降的老人友好很多。再往上走可以加ESP8266或ESP32模块通过MQTT协议把服药记录同步到手机App让子女远程收到漏服通知这一步其实只是加一个串口AT指令的封装业务逻辑完全复用现有状态机。如果想要更高级的交互可以加一个指纹识别模块验证身份后再出药防止老人拿错药或者加一个扫码模块扫描药盒上的二维码直接更新用药计划。这些扩展在源码架构上都有预留的接口比如我在主循环里留了一个app_extra_process()空函数后续模块往这里塞轮询即可。6.3 开源工程怎么用给你几条建议下载工程后我建议不要急着烧录。先把原理图浏览一遍理解每个模块的引脚分配再在MDK里编译一次确保环境无误然后用仿真工程跑一遍完整流程最后再买物料打板。这样渐进式学习比拿到代码一顿乱改有效率得多。如果你只是冲着毕业设计去的可以直接参考代码里的状态机部分写进论文但一定要在懂原理的前提下改答辩时随便问一两个问题就露馅了。物料清单里所有器件加起来成本大概在60到80元之间淘宝都能买到STM32最小系统板如果不想自己焊接也可以直接买现成的但注意不要买“最小系统板”上已经把PA13/PA14占用掉的版本尽量选引脚全引出的。Proteus工程我放的是8.7版本如果你打不开可以到官网升级或者把代码EEF文件转成低版本。最后说一点个人的体会。做这种软硬结合项目最容易拖垮进度的不是代码不是原理图而是“想一步到位”的心态。药盒第一版能做出来把提醒逻辑跑通就已经成功了90%后面的出药结构、语音播报、远程通知都是加分项。如果你按这套开源的步骤走一遍你收获的绝对不只是一个药盒而是独立开发嵌入式产品的完整方法论。遇到问题别慌先看状态机再量电压最后查波形九成的问题都能在这三步里定位。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。