Linux下编译比较简单,而且如果经常用Linux编译的话相信你可以很快搞定,因此只分享下windows下的编译:
micropython源码tool下面提供了dfu.py会将.bin转换成dfu格式文件,用于dfu方式下载。
后面我会移植到canoon蓝牙小钢炮板子上。目前可参考版主的帖子:
https://bbs.eeworld.com.cn/thread-487758-1-1.html
但里面有一些错误更正后过程如下:
- 新建一个CANNON目录,将NUCLEO_F401RE下的文件复制到CANNON目录下
- 如果GNU Tools for ARM已经添加到系统路径,就可以跳过此步,直接编译:打开 stmhal 下的 makefile 文件,修改 CROSS_COMPILE = arm-none-eabi- 这一行,在 arm-none-eabi- 前添加编译器的实际路径
- 打开 stmhal\boards\CANNON目录,先修改文件stm32f4xx_hal_conf.h
找到#define
HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator
将数字8000000改为16000000,因为小钢炮使用了16M的外部时钟
打开文件 mpconfigboard.h
找到#define MICROPY_HW_CLK_PLLM (8) 将数字8改为16
修改#define MICROPY_HW_HAS_SWITCH (1) . 将1改为0,因为小钢炮上没有用户按键
修改#define MICROPY_HW_LED1 (pin_A5) // Green LD2 LED on Nucleo 将pin_A5改为pin_B3,因为两个板子的LED使用不同的GPIO
修改#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
将BSRRL改为BSRRH
修改#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
将BSRRH改为BSRRL,这是因为两个板子的LED驱动方式不同
添加下面RTC的定义
// The pyboard has a 32kHz crystal for the RTC
#define MICROPY_HW_RTC_USE_LSE (1)
#define MICROPY_HW_RTC_USE_US (0)
#define MICROPY_HW_RTC_USE_CALOUT (1)
添加sdcard的定义 ,因为小钢炮支持TF(macroSD)卡。如果不想改线,或者不需要使用TF卡,可以忽略这一步和下面一步。
#define MICROPY_HW_HAS_SDCARD (1)
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_A15)
#define MICROPY_HW_SDCARD_DETECT_PULL (GPIO_PULLUP)
#define MICROPY_HW_SDCARD_DETECT_PRESENT (GPIO_PIN_RESET)
小钢炮开发板没有做TF卡的插入检测,所以需要自己飞一根线。开发板上A15(50)和B4(56)是空脚,我选择了A15,因为它更容易焊接一些。如果不想改线,可以修改sdcard.c中的sdcard_is_present函数,让它总是返回true,但是这样就不能检测卡是否插入了。
打开文件pins.cvs,这里预定义了GPIO的名称
4. mingw32-make.exe BOARD=CANNON 编译
5. 用DFU模式下载固件
使用ST DFUSe Demo时 在upgrade or varifacation里选择固件后,要点击upgrade才会烧写到MCU里。
本帖最后由 guo8113 于 2016-4-23 00:04 编辑