原创 【博客大赛】在小钢炮开发板上跑MicroPython

2016-5-16 10:30 4027 25 24 分类: MCU/ 嵌入式 文集: MicroPython

小钢炮开发板是个不错的开发板,它板载了磁力传感器、陀螺仪、温度传感器、湿度传感器、气压传感器,还有性能强劲的STM32F401RE。而这个MCU是MicroPython支持的型号,如果在小钢炮上用python来开发,想起来就很有意思。下面就介绍在小钢炮开发板上移植MicroPython的方法。

 

board.jpg
 
 
  • 首先要下载并安装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源码,打开 stmhal\boards\ 目录
  • 新建一个CANNON目录,将NUCLEO_F401RE下的文件复制到CANNON目录下
  • 如果GNU Tools for ARM已经添加到系统路径,就可以跳到步骤8,直接编译
  • 打开 stmhal 下的 makefile 文件,修改 CROSS_COMPILE = arm-none-eabi- 这一行,在 arm-none-eabi- 前添加编译器的实际路径,注意路径需要使用右斜杠
  • 在 stmhal 目录下,输入 make BOARD=CANNON,就可以编译了。不过这时编译出的代码是不能运行的,因为两个板子的参数不同。
  • 打开 stmhal\boards\CANNON目录,先修改文件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,但是这样就不能检测卡是否插入了。
      155843p4jfsu34m4zyllsj.jpg
    • 打开文件pins.cvs,这里预定义了GPIO的名称
      • 修改LED的GPIO为PB3
      • 如果还有时间和精力,可以适当修改其他GPIO
  • 现在可以再次编译源文件了。编译时建议在Linux下编译,因为速度快很多,在windows下编译速度很慢,需要等数分钟。
  • 准备3个短路块,连接P1,将BOOT0连接到VCC,BOOT1连接到GND。
  • 将开发板用macroUSB线连接到计算机,因为设置了BOOT0/BOOT1,所以上电后会进入DFU模式。在Windows下如果是第一次使用,会提示安装驱动,驱动程序就在DfuSe软件的安装目录下。使用DfuSe打开编译后的dfu文件,并下载到开发板。
    155928e4czciiz080m0ec1.jpg
  • 将BOOT0连接到GND,开发板重新上电。这时会自动安装USB磁盘,出现PYBFLASH驱动器。在windows下还会安装虚拟串口,如果找不到驱动程序,可以到新出现的PYBFLASH驱动器上查找。
  • 打开一个串口终端软件,如kitty、xshell、超级终端等,设置波特率为115200,就可以开始玩micropython了。

先试试直接控制LED
  1. import pyb
  2. pyb.LED(1).on()
  3. pyb.LED(1).off()
  4.  
复制代码


在试试用GPIO控制LED
  1. from pyb import Pin
  2. led=Pin.cpu.B3
  3. led.init(Pin.OUT_PP)
  4. led.value(1)
  5. led.value(0)
  6.  
复制代码

用PWM控制LED的亮度
  1. from pyb import Pin, Timer
  2.             
  3. tm2=Timer(2, freq=100)
  4. led=tm2.channel(2, Timer.PWM, pin=Pin.cpu.B3, pulse_width=100)
  5. led.pulse_width_percent(100)
  6. led.pulse_width_percent(1)
  7.  
复制代码

呼吸灯
  1. from pyb import Timer, Pin
  2.  
  3. tm2=Timer(2, freq=200)
  4. led=tm2.channel(2, Timer.PWM, pin=Pin.cpu.B3)
  5.  
  6. # LED breathing lamp
  7. ia = 1
  8. da = 1
  9. def fa(t):
  10.     global ia, da
  11.     if (ia==0)or(ia==100):
  12.         da=100-da
  13.     ia=(ia+da)%100
  14.     led.pulse_width_percent(ia)
  15.  
  16. tm1=Timer(1, freq=100, callback=fa)
  17.  
复制代码


更多的实验,包括传感器的实验,就等大家一起来完成和交流了。

文章评论4条评论)

登录后参与讨论

weijinke2008 2016-4-19 08:51

不错,有空试试~~

用户377235 2016-4-18 20:09

想买这块板子,请问有stm32F103VB型号的吗?QQ928020714

fhq1087_674203441 2016-4-18 10:29

挺好,支持一下

用户593939 2016-4-14 22:22

写的好,有机会测试一下板子。
相关推荐阅读
shaoziyang 2017-12-15 11:06
《micropython 入门指南》正式出版了
第一本专门介绍MicroPython的中文图书《MicroPython入门指南》由电子工业出版社正式出版了(各大书店和网络书店都有)。MicroPython是近年开源社区中最热门的项目之一,它功能强大...
shaoziyang 2017-11-01 15:30
《MicoPython入门指南》一书即将发行
《MicoPython入门指南》一书即将发行,这是第一本专业介绍MicroPython的中文书籍,请大家多关注和支持。​​...
shaoziyang 2017-07-13 19:50
micro:bit 专用电池扩展板
最近Microbit这么火,就想着要做点什么,于是就有了这个Microbit的专用电池扩展板。它完美配合原版的microbit,可以为microbit增加电池、蜂鸣器功能,功能上超过 MI:power...
shaoziyang 2017-06-13 09:09
用pyboard的dac播放音乐
官方的PyBoard带有DAC功能,使用DAC,我们可以播放简单的音乐。 先准备好两根铜丝,一个有源音箱,一个音频线。 然后从官方网站下载两个文件: http://micropython.org/...
shaoziyang 2017-06-13 09:03
microbit巡线小车 BoBBoT
BoBBoT 是一个使用 BBC micro:bit 控制的巡线小车套件,它很容易组装。 它特别为儿童设计,让孩子可以通过实践学习计算机科学概念。使用 BoBBoT 可以学习: 算法设计 (流程图和...
shaoziyang 2017-06-12 08:29
micropython升级到了 1.9.1
micropython升级到了 1.9.1,主要改进有: v1.9.1 修复了 stm32 的 USB 存储, lwIP 绑定和 VFS 问题 This release provides an imp...
我要评论
4
25
关闭 站长推荐上一条 /2 下一条