小钢炮CANNON
直播中

zhangyadong300

11年用户 232经验值
擅长:MEMS/传感技术 嵌入式技术 制造/封装 模拟技术 光电显示 存储技术 接口/总线/驱动 控制/MCU CRF/无线
私信 关注
[话题]

【CANNON试用体验】移植MicroPython到小钢炮(转)

本帖最后由 zhangyadong300 于 2016-4-16 13:05 编辑

----------------转自dcexpert【MicroPython】移植到小钢炮开发板----------------

为本坛小钢炮玩家提供一个思路,已征得原作者同意。如果论坛不允许转载请联系我删除!!!

Micro Python运行在微控制器上的Python。遵守MIT协议。由剑桥大学的理论物理学家乔治·达明设计。和Arduino类似,但Micro Python更强大。




  • 首先要下载并安装GNU Tools for ARM Embedded Processors。
    https://launchpad.net/gcc-arm-embedded
  • 下载并安装ST的DfuSe软件,http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916
  • 下载MicroPython的源码,micropython-master.zip
  • 展开MicroPython源码,打开 stmhalboards 目录
  • 新建一个CANNON目录,将NUCLEO_F401RE下的文件复制到CANNON目录下
  • 如果GNU Tools for ARM已经添加到系统路径,就可以跳到步骤8,直接编译
  • 打开 stmhal 下的 makefile 文件,修改 CROSS_COMPILE = arm-none-eabi- 这一行,在 arm-none-eabi- 前添加编译器的实际路径,注意路径需要使用右斜杠
  • 在 stmhal 目录下,输入 make BOARD=CANNON,就可以编译了。不过这时编译出的代码是不能运行的,因为两个板子的参数不同。
  • 打开 stmhalboardsCANNON目录,先修改文件STM32f4xx_hal_conf.h
    • 找到#define HSI_VALUE    ((uint32_t)8000000)将数字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的名称
      • 修改LED的GPIO为PB3
      • 修改SW的GPIO为PC13
      • 如果还有时间和精力,可以适当修改其他GPIO

  • 现在可以再次编译源文件了。编译时建议在Linux下编译,因为速度快很多,在windows下编译速度很慢,需要等数分钟。
  • 准备3个短路块,连接P1,将BOOT0连接到VCC,BOOT1连接到GND。
  • 将开发板用macroUSB线连接到计算机,因为设置了BOOT0/BOOT1,所以上电后会进入DFU模式。在Windows下如果是第一次使用,会提示安装驱动,驱动程序就在DfuSe软件的安装目录下。使用DfuSe打开编译后的dfu文件,并下载到开发板。
    file:///F:/szy/F%E8%AE%BA%E5%9D%9B/micropython/%E5%9C%A8%E5%B0%8F%E9%92%A2%E7%82%AE%E5%BC%80%E5%8F%91%E6%9D%BF%E4%B8%8A%E8%BF%90%E8%A1%8CMicroPython/2.jpg
  • 将BOOT0连接到GND,开发板重新上电。这时会自动安装USB磁盘,出现PYBFLASH驱动器。在windows下还会安装虚拟串口,如果找不到驱动程序,可以到新出现的PYBFLASH驱动器上查找。
  • 打开一个串口终端软件,如kitty、xshell、超级终端等,设置波特率为115200,就可以开始玩micropython了。


先试试直接控制LED
  • import pyb
  • pyb.LED(1).on()
  • pyb.LED(1).off()


复制代码


在试试用GPIO控制LED。
  • from pyb import Pin
  • led=Pin.cpu.B3
  • led.init(Pin.OUT_PP)
  • led.value(1)
  • led.value(0)

复制代码


用PWM控制LED的亮度
  • from pyb import Pin, timer
  • tm2=Timer(2, freq=100)
  • led=tm2.channel(2, Timer.PWM, pin=Pin.cpu.B3, pulse_width=100)
  • led.pulse_width_percent(100)
  • led.pulse_width_percent(1)


复制代码



呼吸灯
  • # main.py -- put your code here!
  • from pyb import Timer, Pin
  • tm2=Timer(2, freq=200)
  • led=tm2.channel(2, Timer.PWM, pin=Pin.cpu.B3)
  • # LED breathing lamp
  • ia = 1
  • da = 1
  • def fa(t):
  •     global ia, da
  •     if (ia==0)or(ia==100):
  •         da=100-da
  •     ia=(ia+da)%100
  •     led.pulse_width_percent(ia)
  • tm1=Timer(1, freq=100, callback=fa)


复制代码



更多使用方法可以参考MicroPython网站的文档,以及【MicroPython】教程。
  • 编译后的固件文件(dfu格式),
  • 开发板说明文件,展开后复制到micropython的stmhalboards目录下,

更多回帖

发帖
×
20
完善资料,
赚取积分