测试MM32F3277-MicroPython 2021-11-17 版本
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试MM32F3277-MicroPython 2021-11-17 版本相关的知识,希望对你有一定的参考价值。
简 介: 初步对于MindMotion给出的MM32F3277上的MicroPython移植的程序中SPI的功能进行了测试。并给出了其中出现的问题以及修改的建议。
关键词
: MM32F3277,MicroPython,MindMotion
§01 增加SPI功能
在今天(2021-11-17)收到MindMotion Suyong发送的MM32F3277的MicroPython的移植版本。其中增加了对于SPI功能的支持。
▲ 图1.1 对于SPI的支持
在 在mm32f3270上为micropython创建SPI模块 SuYong给出了SPI的移植方法总结。
一、功能调用
1、管脚定义
const machine_hw_spi_obj_t hw_spi_0 =
.base = &machine_hw_spi_type ,
.sck_pin_obj = &pin_PA5, .sck_pin_af = GPIO_AF_5,
.mosi_pin_obj = &pin_PA7, .mosi_pin_af = GPIO_AF_5,
.miso_pin_obj = &pin_PA6, .miso_pin_af = GPIO_AF_5,
.spi_port = SPI1, .spi_irqn = SPI1_IRQn,
.spi_id = 0u, .conf = &machine_hw_spi_conf[0];
const machine_hw_spi_obj_t hw_spi_1 =
.base = &machine_hw_spi_type ,
.sck_pin_obj = &pin_PA3, .sck_pin_af = GPIO_AF_5,
.mosi_pin_obj = &pin_PB4, .mosi_pin_af = GPIO_AF_5,
.miso_pin_obj = &pin_PB3, .miso_pin_af = GPIO_AF_5,
.spi_port = SPI2, .spi_irqn = SPI2_IRQn,
.spi_id = 1u, .conf = &machine_hw_spi_conf[1];
const machine_hw_spi_obj_t hw_spi_2 =
.base = &machine_hw_spi_type ,
.sck_pin_obj = &pin_PC9, .sck_pin_af = GPIO_AF_5,
.mosi_pin_obj = &pin_PA8, .mosi_pin_af = GPIO_AF_5,
.miso_pin_obj = &pin_PB9, .miso_pin_af = GPIO_AF_5,
.spi_port = SPI3, .spi_irqn = SPI3_IRQn,
.spi_id = 2u, .conf = &machine_hw_spi_conf[2];
const machine_hw_spi_obj_t * machine_hw_spi_objs[] =
&hw_spi_0,
&hw_spi_1,
&hw_spi_2,
;
根据上面代码可以看到对应的SPI端口定义如下:
SPI管脚 | SCK | MOSI | MISO |
---|---|---|---|
SPI0 | PA5 | PA7 | PA6 |
SPI1 | PA3 | PB4 | PB3 |
SPI2 | PC9 | PA8 | PB9 |
2、程序界面
关于程序调用,可以参照MicroPython官方说明:
class SPI – a Serial Peripheral Interface bus protocol (controller side)
二、功能测试
1、下载MicroPython程序
可以从 MindMotion-2021-11-17 下载对应的版本。
使用 MM23-Link 将上述程序下载到 MM32F3277实验电路板(带有SD卡) 中进行测试。
▲ 图1.2.1 实验电路板
2、上电运行
通过 CH340C制作的MicroPython的ESP8266,ESP32下载器 连入电脑。利用 STM32 Bootloader 软件作为界面,与MicroPython REPL进行交互。
(1) 上电显示
下面是MM32F3277 MicroPython上电后通过REPL输出的内容。
>> Open COM8, baud : 115200
[Y] sdcard ready.
[Y] file system on sdcard ready.
[Y] run the main.py on disk ...
[Y] done. 1
MicroPython v1.16 on 2021-11-17; MB_F3270 with MM32F3277G7P
>>>
(2) 交互信息
输入import machine 指令,通过 dir 获得machine可以使用的模块。下面可以看到该版本中,相比于之前 制作灵动单片机MM32F3277 测试版 已经增加了 SPI, SoftSPI两个功能。
>>> import machine
>>> dir(machine)
['__name__', 'ADC', 'DAC', 'Pin', 'SDCard', 'SPI', 'SoftSPI', 'UART', 'freq', 'mem16', 'mem32', 'mem8']
>>>
§02 测试SPI
一、基本功能
1、REPL交互
通过REPL输入命令,查看machine中的功能。
>>> dir(machine.SPI)
['read', 'readinto', 'write', 'LSB', 'MSB', 'deinit', 'init', 'write_readinto']
>>> dir(machine.SoftSPI)
['read', 'readinto', 'write', 'LSB', 'MSB', 'deinit', 'init', 'write_readinto']
>>>
2、print SPI
(1) 测试代码
from machine import Pin,SPI
import utime
print(SPI(0))
print(SPI(1))
print(SPI(2))
(2) 测试结果
>> Download MicroPython : 22 lines/504 characters.
>> -------------------------------------------------------------------------
SPI(id=0, baudrate=80000000, polarity=0, phase=0)
SPI(id=1, baudrate=80000000, polarity=0, phase=0)
SPI(id=2, baudrate=80000000, polarity=0, phase=0)
>>>
3、基本输出波形
(1) 测试代码
from machine import Pin,SPI
import utime
spi = SPI(0)
print("Begin to send 0x55 from SPI0.\\r\\n")
buf = bytes((0x55,0xaa))
while True:
spi.write(buf)
utime.sleep_ms(10)
(2) 测试结果
测量SCK(A05),MOSI(A07)信号波形。波形如下图所示:
▲ 图2.1.1 SCK(A05)与MOSI(A07)的波形
可以看到连续两个信号之间发送的时间间隔为1.38us。
(3)建议改进
为了提高发送的速度,建议能够使用DMA,使得SPI发送byte连续起来。
比如在 WS2812串行可控彩色LED灯珠 测试了 ESP32的MicroPython的SPI特性,它可以连续发送SPI字节,这样便可以利用SPI驱动WS2812LED灯珠了。
4、设置波特率
(1)测试代码与结果
from machine import Pin,SPI
import utime
spi = SPI(0, baudrate=10000)
print("Begin to send 0x55 from SPI0.\\r\\n")
buf = bytes((0x55,0xaa))
while True:
spi.write(buf)
utime.sleep_ms(10)
在波特率为10000下输出的SCK(A05),MOSI(A07)的波形,通过波形可以看到:
- SCK的频率为10kHz
- 两个发送数据之间的时间间隔为:248us。
▲ 图2.1.2 在波特率为10000下输出的SCK(A05),MOSI(A07)的波形
(2)存在问题
对比在不同发送波特率下,两次发送数据之间的时间间隔不同。
为什么两次发送数据之间的时间间隔出现不同呢?
5、不同SPI参数
(1)修改Polarity=1
from machine import Pin,SPI
import utime
spi = SPI(0, baudrate=10000, polarity=1, phase=0)
print("Begin to send 0x55 from SPI0.\\r\\n")
buf = bytes((0x55,0xaa))
while True:
spi.write(buf)
utime.sleep_ms(10)
▲ 图2.1.3 Polarity=1情况下对应的SCK,MOSI波形
(2)修改Phase=1
▲ 图2.1.4 Polarity=1,Phase=1对应的SCK,MOSI波形
6、测试接收
(1)测试代码和结果
from machine import Pin,SPI
import utime
spi = SPI(0, baudrate=10000, polarity=1, phase=1)
print("Begin to send 0x55 from SPI0.\\r\\n")
print(spi)
buf = bytes((0x55,0xaa))
while True:
utime.sleep_ms(500)
以上是关于测试MM32F3277-MicroPython 2021-11-17 版本的主要内容,如果未能解决你的问题,请参考以下文章
测试MM32F3277-MicroPython 2021-11-17 版本
设计带有SD卡的 MM32F3277 MicroPython 实验板
测试MM32F3277 MicroPython 的定时器功能
测试逐飞的MM32F3277 MicroPython开发板的基本功能