本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:HonestQiao

前言

这次有幸获得MM32F5270开发板的试用,非常幸运。
收到板子后,眼前一亮,这块板子,做工精良,板子上附带的周边非常丰富,能有好多玩法,其中就有我较为熟悉的MPU6050。
查看官方提供的各项开发资料,发现苏勇大佬已经提供了micropython的移植,我对micropython也比较熟悉,于是玩起了micropython,并顺利读取MPU6050的数据,呈现到OLED1306液晶屏上。

硬件

  1. MM32F5270开发板
  2. MPU6050:开发板板载
  3. OLED1306:I2C接口
  4. MicroSD卡
  5. PWLink2
  6. Type-C数据线

查阅官方提供的原理图,了解到MPU6050的接线:

其接口对应于I2C1,PC6为SCL、PC7为SDA

我手头的OLED1306为I2C接口的,可以直接接到I2C的PC6、PC7。因为一个I2C接口,可以挂多个Slave设备。

需要注意的是,有的OLED1306是3.3V和5V通用的,但有的版本只支持3.3V,上5V会烧。所以,一般用开发板电源开关旁边的3.3V即可(黄色底座的)。

千万别粗心挂到舵机电源输出上:

因为涉及到micropython固件的烧录,所以需要用到PWLink2。
其接口,参考大佬们提供的即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Yz8mS0X-1666318825833)(https://pic4.zhimg.com/80/v2-04116367d66f55a277b1eb2369005fcb_1440w.webp)]

Type-C的数据线,用于连接电脑访问MicroPython的交互环境REPL,将其连接到开发板RESET按钮旁的USB UART即可。

软件

  1. 烧录软件1:Power Writer2,PWLink2官方创新工坊提供
  2. Ozone:Segger官方提供
  3. micropython-mm32F5移植版本:苏勇大佬提供
  4. mpu6050.py:MPU6.50的mpy封装,Adam Ježek大佬提供
  5. ssd1306.py:micropython官方提供
  6. oled_mpu6050.py:自己参考写的
  7. MobaXterm:终端工具,可以连接连接到MicroPython的交互环境REPL

完整的实例代码,可以从以下地址查看:https://gitee.com/honestqiao/mm32f5_micropytho_demo

定制MicroPython

苏勇大佬提供了micropython的MM32F5移植,代码库地址为:https://gitee.com/suyong_yq/micropython-su
Medivh大佬提供了一个开箱即用的Docker环境,启动就能编译,非常的方便:https://aijishu.com/a/1060000000344894

docker pull verdureorange/micropython_mm32
docker run -it --name mp_mm32 -v $(pwd)/root:/root verdureorange/micropython_mm32

其中包含了苏勇大佬提供的移植版本,位于:/micropython-su-master

需要注意的,这个移植的版本,非常精简,默认没有启动一些非常有用的扩展。
例如要驱动SSD1306,需要使用framebuf,默认的版本没有。
如果调用,会出现错误:OSError: 116
因此,可以根据需要,参考micropython官方的资料,进行一些定制。
要开启framebuf,需要在对应port的mpconfigport.h中,添加MICROPY_PY_FRAMEBUF的定义。
上面这个Docker环境也比较精简,vi也没有,于是通过下面的方式来处理:

cd /micropython-su-master/micropython-1.16/ports/mm32f5
echo '#define MICROPY_PY_FRAMEBUF                    (1)' >> mpconfigport.h

启用MICROPY_PY_FRAMEBUF,当需要有一个头文件的依赖,这个文件可以从micropython官方下载:https://github.com/micropython/micropython/blob/master/extmod/modframebuf.c,下载后,放置到 /micropython-su-master/micropython-1.16/extmod/目录即可。
然后对源文件做一下处理:(不处理,会出现modframebuf.c调用错误)

cd /micropython-su-master/micropython-1.16/ports/mm32f5
sed -i -e 's#ports/stm32/font_petme128_8x8.h#extmod/font_petme128_8x8.h#' ../../extmod/modframebuf.c

处理完后,即可进行编译:

cd /micropython-su-master/micropython-1.16/ports/mm32f5
make cross=1

编译完成后,会成功生成build-plus-f5270/firmware.elfbuild-plus-f5270/firmware.hex

把这两个文件拷贝出来备用。

使用Ozone和Power Write烧录

因为我的工作电脑是mbp,macOS环境的,所以想用找一个直接在macOS下面烧录的工具。不过试了JFlash和Ozone,没有成功,后续再测试一下openocd如何。

在Windows下面,也想用简单一点的工具烧录。
经过了解和实际测试,确定有两款工具可以使用。

  1. Ozone:一定要使用3.24b版本才行;用最新版本的就和在macOS上面一样,找不到PWLink2的USB设备。使用3.24b版本,也需要将MM32官方提供的JLink Pack中的定制内容拷贝过来才行。
  2. Power Writer:创新工坊提供的,PWLink2配合完美,下载最新版本即可使用,不需要任何额外的处理。

下面分别说明两种烧录方式:

Ozone烧录

  1. 从SEGGER官方下载v3.24b版本:https://www.segger.com/products/development-tools/ozone-j-link-debugger/#download-installation并安装
  2. 从灵动官方下载JLink Pack:https://www.mindmotion.com.cn/support/software/jlink_pack/
  3. 将JLink Pack解压后,将其中的JLinkDevices.xml和Devices/MindMotion拷贝到Ozone对应的目录即可:

  1. 打开Ozone,开启一个新的项目引导:

将会出现找到CMSID-DAP的提醒:

后续也会多次出现,一律点ACCEPT即可,然后NEXT即可。
如果不用V3.24b版本,则不会出现该提示,后续操作就不能正常进行。

  1. 在Device中,搜索MM32F5,并选择MM32F5277E9PV,其他默认即可:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWn5JLxd-1666318825835)(https://pic1.zhimg.com/80/v2-6d4ccf4d055fec993ad1f92b3da4da68_1440w.webp)]

如果没有做JLink Pack配置文件的拷贝,这里就找到不这个型号。

  1. 然后选择Target Interface为SWD,以及选中列表中出现的USB CMSIS-DAP:

如果不用V3.24b版本,这里的列表中就可能没有正确找到USB CMSIS-DAP设备。找不到设备,就无法下载烧录了。

  1. 在下一个界面中,选择之前编译成功的固件文件:firmware.elf

firmware.elf【注意,该文件需要放在全英文目录,否则可能读取错误。】

  1. 再Finish,就完成了配置,可以准备烧录了:

  1. 然后,点击绿色下箭头中的Download,就能开始烧录了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCVDqSbk-1666318825835)(https://pic3.zhimg.com/80/v2-f46641439cbdc40fb19ca3f0563082aa_1440w.webp)]

  1. 下一步会提示没有License,直接Yes通过无视即可:

  1. 等待下载完成即可:

使用Power Writer烧录

如果使用Power Writer进行烧录,就没有这么多麻烦的步骤了,简单快捷。

  1. 从Power Writer官方下载:https://docs.powerwriter.com/en/docs/powerwriter_for_arm/software/install并安装
  2. 在界面上,选择接口方式和PCU型号即可:

首次打开,可能会提示升级,按照提示升级即可。
设置完成后,右边信息窗口,会有对应的提示。

  1. 然后进入Program Memery界面,所有的操作都在这里了:

  1. 要烧录新的固件,需要先添加固件firmware.hex:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGNR7iBY-1666318825837)(https://pic1.zhimg.com/80/v2-cd42190cd5fe5a4aa165eaf6f0bc5170_1440w.webp)]

  1. 然后按照下面步骤操作一遍,即可下载:

MicroPython连接

烧录成功之后,就可以使用工具连接micropython的REPL界面。
需要注意的是,苏勇大佬提供的这个移植版本,需要插入一张SD卡,可以在卡上存储需要执行的py文件或者调用库,也可以读写该SD卡来存储文件,非常方便。另外,这张卡需要是FAT32格式的。
因为后面需要从MPU6050读取数据,以及驱动OLED1306,所以我们将各自的文件,先拷贝到SD卡的根目录备用。

  • MPU6050.py:https://github.com/adamjezek98/MPU6050-ESP8266-MicroPython/blob/master/mpu6050.py
  • ssd1306.py:https://github.com/micropython/micropython/blob/master/drivers/display/ssd1306.py

然后,将SD卡插入到开发板RESET按键旁边的插口即可准备使用。
重新上电后,就能通过Type-C连接USB UART口,来连到micropython了。

从 mobaxterm官方下载免费版本:https://mobaxterm.mobatek.net/download-home-edition.html
打开后,从会话中开启新的串口连接,选择好端口和速率115200:

连接成功后,回车,会显示>>,表示连接成功,可以操作了:

MPU6050数据读取

因为之前,我们已经把MPU6050的调用库mpu6050.py拷贝到SD卡上了,所以现在可以直接调用。
因为SCL对应PC6,SDA对应了PC7,所以现需要进行一些I2C初始化和设备扫描测试:

from machine import SoftI2C, Pin
scl = Pin('PC6')
sda = Pin('PC7')
i2c = SoftI2C(scl, sda)
print("I2C Devices: %s" % ",".join(["%s" % i for i in i2c.scan()]))

上述操作,将会显示当前连接的I2C设备:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JHox7c5T-1666318825838)(https://pic1.zhimg.com/80/v2-107b85121ef70d6b06deef22bd509514_1440w.webp)]

60对应0x30,一般为SSD1306
80对应0x50,为板载EEPROM
104对应0x68:为板载MPU6050

然后,我们再试一下,能否读取MPU6050的数据。

import mpu6050
accelerometer = mpu6050.accel(i2c)
accelerometer.get_values()

执行后,就能显示读取出数据。第一次读取,一般都返回0,后续就正常了。

现在,读取MPU6050数据正常了。

OLED1306驱动

类似MPU6050,SSD1306的驱动已经拷贝到了SD卡上,也可以直接调用了。
在上一步的基础上,进一步执行指令:

from ssd1306 import SSD1306_I2C
i2c.scan()
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0)
oled.text('MPU6050',40,20)
oled.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4DKzFJv-1666318825839)(https://pic3.zhimg.com/80/v2-f386acc7ade746d8094d97c46cacb3d2_1440w.webp)]

现在,SSD1306也可以正常调用了。
如果没有显示,注意连线是否正确。连线正确的话,i2c.scan()会输出带有60的信息。连线不正确则没有。

读取MPU6050数据呈现到OLED1306

基于以上的实验,可以将代码进行结合,实现读取MPU6050的数据,并呈现到OLED1306上:

from machine import SoftI2C, Pin
from ssd1306 import SSD1306_I2C
import mpu6050
import timeoled_width = 128
oled_height = 64scl = Pin('PC6')
sda = Pin('PC7')def draw_bg():oled.fill(0)oled.line(0, 0, oled_width-1, 0, 1)oled.line(0, 0, 0, oled_height-1, 1)oled.line(oled_width-1, 0, oled_width-1, oled_height-1, 1)oled.line(0, oled_height-1, oled_width-1, oled_height-1, 1)i2c = SoftI2C(scl, sda)
print("I2C Devices: %s" % ",".join(["%s" % i for i in i2c.scan()]))oled = SSD1306_I2C(oled_width, oled_height, i2c)
draw_bg()
oled.text('MPU6050',40,20)
oled.show()
time.sleep(3)for i in range(0,100):accelerometer = mpu6050.accel(i2c)vals = accelerometer.get_values()draw_bg()acx = vals["AcX"]acy = vals["AcY"]acz = vals["AcZ"]tmp = vals["Tmp"]gyx = vals["GyX"]gyy = vals["GyY"]gyz = vals["GyZ"]print(vals)# 0-127# 63-127draw_bg()oled.text('MPU6050',40,5)oled.text('AX:%03d' % acx,2,20)oled.text('AY:%03d' % acy,2,30)oled.text('AZ:%03d' % acz,2,40)oled.text('GX:%03d' % gyx,70,20)oled.text('GY:%03d' % gyy,70,30)oled.text('GZ:%03d' % gyz,70,40)oled.text('Temp:%02.1f' % tmp,25,55)    oled.show()time.sleep(1)

运行以上代码,然后轻轻晃动开发板,就能看到数据变化了:

视频效果如下:

完整的实例代码,可以从以下地址查看:https://gitee.com/honestqiao/mm32f5_micropytho_demo

总结+后续

经过初步的使用,对这块板子的感觉非常之后。一块小小的板子,内涵非常的丰富。使用上手,也非常的容易。
除了micropython,官方也提供了MindSDK等开发工具和资料,后续也会进一步研究学习。

【MM32F5270开发板试用】定制MicroPython及读取MPU6050数据到OLED1306相关推荐

  1. 【MM32F5270开发板试用】 MindSDK使用测评

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:胖墩墩 一.前言: 非常感谢极术社区和灵动微电子开展的MM32F5270开发板试用申请活动 ...

  2. 【MM32F5270开发板试用】手势传感PAJ7620U2的智能家居应用

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:风云再起 一.序 很高兴能参加极术社区联合灵动微电子组织的[灵动MM32F5270开发板试 ...

  3. 【MM32F5270开发板试用】RT-Thread SPI 驱动适配指南

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:xusiwei1236 本文记录了我在社区"Rice我叫加饭?"大佬移 ...

  4. 【MM32F5270开发板试用】播放TF卡WAV格式音乐,I2S驱动CS4344

    [MM32F5270开发板试用]播放TF卡WAV格式音乐,I2S驱动CS4344 上四篇文章: [MM32F5270开发板试用]一.依靠SPI_SD,移植FatFs文件系统 [MM32F5270开发板 ...

  5. 【MM32F5270开发板试用】快速移植STM32应用到MM32F5270(以OLED为例)

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:@#@ 本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活 ...

  6. 【MM32F5270开发板试用】GPIO输入+EXTI外部中断例程demo试用

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:Zeee 前言: 首先,感谢灵动微电子与极术社区给予宝贵的试用机会.借助本次对Plus-F ...

  7. 【MM32F5270开发板试用】六、如何用 星辰内核 + 国产RTOS 通过I2S播放 “星辰大海”

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:Magicoe是攻城狮 这个demo和想法是参考了大神的文章 https://aijish ...

  8. 【MM32F5270开发板试用】二、探测环境温度和光照度参数

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:Red Sensor 环境参数感知 ADC 相关的硬件信息 ADC1 有 19 个通道, ...

  9. 【MM32F5270开发板试用】移植Google Chrome小恐龙游戏到MM32F5270

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:曾是一颗薏米 一.项目背景 在几年前,Google 给 Chrome 浏览器加了一个有趣的 ...

最新文章

  1. 无忧考吧2017二级java_二级Java模拟软件|无忧考吧二级Java语言程序设计模拟软件下载 v2017.03官方版 - 121下载站...
  2. 防热服的设计数学建模_全国大学生数学建模和电子设计赛,这所驻青高校获奖山东最多...
  3. 前端学习(3026):vue+element今日头条管理-让导航栏和路由对应起来
  4. SpringBoot 2.0 开发案例之参数传递的正确姿势
  5. 混乱开发,既伤身体又伤感情
  6. 洛谷——P1109 学生分组
  7. php swoole多进程,PHP基于swoole多进程操作示例
  8. Trains 归纳法
  9. oracle传输表空间功能测试(含详细过程)
  10. abaqus失效单元删除_[转载]abaqus单元删除的一般方法
  11. Android Studio安装以及Fetching android sdk component information超时的解决方案
  12. Windows特殊字符
  13. 虚拟机(vmware)添加新硬盘
  14. sklearn 纠偏
  15. LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
  16. redhat操作系统升级红帽6升级到红帽7linux升级
  17. Linux文本三剑客
  18. 机器人自动化中的通讯手段
  19. js从路径中遍历出文件或图片名称,js截取路径中的图片和文件名称
  20. 淘宝sdk2.0下载安装使用

热门文章

  1. 别说我没告诉你,真心推荐4款免费动画制作软件
  2. 自建游戏加速器教程(国内玩家联机)
  3. Linux电脑睡眠后黑屏打不开,Win10系统下电脑休眠或睡眠无法唤醒屏幕黑屏打不开的解决方法...
  4. java成神之路——网络编程
  5. win10全屏之后任务栏不消失的问题
  6. 点滴:均线交易策略代码的参考
  7. 看视频可以倍速播放的(主流播放器都可以)
  8. 谷歌浏览器插入百度翻译插件
  9. 微信小程序父子组件通信详解
  10. Mozilla里永久删除的邮件如何恢复