测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本相关的知识,希望对你有一定的参考价值。
简 介: 对于初步实现的MicroPython的版本进行了测试。可以看到这个版本在MCU的硬件层面还存在BUG,在实际管脚上尚无法输出对应的PWM波形。
关键词
: MM32,MicroPython,PWM
§01 MM32 Micropython
在今天早上(2021-11-20)MindMotion SuYong发送过来新一版本,增加了PWM的功能。
一、版本介绍
下面是Suyong对于该版本的微信说明。
微蓝[SY]:
这个PWM跟micropython官网上的不一样。官网上用的是rp2的实现, 但micropython代码仓库里还有esp32和esp8266的实现。我选择了后者, 看起来更符合正常的使用习惯
1、SuYong测试结果
▲ 图1.1.1 测试版本的结果
缺少信息: SunYong并没有发送过来的关于PWM的管脚分配信息
后来SuYong将machine_pwm的声明发送过来,如下:
/* for PWM. */
machine_pwm_port_conf_t machine_pwm_port_conf[2];
machine_pwm_ch_conf_t machine_pwm_ch_conf[8];
const machine_pwm_obj_t pwm_0 = .base = &machine_pwm_type , .pwm_pin_obj = &pin_PA6,
.pwm_pin_af = GPIO_AF_2, .tim_port = TIM3,
.port_conf = &machine_pwm_port_conf[0],
.tim_ch = 0u, .ch_conf = &machine_pwm_ch_conf[0], .pwm_id = 0u;
const machine_pwm_obj_t pwm_1 = .base = &machine_pwm_type , .pwm_pin_obj = &pin_PA7,
.pwm_pin_af = GPIO_AF_2, .tim_port = TIM3,
.port_conf = &machine_pwm_port_conf[0],
.tim_ch = 1u, .ch_conf = &machine_pwm_ch_conf[1], .pwm_id = 1u;
const machine_pwm_obj_t pwm_2 = .base = &machine_pwm_type ,
.pwm_pin_obj = &pin_PB0, .pwm_pin_af = GPIO_AF_2,
.tim_port = TIM3, .port_conf = &machine_pwm_port_conf[0],
.tim_ch = 2u, .ch_conf = &machine_pwm_ch_conf[2], .pwm_id = 2u;
const machine_pwm_obj_t pwm_3 = .base = &machine_pwm_type ,
.pwm_pin_obj = &pin_PB1, .pwm_pin_af = GPIO_AF_2,
.tim_port = TIM3, .port_conf = &machine_pwm_port_conf[0],
.tim_ch = 3u, .ch_conf = &machine_pwm_ch_conf[3], .pwm_id = 3u;
const machine_pwm_obj_t pwm_4 = .base = &machine_pwm_type ,
.pwm_pin_obj = &pin_PB6, .pwm_pin_af = GPIO_AF_2,
.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1],
.tim_ch = 0u, .ch_conf = &machine_pwm_ch_conf[4], .pwm_id = 4u;
const machine_pwm_obj_t pwm_5 = .base = &machine_pwm_type ,
.pwm_pin_obj = &pin_PB7, .pwm_pin_af = GPIO_AF_2,
.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1],
.tim_ch = 1u, .ch_conf = &machine_pwm_ch_conf[5], .pwm_id = 5u;
const machine_pwm_obj_t pwm_6 = .base = &machine_pwm_type ,
.pwm_pin_obj = &pin_PB8, .pwm_pin_af = GPIO_AF_2,
.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1],
.tim_ch = 2u, .ch_conf = &machine_pwm_ch_conf[6], .pwm_id = 6u;
const machine_pwm_obj_t pwm_7 = .base = &machine_pwm_type ,
.pwm_pin_obj = &pin_PB9, .pwm_pin_af = GPIO_AF_2,
.tim_port = TIM4, .port_conf = &machine_pwm_port_conf[1],
.tim_ch = 3u, .ch_conf = &machine_pwm_ch_conf[7], .pwm_id = 7u;
const machine_pwm_obj_t * machine_pwm_
可以看到八个PWM通道的Timer和GPIO的定义如下:
PWM | 定时器 | GPIO |
---|---|---|
PWM0 | TIM3 | PA6 |
PWM1 | TIM3 | PA7 |
PWM2 | TIM3 | PB0 |
PWM3 | TIM3 | PB1 |
PWM4 | TIM4 | PB6 |
PWM5 | TIM4 | PB7 |
PWM6 | TIM4 | PB8 |
PWM7 | TIM4 | PB9 |
2、下载链接
下载MicroPython for MM32的测试版本:
二、下载测试
1、下载MicroPython过程
利用 设计带有SD卡的 MM32F3277 MicroPython 实验板 对于 MicroPython进行测试。使用 MM32-Link 将MicroPython的BIN文件下载到测试板上。
▲ 图1.2.1 下载MM32F3277 MicroPython
2、上电MicroPython
利用 STM32 Bootloader 软件作为MicroPython REPL的操作界面。调试MicroPython。
(1)上电显示
上电后,在STM32 Bootloader显示信息窗口显示:
>> 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-19; MB_F3270 with MM32F3277G7P
>>>
(2)REPL初步操作
在STM32 Bootloader 进行REPL 交互式操作。
>>> import machine
>>> dir(machine)
['__name__', 'ADC', 'DAC', 'PWM', 'Pin', 'SDCard', 'SPI', 'SoftSPI', 'UART', 'freq', 'mem16', 'mem32', 'mem8']
>>>
可以看到其中已经包括了 PWM 模块。
§02 编程测试
下面对于PWM功能通过编程来实现它的的功能初步测试。
一、基本测试
1、声明与信息
(1)测试代码
from machine import PWM,Pin
import utime
pwm0 = PWM(0, freq=10000, duty=20)
print(pwm0)
pwm0.duty(50)
print(pwm0)
pwm0.init(freq=12000)
print(pwm0)
pwm0.deinit()
pwm0.init(freq=12000)
print(pwm0)
(2)输出结果
>> Download MicroPython : 29 lines/619 characters.
>> -------------------------------------------------------------------------
PMW(0, freq=10000, duty=20)
PMW(0, freq=10000, duty=50)
PMW(0, freq=10000, duty=0)
PMW(0, freq=12000, duty=0)
>>>
(3)结果解释
通过上述过程,可以看到如果修改PWM的frequency,需要:
- 首先进行 deinit()
- 然后进行 init(freq=…)
直接通过init(freq…)是无法进行修改频率的。
2、测试PWM波形
(1)测试代码
from machine import PWM,Pin
import utime
pwm0 = PWM(0, freq=10000, duty=20)
pwm1 = PWM(1, freq=10000, duty=100)
dir(pwm0)
print(pwm0, pwm1)
REPL 输出结果:
>> Download MicroPython : 24 lines/563 characters.
>> -------------------------------------------------------------------------
['deinit', 'duty', 'freq', 'init']
PMW(0, freq=12000, duty=20) PMW(1, freq=12000, duty=100)
>>>
(2)测试结果
使用示波器在PA6,PA7上只观察到了低电平,并没有观察到输出的PWM波形。
感觉, 现在这个版本只是将MCU的PA6,PA7进行了初始化,但没有开始启动对应的TIM3!
3、其它问题
实际上在【2.1.1.1:测试代码】中最后将PWM的频率初始化为12000之后,然后在【2.1.2.1:测试代码】中本来是声明的时候,为10000。
pwm0 = PWM(0, freq=10000, duty=20)
pwm1 = PWM(1, freq=10000, duty=100
但执行结果为:12000。这是因为在两次MicroPython下载
以上是关于测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本的主要内容,如果未能解决你的问题,请参考以下文章
测试MindMotion 的 ISP功能 - 无法进入ISP功能
MM32F3277 MicroPython 实验板设计和软件测试