测试MM32F3277-MicroPython 2021-11-17 版本

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试MM32F3277-MicroPython 2021-11-17 版本相关的知识,希望对你有一定的参考价值。

增加SPI功能
文章目录
功能调用
功能测试
测试SPI
基本功能
极限测试
测试SoftSPI
基本测试
测试问题
测试错误
建议修改
测试总结

简 介: 初步对于MindMotion给出的MM32F3277上的MicroPython移植的程序中SPI的功能进行了测试。并给出了其中出现的问题以及修改的建议。

关键词 MM32F3277MicroPythonMindMotion

 

§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端口定义如下:

【表1-1-1 SPI端口定义】

SPI管脚SCKMOSIMISO
SPI0PA5PA7PA6
SPI1PA3PB4PB3
SPI2PC9PA8PB9

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开发板的基本功能

测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本

MM32F3277 MicroPython移植过程中对应的接口文件