MM32F3277 MicroPython 实验板设计和软件测试

简 介: 对于截止到(2021-11-08 21:13:44)来自灵动的MicroPython在MM32F3277上的一致的基本功能进行测试。并给除了MicroPython的相关模块的の基本测试调用版本。

关键词 MM32F3277MicroPython

设计要求
文章目录
资源设置
设计电路板
焊接与调试
测试MicroPython
基本信息测试
测试utime
测试Pin
测试DAC
测试ADC
测试UART
综合测试
测试DAC输出曲线
测试DAC,ADC
测试总结

 

§01 计要求


   制作测试MM32F3277-MicroPython最小电路板 测试了基于MM32F3277的MicroPython测试板。也可以看到它的时钟是不需要。下面设计一个适应于面包板进行测试实验的MicroPython测试板。

一、资源设置

1、MicroPython支持模块

  下面使用灵动苏勇提供的模块支持类别:

▲ 图1.1.1 MM32F3277中的模块

▲ 图1.1.1 MM32F3277中的模块

▲ 图1.1.2 MM32F3277七个UART对应的管脚

▲ 图1.1.2 MM32F3277七个UART对应的管脚

二、设计电路板

1、原理图

▲ 图1.2.1 原理图

▲ 图1.2.1 原理图

2、PCB

▲ 图1.2.2 快速制版单面PCB设计图

▲ 图1.2.2 快速制版单面PCB设计图

3、修正版本

  在上面设计中,对于模拟电源部分(VDDA,VSSA)没有能够单独供电,这将会影响ADC,DAC信号的性能。在下面版本中,将VDDA,VSSA单独进行供电。

AD\MM32\TestMM32\TestMM32MicroPythonPIN.SchDoc

▲ 图1.2.3 将VDDA,VSSA采用0Ω电阻进行单独供电部分

▲ 图1.2.3 将VDDA,VSSA采用0Ω电阻进行单独供电部分

▲ 图1.2.4 设计的单面快速制版PCB图

▲ 图1.2.4 设计的单面快速制版PCB图

  存在的问题:
  在上面设计中,依然存在的问题:就是没有将VSSDA引出,在外部信号输入的时候,没有信号底线。

三、焊接与调试

  使用 一分钟制版法 ,在五分钟之后制作完电路板,进行焊接和调试。

1、焊接电路板

  焊接测试电路板,如下图所示:

▲ 图1.3.1 焊接之后的测试电路板

▲ 图1.3.1 焊接之后的测试电路板

2、测试电路板

(1)上电测试

  施加+5V工作电压。测量板内3.3V的电源电压符合要求。

(2)下载MicroPython

  下来来自于苏勇的MicroPython。这个版本需要外部晶体。

▲ 图1.3.2 使用MM32-LINK下载MicroPython

▲ 图1.3.2 使用MM32-LINK下载MicroPython

▲ 图1.3.3 下载MicroPython之后在晶体上测量到时钟信号

▲ 图1.3.3 下载MicroPython之后在晶体上测量到时钟信号

(3)测试RX1

  MicroPython写入之后,在上电之后会发送出MicroPython的版本信息。可以在TX1上测量到该波形。

▲ 图1.3.4 上电后测量TX1上的波形

▲ 图1.3.4 上电后测量TX1上的波形

(4)测试REPL

  连接测试版上的REPL接口(UART1)到计算机的串口终端,可以在电路板上电之后读取到版本信息。

▲ 图1.3.5 REPL 提示符号

▲ 图1.3.5 REPL 提示符号

 

§02 测试MicroPython


  据苏勇反馈的信息,现在这个版本MicroPython已经支持一下模块:Pin、ADC、UART、SDCard、utime。模块的使用遵循着 MicroPython官网 给出的协议。下面对于现在的版本进行测试。

一、基本信息测试

1、测试代码

from machine import Pin,ADC,UART,freq
import machine
import utime

dir(machine)
dir(utime)

freq()

2、测试结果

Reset MicroPython...
Wait for MicroPython comeback...
Download MicroPython : 9 lines/109 characters.
Begin to download programm...
-------------------------------------------------------------------------

['__name__', 'ADC', 'Pin', 'SDCard', 'UART', 'freq', 'mem16', 'mem32', 'mem8']
['__name__', 'sleep', 'sleep_ms', 'sleep_us', 'ticks_add', 'ticks_cpu', 'ticks_diff', 'ticks_ms', 'ticks_us']
96000000
>>> 

  从上面可以看到,内部的OSC的频率为96MHz。

二、测试utime

1、测试代码

from machine import Pin,ADC,UART,freq
import utime

while True:
    print('A')
    utime.sleep_ms(100)

2、测试结果

  REPL接口输出’A’,每隔100ms输出一个数字。

三、测试Pin

  测试GPIO的输入输出功能。

1、测试输出

  根据苏勇反馈的信息:

from machine import Pin

pin0 = Pin('PB2', mode=Pin.OUT_PUSHPULL)
pin0(1)
pin0.low()

  测试GPIO对应的输出功能。

(1)测试代码
from machine import Pin,ADC,UART,freq
import utime

led = Pin('PB2', Pin.OUT_PUSHPULL)

while True:
    led(1)
    utime.sleep_ms(100)
    led(0)
    utime.sleep_ms(100)
(2)测试结果

▲ 图2.3.1  闪烁PB2对应的LED

▲ 图2.3.1 闪烁PB2对应的LED

2、测试IO操作最短时间

  通过测试两次IO的高低电平的变化,来测试在MicroPython下对于IO口的最短操作时间。

(1)测试代码
from machine import Pin,ADC,UART,freq
import utime

led = Pin('PB2', Pin.OUT_PUSHPULL)

while True:
    led(1)
    led(0)
(2)测试结果

  通过测量LED端口的变化波形来看,执行初次GPIO操作所需要的时间大约为:17 μ s \mu s μs

▲ 图2.3.2 相邻GPIO高低电平操作

▲ 图2.3.2 相邻GPIO高低电平操作

3、测试输入功能

(1)测试代码
from machine                import Pin
import utime

led = Pin('PB2', Pin.OUT_PUSHPULL)
btn = Pin('PB7', Pin.IN_PULLUP)

print("Test Pin input and output.")

while True:
    if btn.value() > 0:
        led.high()
    else: led.low()
(2)测试结果

  使用杜邦线将 PB7 接地,可以观察到LED(PB2) 熄灭。

▲ 图2.3.3  将PB7接地可以观察到PB2(LED)熄灭

▲ 图2.3.3 将PB7接地可以观察到PB2(LED)熄灭

四、测试DAC

▲ 图2.3.4 测试DAC示例程序

▲ 图2.3.4 测试DAC示例程序

1、设置输出

DAC端口:
DAC0:PA4
DAC1:PA5
(1)测试代码
from machine                import Pin,ADC,DAC

dac0 = DAC(0)
dac1 = DAC(1)
print('Test DAC ...')

dac0.write_u16(0x800)
dac1.write_u16(0x400)
(2)测试结果

  使用数字万用表测量:

DAC输出电压:
DAC0(PA4):1.649V
DAC1(PA5): 0.825V

2、输出电压曲线

(1)测试代码
from machine                import Pin,ADC,DAC
from math                   import *

dac0 = DAC(0)
dac1 = DAC(1)
print('Test DAC ...')

angle = [int((sin(i * pi * 2 / 100)+1.0)/2*0x600+0x200) for i in range(100)]
print(angle)

while True:
    for a in angle:
        dac0.write_u16(a)
        dac1.write_u16(0xa00 - a)
(2)测试结果

  使用示波器测量 DAC0,DAC1的波形。

▲ 图2.4.1 DAC0,DAC1的输出波形

▲ 图2.4.1 DAC0,DAC1的输出波形

五、测试ADC

1、测试ADC0

from machine                import Pin,ADC,DAC
import utime

adc0 = ADC(0, init=True)

while True:
    print(adc0.read_u16())
    utime.sleep_ms(200)

  在PA0,输入直流电压,可以测试到输出0x0 ~ 0xffff数值。输出数据是右靠齐。

  注意:第一个ADC初始化的时候,需要将init=True参数代入。

2、ADC对应的端口

  ADC总共有16个通道,对应的外部端口分别是:

ADC端口:
CH0~7:PA0~PA7
CH8,CH9:PB0,PB1
CH10~CH13:PC0~PC3
CH14,CH15:NULL

六、测试UART

1、UART端口

UART端口(RX,TX):
UART1:PA10, PA9
UART2:PA3,PA2
UART3:PB11,PB10
UART4:PC11,PC10
UART5:PD2,PC12
UART6:PC7,.PC6
UART7:PE7,PE8
UART8:PD1,PD0

2、测试UART2

(1)测试发送
from machine                import Pin,UART
import utime

uart2 = UART(1, 115200)

print('Test UART.')

while True:
    _ = uart2.write(b'U')
    utime.sleep_ms(10)

  在PA2(TX2)测量输出波形。

▲ 图2.6.1 PA2(TX2)测量得到波形

▲ 图2.6.1 PA2(TX2)测量得到波形

(2)测试接收

  使用短路子将 RXD3与RXD1连接在一起,也就是将REPL的接收端口RXD1连接在UART3的接收端口。

Ⅰ.测试代码
from machine                import Pin,UART
import utime

uart2 = UART(2, 115200)

print('Test UART.')
buf = bytes(0)

while True:
    if uart2.any():
        buf = buf + uart2.read(uart2.any())

        if buf[-1] == 13:
            print(int(buf))

            buf = bytes(0)

    utime.sleep_ms(10)
Ⅱ.测试结果
>> Reset MicroPython...
>> Wait for MicroPython coming back...
>> Download MicroPython : 33 lines/707 characters.
>> -------------------------------------------------------------------------

Test UART.
333
3333
123
Traceback (most recent call last):
  File "<stdin>", line 22, in <module>
ValueError: invalid syntax for integer
>>> 

 

§03 合测试


一、测试DAC输出曲线

  通过UART3送入DAC转换数字,使用数字万用表测量DAC0输出的电压,并绘制输出曲线。

1、测试代码

from headm import *
from tsmodule.tsstm32       import *

writedim = list(range(0, 0xfff, 40))

vdim = []

for w in writedim:
    stm32cmd('SENDC%03d\r'%w)
    time.sleep(1.5)

    meter = meterval()
    vdim.append(meter[0])

plt.plot(writedim, vdim)
plt.xlabel("Number")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()

printf('\a')

2、测试结果

  下面得到了DAC的转换数值与输出电压之间的关系。可以看到他们之间呈现非常良好量e线性关系。

▲ 图3.1.1 DAC转换数值与输出电压

▲ 图3.1.1 DAC转换数值与输出电压

二、测试DAC,ADC

1、测试代码

(1)MicroPython程序
from machine                import DAC,ADC
import utime

adc0 = ADC(0, init=True)
dac0 = DAC(0)

vdim = []
outdim = list(range(0, 0xfff, 10))

print("Test DAC,ADC...")

for o in outdim:
    dac0.write_u16(o)
    utime.sleep_ms(2)
    vdim.append(adc0.read_u16())

print(vdim)
(2)绘制结果程序
from headm import *
from tsmodule.tsstm32       import *

stm32cmd('COPY')

time.sleep(.1)
allstr = clipboard.paste()

startid = allstr.find('[')
endid = allstr.find(']')

if startid < 0 or endid < 0:
    printf("No data.\a")
    exit()

datastr = [int(s) for s in allstr[startid + 1 : endid].split(',')]
printf(datastr)

plt.plot(datastr)
plt.xlabel("Number")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()

2、测试结果

▲ 图3.2.1 测试结果

▲ 图3.2.1 测试结果

 

试总结 ※


  于截止到(2021-11-08 21:13:44)来自灵动的MicroPython在MM32F3277上的一致的基本功能进行测试。并给除了MicroPython的相关模块的の基本测试调用版本。

文章目录
设计要求
资源设置
MicroPython支持模块
设计电路板
原理图
PCB
修正版本
焊接与调试
焊接电路板
测试电路板
上电测试
下载MicroPython
测试RX1
测试REPL
02 测试MicroPython
基本信息测试
测试代码
测试结果
测试utime
测试代码
测试结果
测试Pin
测试输出
测试代码
测试结果
测试IO操作最短时间
测试代码
测试结果
测试输入功能
测试代码
测试结果
测试DAC
设置输出
测试代码
测试结果
输出电压曲线
测试代码
测试结果
测试ADC
测试ADC0
ADC对应的端口
测试UART
UART端口
测试UART2
测试发送
测试接收
测试代码
测试结果
综合测试
测试DAC输出曲线
测试代码
测试结果
测试DAC,ADC
测试代码
MicroPython程序
绘制结果程序
测试结果
测试总结


■ 相关文献链接:

● 相关图表链接:

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值