AM32-MultiRotor-ESC项目固件编译和烧录方法介绍
- 📍AM32-MultiRotor-ESC项目地址:
https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware
- 🎈Updater with V8 Bootloader:
https://github.com/AlkaMotors/F051_Bootloader_Updater
- 🔧烧录Bootloader和固件所需固件:USB转TTL串口工具(例如ch340)、或者DAPLINK/JLINK
📑项目简介
AM32-MultiRotor-ESC-firmware AM32固件原专为STM32 ARM处理器设计,用于控制无刷电机(BLDC)。该固件旨在通过平稳快速的启动和线性油门实现安全快速。它适用于多种车辆类型和飞行控制器。
📘硬件型号支持
AM32目前支持STSPIN32F0、STM32F051、STM32G071、GD32E230、AT32F415和AT32F421。由于随机问题太多,不推荐使用CKS32F051。目标兼容性列表可在此处找到(2021年4月)。
📗运行固件和Bootloader固件说明
要在空白ESC上使用AM32运行固件,必须首先使用ST-LINK、GD-LINK、CMIS-DAP或AT-LINK安装Bootloader引导加载程序。引导加载程序将取决于esc上使用的MCU。选择与ESC的MCU类型和信号输入引脚匹配的引导加载程序。
✨安装引导加载程序后,可以使用配置工具和Betaflight飞行控制器,安装主运行固件,也可以直接连接修改为单线的USB串行适配器。
-
🔗🖇烧录流程图:
-
🌟如果手上有一个USB转TTL串口工具(例如ch340),那么恭喜你,可以实现Bootloader程序和固件烧录的全部烧录工作。
-
👉通过Betaflight飞行控制器,可以使用网页版在线安装主运行固件页面:
https://esc-configurator.com/
运行固件编译
-
- 先将项目工程git克隆下来:
https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware.git
- 先将项目工程git克隆下来:
-
- 下载并解压
arm-none-eabi-gcc
编译器,将对应bin目录添加到电脑的系统环境变量中。(默认使用的是10.2.0
,(Version 10.3-2021.10):gcc-arm-none-eabi:https://developer.arm.com/downloads/-/gnu-rm
)
在AM32-MultiRotor-ESC-firmware\make\tools.mk
,修改版本:10.3.1
来匹配当前使用的版本。
- 下载并解压
-
- 下载并解压
mingw64
,将对应的bin目录添加到电脑的系统环境变量中。
- 下载并解压
在项目文件夹,直接使用make
,即可进行编译。将会生成所有型号的固件。
- 单独编译指定型号的固件:
//不知道为什么会全部的固件出来
make MCU_TYPE=F421 TARGET=AM32_4IN1
- 可以通过查看
Makefile
文件来了解所有支持的型号。常见的型号包括:- AM32_4IN1
- AM32_SINGLE
- AM32_8IN1
📗Bootloader固件烧写
根据mcu的不同选择烧录工具有所不同,如果是通过SWD接口烧录,使用ST-LINK、GD-LINK、CMIS-DAP或AT-LINK烧录Bootloader引导加载程序。如果是通过串口烧录方式,那么所选择的上位机软件不同,需要配合USB转串口工具(例如ch340)进行烧录。
🔧SWD接口烧录
AM32-MultiRotor-ESC项目所支持的mcu都支持使用swd接口烧录,通过SWD接口通用的烧录器有dap-link和jlink.特定的烧录器ST-LINK、AT-LINK等这些烧录工具只支持对应厂商的烧录芯片烧录。
- MCU为STM32的,例如STSPIN32F0、STM32F051、STM32G071,可以使用ST-LINK、dap-link、jlink。
- MCU为AT32的,例如:AT32F421可以使用dap-link、jlink、AT-LINK。
🔧SWD烧录上位机软件选择
- 🌿如果使用openocd烧录,可以直接使用命令行烧录。
- jlink烧录:
jlink使用openocd烧录,需要将默认的jlink driver驱动更换为libusbK驱动才能使用。
//jlink烧录命令参考格式
openocd -f interface/jlink_swd.cfg -f target/stm32f4x.cfg -c "program STM32F405VG_DEMO.hex verify reset exit"
- daplink烧录
//daplink烧录命令参考格式
openocd -f interface/cmsis-dap.cfg -f target/stm32f4x.cfg -c "program STM32F405VG_DEMO.hex verify reset exit"
- 🔨借用相对应的上位机软件烧录方式
推荐使用mcu厂商的上位机烧录软件进行烧录,当然也可以借助第三方个人制作的MCUProg软件进行烧录。
如果是AT32可以使用
ArteryICPProgrammer
,支持jlink和ATLINK烧录Bootloader程序。不支持dap-link.
- 如果是ST32,上位机可以选择当前官方推荐的
STM32CubeProgrammer
,支持串口、USB DFU、JLINK、ST-LINK或者老款烧录软件STM32 ST-LINK Utility
仅支持ST-LINK烧录方式,两者都不支持daplink.
📙串口烧录方式介绍:
AM32-MultiRotor-ESC项目所支持的mcu通过串口方式烧录接口,串口方式烧录Bootloader引导加载程序前,需要先将mcu的Boot0引脚接高电平(3.3V).
-
🌿如果是AT32,就使用
Artery_ISP_Programmer
上位机软件,默认串口1(PA2、PA3)进行串口下载Bootloader引导加载程序
-
-
🌿如果是STM32就选择
STM32CubeProgrammer
上位机软件,默认串口1(PA9、PA10)
📒运行固件烧录
运行固件烧录可以使用配置工具和Betaflight飞行控制器,安装主运行固件,也可以直接连接修改为单线的USB串行适配器。以及借助Arduino UNO/nano板子实现运行固件的烧录
- 👉如果手上有Betaflight飞行控制器的,可以通过Betaflight飞行控制器,直接使用网页版,在线安装主运行固件:
https://esc-configurator.com/
- 🌿单线的USB串行烧录,需要USB转TTL串口工具,将USB转TTL串口工具的RxD和TxD引脚连接到一块,也就是短接起来,在连接到已经烧录过Bootloader程序的ESC电调板的信号引脚上,如果烧录的是
F421_PB4_BOOTLOADER_V2.hex
固件,那么信号引脚就是PB4
.然后使用Esc_Config_Tool
软件进行固件的烧写。
- 烧录成功后,断开重新连接
如果后续有新版的固件,可以以同样的步骤升级固件。 - 🌿Arduino烧录方式
是借助Arduino UNO/nano板子,烧录好特定的程序,通过上位机软件借助 UNO/nano板子来上传运行固件到MCU中。
- Arduino烧录方式介绍:
https://github.com/am32-firmware/am32-wiki/blob/main/docs/guides/Arduino-PC-Link.md
- Arduino烧录方式,可以使用上位机软件
BLHeliSuite
烧录Arduino程序: (软件自带UNO/nano编译好的固件)https://www.mediafire.com/folder/dx6kfaasyo24l/BLHeliSuite
- 方法二使用Arduino IDE上传代码到UNO/nano上。
//如果是nan板子D3引脚连接到ESC电调上的PB4信号接收引脚上(具体引脚看型号和固件),用来给ESC电调传固件用
// This should work conecting signal to pin D3 and ground to ground
/*This file is part of the BlHeliSuite interface solutions for AVRCopyright (C) 2014 by 4712This program is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program. If not, see <http://www.gnu.org/licenses/>.File: Arduino1Wire.cAuthor: 4712
*/
/** Arduino1Wire.c //Method I in C** Rev 1: Initial realease* Rev 1.1: Set ow pull up at startup
*/#include <avr/io.h>//1-Wire Pin:
//Arduino Nano only -> PD3=D3
//MEGA boards -> PB2=D51=MOSI
//all other -> PB3=D11=MOSI
#define OW_PIND3#if defined OW_PIND3
#define OW_DDR DDRD
#define OW_PORT PORTD
#define OW_PIN PIND
#define OW PIND3
#elif defined OW_PINB3
#define OW_DDR DDRB
#define OW_PORT PORTB
#define OW_PIN PINB
#define OW PINB3
#elif defined OW_PINB2
#define OW_DDR DDRB
#define OW_PORT PORTB
#define OW_PIN PINB
#define OW PINB2
#endif#if (defined (__AVR_ATmega2560__) || defined (__AVR_ATmega1280__))
#define IN_DDR DDRE
#define IN_PORT PORTE
#define IN_PIN PINE#define IN_RX PINE0
#define IN_TX PINE1
#else#define IN_DDR DDRD
#define IN_PORT PORTD
#define IN_PIN PIND#define IN_RX PIND0
#define IN_TX PIND1#endif #define SetOWout (OW_DDR|= (1<< OW))
#define SetOWin (OW_DDR &= ~(1<< OW))
#define SetOWlow (OW_PORT &= ~(1<< OW))
#define SetOWhigh (OW_PORT |= (1<< OW))
#define IsOWhigh (OW_PIN & (1<< OW))
#define IsOWlow (!(OW_PIN & (1<< OW)))#define SetTXlow (IN_PORT &= ~(1<< IN_TX))
#define SetTXhigh (IN_PORT |= (1<< IN_TX))
#define IsRXhigh (IN_PIN & (1<< IN_RX))
#define IsRXlow (!(IN_PIN & (1<< IN_RX)))int main(void)
{//Very important disable hardware UARTUCSR0B =0;IN_DDR |= (1<<IN_TX );IN_DDR &= ~(0<< IN_RX);IN_PORT|= (1<<IN_TX )|(1<< IN_RX); //pullup RX ;TX high//SetOWin;//Set OW as input / defaultSetOWhigh; //pull up onwhile(IsRXhigh); //wait for RX go Low = 1 Incoming datawhile(1){//RX low = 1 -> set oneWire to output SetOWout;SetOWlow; //Set oneWire low =1SetTXlow; //Echo low to TX //Wait RX go high = 0 againwhile(IsRXlow);// input // RX is high (or high again) = 0 end of bit or idle - so listen to data from TRX SetOWhigh; //Set OneWire High = 0 for sharper edge //can be skipped?//and Echo low to TX SetOWin;SetOWhigh; //Set OneWire pull upwhile (IsRXhigh) //while RX high (no incoming bytes){if (IsOWhigh) SetTXhigh; //Set TX High = 0else SetTXlow; //Set TX Low = 1 } }
}
-
🍁 Arduino nano给目标板烧录连接示意图:(建议在Arduino UNO/nano 连接引脚D3到ESC电调板直接串连一个1K的电阻,ESC电调板上的MCU一般都是3.3V电平,Arduino UNO/nano为5V,虽然电调板mcu GPIO引脚可能忍耐5V,为了不损坏io口保险起见)
-
烧录软件:
Esc_Config_Tool_1_82_WIN
(https://drive.google.com/file/d/1XACXV4w1ldtp71KJtZOjKVYttHv50o5C/view
)(软件下不了就去立创开源工程搜索相关AT32电调
,一般都上传有该软件)
等待进度条走完:
- 烧录固件成功后,可以切换界面到
Settings
,可以显示出固件信息以及配置参数界面