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

AM32-MultiRotor-ESC项目固件编译和烧录方法介绍

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/

运行固件编译

    1. 先将项目工程git克隆下来:https://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware.git
    1. 下载并解压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来匹配当前使用的版本。
    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
  1. Arduino烧录方式,可以使用上位机软件BLHeliSuite烧录Arduino程序: (软件自带UNO/nano编译好的固件)https://www.mediafire.com/folder/dx6kfaasyo24l/BLHeliSuite
    在这里插入图片描述
  2. 方法二使用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 AVR
    Copyright (C) 2014  by 4712
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the 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 of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
    File: Arduino1Wire.c
    Author: 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 UART
  UCSR0B =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 / default
  SetOWhigh; //pull up on

  while(IsRXhigh); //wait for RX go Low = 1 Incoming data
  while(1)
  {
    //RX low = 1 -> set oneWire to output 
    SetOWout;
    SetOWlow; //Set oneWire low =1
    SetTXlow;  //Echo low to TX 
    
    //Wait RX go high = 0 again
    while(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 up
    
    while (IsRXhigh) //while RX high (no incoming bytes)
    {
      if  (IsOWhigh) SetTXhigh; //Set TX High = 0
      else 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_WINhttps://drive.google.com/file/d/1XACXV4w1ldtp71KJtZOjKVYttHv50o5C/view)(软件下不了就去立创开源工程搜索相关AT32电调,一般都上传有该软件)
    在这里插入图片描述
    在这里插入图片描述

等待进度条走完:

在这里插入图片描述

  • 烧录固件成功后,可以切换界面到Settings,可以显示出固件信息以及配置参数界面
    在这里插入图片描述

相关文章:

  • 【Spring】Spring框架介绍
  • C/C++蓝桥杯算法真题打卡(Day7)
  • 生物化学笔记:医学免疫学原理03 超抗原+丝裂原+疫苗佐剂
  • BLE 4.0开发技术全景解析
  • [自动化] 【八爪鱼】使用八爪鱼实现CSDN文章自动阅读脚本
  • (自用)在派上设置自启动时的问题
  • 0323-哈夫曼数、哈夫曼编码
  • proteus仿真stm32f103c8程序运行不起来的问题分析与解决
  • Jboss漏洞再现
  • C51知识点
  • 代码随想录算法训练营第十五天|右旋字符串
  • Linux的文件上传下载的lrzsz库的安装与使用
  • 《当人工智能遇上广域网:跨越地理距离的通信变革》
  • 08_双向循环神经网络
  • React 中useMemo和useCallback Hook 的作用,在什么场景下使用它们?
  • 图书管理系统系统-Java、SpringBoot、Vue和MySQL开发的图书馆管理系统
  • 文心快码 使用体验与介绍
  • 分布式算法:Paxos Raft 两种共识算法
  • 结合代码理解Spring AOP的概念(切面、切入点、连接点等)
  • Rocky Linux 软件安装:Last metadata expiration check:
  • 法院为“外卖骑手”人身权益撑腰:依法认定实际投保人地位
  • 图像编辑新增一款开源模型,阶跃星辰发布Step1X-Edit
  • 这些被低估的降血压运动,每天几分钟就管用
  • 江西省宁都县政协原二级调研员谢亦礼被查
  • “今日海上”对话“今日维也纳”,东西方艺术在上海碰撞
  • 中国驻英国大使郑泽光:中国需要世界,世界也需要中国