当前位置: 首页 > article >正文

GRBL移植实战(一):从AVR到ARM的引脚映射与平台适配

1. GRBL移植前的准备工作第一次接触GRBL移植的朋友可能会觉得无从下手毕竟要把一个成熟的运动控制系统从AVR平台搬到ARM架构上听起来就像是要把一辆老爷车的发动机装进新能源车里。但别担心我去年刚完成了一个从Atmega328p到STM32F407的移植项目这里分享下我的实战经验。首先得搞清楚GRBL到底依赖哪些硬件资源。打开cpu_map.h文件你会发现它主要定义了三大类引脚运动控制引脚步进电机驱动、限位开关引脚和主轴控制引脚。AVR架构下这些引脚都是直接映射到具体端口位的比如X轴步进信号对应PD2引脚。但在ARM平台上我们需要重新理解这些定义的本质。举个例子在AVR的cpu_map.h里你会看到这样的定义#define X_STEP_BIT 2 // Uno Digital Pin 2 #define STEP_PORT PORTD这表示X轴步进信号使用PORTD的第2位。移植到STM32时我们得先确定用哪个GPIO端口。我建议在开发板上找一个完整的端口比如GPIOA来统一管理步进信号这样后续操作会更方便。2. ARM平台引脚映射实战2.1 理解ARM的GPIO架构STM32的GPIO配置可比AVR复杂多了。AVR的DDRx和PORTx寄存器在STM32里变成了GPIOx_MODER、GPIOx_ODR等一系列寄存器。不过别被吓到实际操作起来反而更灵活。以步进电机控制为例在STM32F4上我们可以这样定义// 使用GPIOE端口统一管理步进信号 #define STEP_GPIO_PORT GPIOE #define X_STEP_PIN GPIO_PIN_2 #define Y_STEP_PIN GPIO_PIN_3 #define Z_STEP_PIN GPIO_PIN_4记得在初始化代码中配置GPIO模式GPIO_InitTypeDef GPIO_InitStruct {0}; GPIO_InitStruct.Pin X_STEP_PIN | Y_STEP_PIN | Z_STEP_PIN; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull GPIO_NOPULL; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(STEP_GPIO_PORT, GPIO_InitStruct);2.2 中断系统的适配GRBL对实时性要求极高特别是限位开关检测需要快速响应。AVR用的是Pin Change中断而STM32则使用EXTI中断系统。这里有个坑我踩过STM32的EXTI中断线是共享的比如PE2和PA2都使用EXTI2中断线。配置限位开关中断时要注意// 配置X轴限位开关(PE5) GPIO_InitStruct.Pin GPIO_PIN_5; GPIO_InitStruct.Mode GPIO_MODE_IT_RISING; // 上升沿触发 HAL_GPIO_Init(GPIOE, GPIO_InitStruct); // 设置中断优先级 HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);中断服务函数里记得清除标志位void EXTI9_5_IRQHandler(void) { if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_5) ! RESET) { // 处理限位触发 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_5); } }3. 定时器系统的重构3.1 步进脉冲生成原理GRBL使用AVR的定时器比较匹配中断来生成精确的步进脉冲。在STM32上我们可以利用高级定时器如TIM1来实现同样的功能。关键是要理解GRBL的步进脉冲时序脉冲宽度通常为1-10μs脉冲间隔决定运动速度需要严格同步多个轴的脉冲在STM32F4上配置TIM1TIM_HandleTypeDef htim1; htim1.Instance TIM1; htim1.Init.Prescaler 84-1; // 1MHz计数频率 htim1.Init.CounterMode TIM_COUNTERMODE_UP; htim1.Init.Period 1000-1; // 初始1kHz频率 htim1.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; HAL_TIM_Base_Init(htim1); // 配置PWM模式 TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 5; // 5μs脉冲宽度 sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_1);3.2 系统时钟的调整AVR版的GRBL依赖16MHz系统时钟而STM32通常运行在更高的频率如168MHz。这会影响以下几个关键部分串口波特率计算定时器预分频设置延时函数的实现建议在system.h中定义系统时钟频率#define F_CPU 168000000UL然后修改delay.c中的延时函数void delay_us(uint32_t us) { uint32_t start DWT-CYCCNT; uint32_t cycles us * (SystemCoreClock / 1000000); while((DWT-CYCCNT - start) cycles); }4. 工程框架搭建技巧4.1 目录结构规划不要直接把AVR的代码复制到ARM工程里我建议这样组织目录/grbl_arm /Core /Inc cpu_map.h grbl_config.h /Src main.c /Drivers /STM32F4xx_HAL_Driver /Middlewares /grbl /avr // 保留原始AVR代码 /arm // ARM平台适配代码4.2 关键文件修改清单cpu_map.h完全重写引脚定义nuts_bolts.h修改数据类型定义ARM是32位架构serial.h重写串口驱动接口system.h调整系统时钟相关定义特别注意数据类型的变化// 原AVR定义 typedef uint8_t uint8_t; typedef int8_t int8_t; // ARM平台建议修改为 #include stdint.h移植过程中最耗时的部分其实是调试步进电机驱动。我建议先用逻辑分析仪抓取AVR板的输出波形然后在ARM板上尽量复现相同的时序。第一次成功让电机转动时的成就感绝对值得这些折腾。

相关文章:

GRBL移植实战(一):从AVR到ARM的引脚映射与平台适配

1. GRBL移植前的准备工作 第一次接触GRBL移植的朋友可能会觉得无从下手,毕竟要把一个成熟的运动控制系统从AVR平台搬到ARM架构上,听起来就像是要把一辆老爷车的发动机装进新能源车里。但别担心,我去年刚完成了一个从Atmega328p到STM32F407的…...

告别C语言硬编码!用lvglpp在ESP32上快速构建嵌入式GUI(附完整项目配置)

告别C语言硬编码!用lvglpp在ESP32上快速构建嵌入式GUI(附完整项目配置) 在嵌入式开发领域,图形用户界面(GUI)的实现一直是个令人头疼的问题。传统的C语言硬编码方式不仅效率低下,代码维护成本也居高不下。想象一下&…...

剪映专业版教程:制作画卷开合效果

前言 今天教大家一个画卷开合效果。这种效果模拟画卷从中间向上下两边展开,停留片刻后缓缓合拢,配合四季主题诗词和朗读,适合古风视频、诗词鉴赏、传统文化展示等场景。 效果预览:画卷从中间向上下翻开,露出四季风景…...

Zotero中文文献管理终极指南:Jasminum插件完整教程

Zotero中文文献管理终极指南:Jasminum插件完整教程 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 你知道吗&#xff…...

ESP32-S3 + Air780E 4G模块实战:手把手教你实现图片HTTP上传(附完整代码)

ESP32-S3与Air780E 4G模块实战:构建高效图片上传系统的完整指南 在物联网设备开发中,远程图片上传是一个常见但颇具挑战性的需求。本文将深入探讨如何利用ESP32-S3主控芯片配合Air780E 4G模块,构建一个稳定可靠的图片上传系统。不同于简单的代…...

3步轻松实现Windows任务栏透明化:TranslucentTB完整使用指南

3步轻松实现Windows任务栏透明化:TranslucentTB完整使用指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Win…...

FPGA数字钟实战:用Verilog在Altera开发板上实现整点报时功能(附完整代码)

FPGA数字钟实战:用Verilog在Altera开发板上实现整点报时功能(附完整代码) 当秒针划过表盘最后一格,整点报时的"嘀嗒"声总能唤起人们对时间的敬畏。在数字时代,用FPGA实现这一经典功能不仅是对传统钟表匠精神…...

保姆级教程:在Jetson AGX Orin上从零部署YOLOv8,手把手解决环境配置难题

在Jetson AGX Orin上从零部署YOLOv8:环境配置全流程避坑指南 当你第一次拿到Jetson AGX Orin这款性能强大的边缘计算设备时,可能会被它复杂的软件生态吓到。作为一款专为AI推理优化的硬件平台,它需要特定的软件栈支持,而YOLOv8作为…...

面试官:聊聊RocketMQ是怎么保存偏移量的?

对消息队列来说,偏移量是一个非常重要的概念,如果偏移量保存失败,可能会造成消息丢失、消息重复消费等问题。今天来聊一聊 RocketMQ 是怎么保存消息偏移量的。1 消息拉取RocketMQ 客户端启动的时候,会启动重平衡线程 RebalanceSer…...

IAR开发环境从零到一:新手入门与高效配置指南

1. IAR开发环境初探:从安装到第一个工程 第一次打开IAR Embedded Workbench时,很多新手会被密密麻麻的菜单和选项吓到。别担心,这就像第一次学骑自行车,看起来复杂,实际上只要掌握几个关键步骤就能跑起来。IAR作为嵌入…...

别再搞混了!Verilog里数组、向量和存储器的赋值与读写,新手避坑指南

Verilog数据存储结构深度解析:从位操作到存储器建模实战 刚接触Verilog的工程师常会被其灵活的数据存储结构所困扰——什么时候用向量?什么时候用数组?存储器又该如何正确建模?这些看似基础的概念一旦混淆,就会在仿真和…...

2025届最火的AI写作神器解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 处于学术写作这个范畴里,恰当地运用论文AI工具可明显提高写作的效率跟质量。当前…...

【CH376实战】STM32模拟SPI驱动U盘文件系统,告别复杂FAT底层

1. 为什么选择CH376STM32方案 在嵌入式开发中实现U盘文件操作,传统方案通常需要开发者深入理解FAT32/exFAT等文件系统协议栈。我曾在一个智能仪表项目中被FAT底层代码折磨得够呛——光是处理长文件名和簇链遍历就消耗了整整两周时间。直到发现沁恒的CH376这颗神器芯…...

3步掌握通达信缠论分析:从理论到实战的完整指南

3步掌握通达信缠论分析:从理论到实战的完整指南 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 你是否曾经面对复杂的K线图感到困惑?是否想要将缠论的精髓转化为直观的交易信号&a…...

网易云音乐NCM文件转换终极指南:3分钟解锁你的音乐收藏

网易云音乐NCM文件转换终极指南:3分钟解锁你的音乐收藏 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM文件无法在其他播…...

SYN6288语音合成模块实战:从ESP32-S调试到完美真人发音

1. SYN6288语音合成模块初探 第一次拿到SYN6288这个小巧的语音合成模块时,说实话我有点小激动。作为一个经常捣鼓智能硬件的开发者,能找到一个支持中文、英文混读且价格亲民的TTS模块实属不易。模块只有拇指大小,但功能却相当强大&#xff0c…...

3秒破解百度网盘提取码:免费开源工具的终极解决方案

3秒破解百度网盘提取码:免费开源工具的终极解决方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘提取码而烦恼吗?每次找到心仪资源却卡在提取码这一步,不得不花费大量时间…...

别再对着公式发愁了!手把手教你用CadFEKO搞定一个1.645GHz的矩形喇叭天线仿真

从零开始实战:1.645GHz矩形喇叭天线仿真全流程解析 第一次打开CadFEKO时,那个布满按钮的界面确实让人望而生畏。记得我研究生时期做第一个天线项目,光是找"模型单位设置"就花了半小时。本文将以1.645GHz矩形喇叭天线为例&#xff0…...

突破性AI技术:3大维度深度解析Zero123++图像生成新范式

突破性AI技术:3大维度深度解析Zero123图像生成新范式 【免费下载链接】zero123plus Code repository for Zero123: a Single Image to Consistent Multi-view Diffusion Base Model. 项目地址: https://gitcode.com/gh_mirrors/ze/zero123plus Zero123是一项…...

ESP32+LVGL8.1实战:用陀螺仪模拟编码器输入(附完整代码)

ESP32LVGL8.1实战:用陀螺仪模拟编码器输入(附完整代码) 在嵌入式界面开发中,输入控制方式往往决定了用户体验的流畅度。传统编码器虽然可靠,但体积和成本限制了其在小型设备中的应用。本文将展示如何利用ESP32内置的加…...

VS2019 MFC CEF(Chrome)集成实战:从环境配置到核心功能实现(含源码解析)

1. 为什么要在MFC中集成CEF? 十年前我刚接触MFC开发时,最头疼的就是界面美化问题。传统的GDI绘图方式要实现一个圆角按钮都得折腾半天,更别说复杂的动态效果了。直到发现CEF(Chromium Embedded Framework)这个神器&…...

VLA 边缘感知决策:Deepoc 开发板强化机械狗灾后救援自主作业能力

在地震废墟、火灾现场、洪水灾区等无定位、弱通信、地形极端的灾后救援场景中,四足机器人的自主作业能力仍存在明显技术瓶颈。传统方案高度依赖预建地图与稳定通信,在环境坍塌、结构非结构化的区域易出现定位漂移、路径失效等问题,难以支撑救…...

BiliDownload终极指南:三步快速实现无水印B站视频下载

BiliDownload终极指南:三步快速实现无水印B站视频下载 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload BiliDownload是一款免费开源的B站视频下载工具,通过调用B站WEB端与TV端API&…...

基于滑膜控制的3车协同自适应巡航控制技术:理论与实践的全面解析

基于滑膜控制smc的3辆协同自适应巡航控制,上层滑膜控制器产生期望加速度,下层通过油门和刹车控制车速,实现自适应巡航控制。 个人觉得从结果图中看出基于滑膜控制的效果非常好,不亚于模型预测控制mpc!!&…...

Spotify广告拦截终极方案:BlockTheSpot深度技术解析与实战指南

Spotify广告拦截终极方案:BlockTheSpot深度技术解析与实战指南 【免费下载链接】BlockTheSpot Video, audio & banner adblock/skip for Spotify 项目地址: https://gitcode.com/gh_mirrors/bl/BlockTheSpot 在享受Spotify免费音乐服务时,无休…...

3分钟掌握阅读APP书源导入:告别书荒,开启全网小说自由阅读之旅

3分钟掌握阅读APP书源导入:告别书荒,开启全网小说自由阅读之旅 【免费下载链接】Yuedu 📚「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 你是否遇到过这样的情况:深夜追更时突然提示"书源…...

常用运放电路

一:运放核心基础1.核心定律虚断:运放两个输入端的输入电流≈0(相当于开路,电流只走反馈电阻)。虚短:运放线性区(有负反馈)时,同相端电压≈反相端电压(V V-&a…...

C++链表:从原理到实战

C链表详解链表是一种常见的数据结构,用于存储一系列元素。与数组不同,链表中的元素在内存中不是连续存储的,而是通过指针链接在一起。链表由节点组成,每个节点包含数据和指向下一个节点的指针。链表的基本概念链表由多个节点组成&…...

ESP32-WROVER-E/IE模组硬件选型与外围电路设计实战

1. ESP32-WROVER-E与ESP32-WROVER-IE模组选型指南 第一次接触ESP32-WROVER系列模组时,很多人会被型号后缀搞晕。其实区分E和IE版本只需要记住一个关键点:字母"I"代表外部天线接口。ESP32-WROVER-IE模组预留了IPEX天线座,而ESP32-WR…...

Python基础:字符串的定义、拼接与转义字符使用

Python基础:字符串的定义、拼接与转义字符使用📚 本章学习目标:深入理解字符串的定义、拼接与转义字符使用的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《Python从入门到精通教程》Py…...