简 介: 对于截止到(2021-11-08 21:13:44)来自灵动的MicroPython在MM32F3277上的一致的基本功能进行测试。并给除了MicroPython的相关模块的の基本测试调用版本。
关键词
: MM32F3277,MicroPython
§01 设计要求
在 制作测试MM32F3277-MicroPython最小电路板 测试了基于MM32F3277的MicroPython测试板。也可以看到它的时钟是不需要。下面设计一个适应于面包板进行测试实验的MicroPython测试板。
一、资源设置
1、MicroPython支持模块
下面使用灵动苏勇提供的模块支持类别:
▲ 图1.1.1 MM32F3277中的模块
▲ 图1.1.2 MM32F3277七个UART对应的管脚
二、设计电路板
1、原理图
▲ 图1.2.1 原理图
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.4 设计的单面快速制版PCB图
存在的问题:
在上面设计中,依然存在的问题:就是没有将VSSDA引出,在外部信号输入的时候,没有信号底线。
三、焊接与调试
使用 一分钟制版法 ,在五分钟之后制作完电路板,进行焊接和调试。
1、焊接电路板
焊接测试电路板,如下图所示:
▲ 图1.3.1 焊接之后的测试电路板
2、测试电路板
(1)上电测试
施加+5V工作电压。测量板内3.3V的电源电压符合要求。
(2)下载MicroPython
下来来自于苏勇的MicroPython。这个版本需要外部晶体。
▲ 图1.3.2 使用MM32-LINK下载MicroPython
▲ 图1.3.3 下载MicroPython之后在晶体上测量到时钟信号
(3)测试RX1
MicroPython写入之后,在上电之后会发送出MicroPython的版本信息。可以在TX1上测量到该波形。
▲ 图1.3.4 上电后测量TX1上的波形
(4)测试REPL
连接测试版上的REPL接口(UART1)到计算机的串口终端,可以在电路板上电之后读取到版本信息。
▲ 图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、测试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高低电平操作
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)熄灭
四、测试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的输出波形
五、测试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)测试接收
使用短路子将 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转换数值与输出电压
二、测试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 测试结果
※ 测试总结 ※
对于截止到(2021-11-08 21:13:44)来自灵动的MicroPython在MM32F3277上的一致的基本功能进行测试。并给除了MicroPython的相关模块的の基本测试调用版本。
■ 相关文献链接:
● 相关图表链接:
- 图1.1.1 MM32F3277中的模块
- 图1.1.2 MM32F3277七个UART对应的管脚
- 图1.2.1 原理图
- 图1.2.2 快速制版单面PCB设计图
- 图1.2.3 将VDDA,VSSA采用0Ω电阻进行单独供电部分
- 图1.2.4 设计的单面快速制版PCB图
- 图1.3.1 焊接之后的测试电路板
- 图1.3.2 使用MM32-LINK下载MicroPython
- 图1.3.3 下载MicroPython之后在晶体上测量到时钟信号
- 图1.3.4 上电后测量TX1上的波形
- 图1.3.5 REPL 提示符号
- 图2.3.1 闪烁PB2对应的LED
- 图2.3.2 相邻GPIO高低电平操作
- 图2.3.3 将PB7接地可以观察到PB2(LED)熄灭
- 图2.3.4 测试DAC示例程序
- 图2.4.1 DAC0,DAC1的输出波形
- 图2.6.1 PA2(TX2)测量得到波形
- 图3.1.1 DAC转换数值与输出电压
- 图3.2.1 测试结果