news 2026/9/23 20:39:06

GRBL三轴在STM32F103C8T6上的移植与脱机运行控制指南:源码资料打包,含OLED屏...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GRBL三轴在STM32F103C8T6上的移植与脱机运行控制指南:源码资料打包,含OLED屏...

主页全部资料打包!GRBL三轴+脱机运行移植STM32F103C8T6 GRBL_V1.1f三轴移植到STM32F103C8T6,并添加脱机控制,使用OLED屏和旋转编码器控制,联机脱机都可使用。 价格为本人主页内全部资料代码打包的价格,持续搬运更新新代码,有更新后也可领取新代码。 资料来源于开源社区,如有侵权,请告知将会第一时间删除。 至于为什么收费?!开源代码很多很多,但是要用起来还是要花一些时间去研究,可能有很多坑。 搬运的代码全部经过本人验证,并且有使用笔记,保证轻松上手。 收费主要也是能提供使用指南,填坑记录,让后来人少走弯路。 有一定劳动成果,不是完完全全胡乱抄抄。

GRBL三轴控制器移植到STM32F103C8T6这事儿,玩CNC的小伙伴应该都懂有多刺激。原版GRBL跑在Arduino上总觉得性能不够带劲,咱们直接上STM32F103C8T6这个性价比小钢炮,主频72MHz直接起飞。不过移植这事儿吧,就像把大象装冰箱,总共分几步?

先看硬件适配这关。原版GRBL的定时器配置在STM32上得重新洗牌,特别是步进脉冲生成这块。咱们直接上TIM1的高级定时器,配置成PWM模式搞事情:

// 步进脉冲生成定时器配置 void stepper_pulse_init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_TimeBaseStructure.TIM_Period = 100; TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 50; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_CtrlPWMOutputs(TIM1, ENABLE); }

这段配置直接决定了步进电机的脉冲频率上限,72MHz主频下分频后理论最高脉冲频率能到100kHz,足够应付大多数雕刻需求。不过实际应用时得注意死区控制,别让MOS管炸烟花。

脱机运行才是真香功能。加个SPI Flash存G代码,配合旋转编码器和OLED菜单,直接变身独立工作站。重点在于状态机切换:

void system_main_loop() { while(1) { switch(sys.state) { case STATE_IDLE: encoder_scan(); // 编码器扫描 oled_menu_update(); // 菜单刷新 if(btn_pressed()) enter_selected_mode(); break; case STATE_RUN: execute_gcode_block(); update_position_display(); check_emergency_stop(); break; case STATE_HOLD: pause_motion(); show_pause_screen(); break; } wdt_reset(); // 喂狗防复位 } }

这个主循环把联机/脱机状态统一管理,编码器中断用EXTI+定时器消抖大法,比纯轮询靠谱多了。记得在中断服务里加个标志位就行,别在中断里搞复杂逻辑。

文件系统用FATFS魔改版,把FLASH分区伪装成U盘。重点在于实现diskio.c里的底层驱动:

DRESULT disk_read(BYTE pdrv, BYTE* buff, LBA_t sector, UINT count) { uint32_t addr = FLASH_BASE + sector * 512; memcpy(buff, (void*)addr, count*512); return RES_OK; }

简单粗暴直接内存映射,虽然效率比不上专用文件系统,但胜在稳定不折腾。G代码解析器还是用原版GRBL的状态机,不过得把串口输入改成文件流读取。

最后说说硬件布局要点:步进驱动信号最好用光耦隔离,限位开关接成常闭回路更安全,急停按钮直接切断驱动电源。电源部分别省,至少搞个DC-DC隔离模块,别让电机噪声搞死你的MCU。

代码仓库里已经打包好所有平台IO的映射表,还有验证过的PCB工程文件。遇到电机乱跳先查共地,出现丢步就调加速曲线。玩嵌入式嘛,不就是和玄学问题斗智斗勇的过程?(项目文件持续更新中,遇到坑记得看更新日志)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 2:53:35

基于STM32的智能红绿灯控制系统

基于STM32的智能红绿灯控制系统 第一章 系统设计背景与需求分析 传统红绿灯多采用固定配时方案,在车流量动态变化的场景中存在明显局限:高峰时段易导致拥堵,低谷时段则造成路口资源浪费。据统计,固定配时路口的通行效率比动态调节…

作者头像 李华
网站建设 2026/9/21 16:22:54

生活电器:重塑日常的科技力量

从清晨唤醒人的智能音箱,到早餐时刻高效运转的破壁机,再到夜晚守护安睡的空气净化器,生活电器已深度融入现代家庭的每一个角落。它们以科技为内核,以实用为导向,将人们从繁琐的家务劳动中解放出来,不断重塑…

作者头像 李华
网站建设 2026/9/20 13:35:14

外卖大军:“一口热饭”的需求引发的一系列多线程社会问题与困局

在现代都市的日常图景中,一个再平常不过的动作——点开手机,为一份即将送达的“热饭”支付费用——已成为数亿人的习惯。这份对即时温饱的朴素追求,却如同投入平静湖面的一颗石子,激荡起一连串深远而复杂的涟漪,最终汇…

作者头像 李华
网站建设 2026/9/21 22:05:12

【异常】Antigravity工具提示One moment, the agent is currently loading...

一、报错内容二、报错说明 这是Antigravity工具的操作界面,当前处于智能代理(Agent)的加载状态,以下是其核心信息: 工具定位:Antigravity属于AI辅助开发类工具,核心是通过智能代理(A…

作者头像 李华
网站建设 2026/9/23 7:49:38

成功案例|华恒智信助力智能科技企业解决任职资格体系设计与高效评价实践

【客户行业】 信息技术、智能科技、计算机软件、民营企业、研发驱动型、轨道交通与车载智能解决方案供应商【问题类型】 任职资格体系设计、双通道任职资格体系搭建、岗位任职资格标准、任职资格评价指标设计、技术人员绩效考核、职业发展通道设计、薪酬体系设计【客户背景】某…

作者头像 李华