全部文档
概述 硬件支持 快速开发指南 内核 驱动 通用组件 专业组件 常见问题

microPython应用实例1 -- 跑马灯

任何一个单片机,最简单的外设莫过于IO口的高低电平控制了。本案例将将通过经典的跑马灯程序,带大家开启OneOS2.0的microPython 之旅, 通过案例的学习,你将了解到microPython的基本使用方法和其对IO口的控制方法。 在本案例中, 我们将通过microPython的machine模块中的Pin类控制IO口输入输出,来实现在ALIENTEK阿波罗STM32F767开发板上的两个LED交替闪烁,达到类似跑马灯的效果。

1. STM32F767 LED

STM32F767上的2个LED,管脚号为PB0\PB1。此数据可以参考工程目录“projects\stm32f767-atk-apollo\board\board.c”中的“led_table”,或者查看“projects\stm32f767-atk-apollo\board\CubeMX_Config\”下的“CubeMX_Config”,亦或者去开发板官网下载《阿波罗STM32F767开发板IO引脚分配表.xlsx》。

IO模式有8种,请参考开发板官网介绍: http://www.openedv.com/posts/list/32730.htm

2 功能验证

1.配置 在“(Top) → Thirdparty → MicroPython→Enable MicroPython → MicrpPythonepecific-libs → machine: Enable micropython machine modul”下开启“Pin”类:

1

开发板上电后,在shell下输入“mpy”进入microPython命令行模式后,输入查看Pin类是否编译在固件中:

2

3.功能验证代码(可以在命令行中输入,也可以在写在文件中,以脚本方式执行)

#功能: 红、绿LED亮、灭的控制
from machine import Pin
import utime

def read_data(func, num=0, param=None, info = None):
    value = ''
    if num == 1:
        value = func(param) 
    elif num == 2:
        value = func(param[0], param[1])
    else:
        value = func()
    if info:
        print(""%s : %s"" %(info, value))
    else:
        print(value)

read_data(Pin.index, 2, ['B', 0], "B0") #命令行输出:B0 : 16
read_data(Pin.index, 2, ['B', 1], "B1") #命令行输出:B1 : 17
pin1=Pin(("led_r",16), Pin.IN)
pin2=Pin(("led_g",17), Pin.IN)
pin1.init(mode=Pin.OUT_OD,value=1)
pin2.init(mode=Pin.OUT_OD,value=1)
pin1.value(0)#开发板现象:绿灯点亮
utime.sleep(2)
pin1.value(1)#开发板现象:绿灯灭
utime.sleep(1)
pin2.value(0)#开发板现象:红灯点亮
utime.sleep(2)
pin2.value(1)#开发板现象:红灯灭
read_data(pin1.pin, info="pin1-pin")#命令行输出:pin1-pin : 16
read_data(pin2.name, info="pin2-name")#命令行输出:pin2-name : "led_g"
read_data(pin1.value, info="pin1-value")#命令行输出:pin1-value : True
read_data(pin1.mode, info="pin1-mode")#命令行输出:pin1-mode : 4

pin1.deinit()

try:
    pin1.pin()
except ValueError:
    print('test pass')#命令行输出:test pass

try:
    pin1.name()
except ValueError:
    print('test pass')#命令行输出:test pass

try:
    pin1.value()
except ValueError:
    print('test pass')#命令行输出:test pass

try:
    pin1.port()
except ValueError:
    print('test pass')#命令行输出:test pass

try:
    pin1.mode()
except ValueError:
    print('test pass')#命令行输出:test pass

try:
    pin1.irq()
except ValueError:
    print('test pass')#命令行输出:test pass

microPython应用实例2 -- 看门狗

看门狗(watch dog)通过被用来检测外部干扰或不可预见的逻辑条件造成的易用程序背离正常的运行序列而产生的软件故障。本应用示例中,我们将使用microPython machine库的wdt类来使用看门狗的中断功能喂狗,实现看门狗功能。

1. STM32l475 wdt

STM32l475 wdt的介绍,请见开发板官网:。 https://os.iot.10086.cn/doc/quick_start/OneOS/OneOS_development_board_user_manual.html?h=%E7%9C%8B%E9%97%A8%E7%8B%97

2 功能验证

1.配置 在“(Top) → Thirdparty → MicroPython→Enable MicroPython → MicrpPythonepecific-libs → machine: Enable micropython machine modul”下开启“WDT”类:

3

在配置中,如果遇到需要输入“device name”的设备类,就要上设备输入“device”查看将要开启的设备名,如本实例中,需要开启wdt设备,如下获取到开发板上wdt的设备名:

4

2.开发板上电 开发板上电后,在shell下输入“mpy”进入microPython命令行模式后,输入查看WDT类是否编译在固件中:

5

3.开功能验证代码(可以在命令行中输入,也可以在写在文件中,以脚本方式执行)

#使用WDT类所有方法及参数做功能示例,注:WDT的超时时间依赖与系统底层,不可配置。
import utime
from machine import WDT

#喂狗10s。
def keep(feed_func):
    count= 0
    while count < 11:
        utime.sleep(1)
        count += 1
        print("watch dog keep alive for :%ds\n" % count)
        feed_func()
#停止喂狗,观察打印是否是看门狗系统超时时间后重启。
def stop_feed():
    count = 0
    while True:
        print("watch dog stop feed for :%d.%ds\n" % (count / 10, count % 10))
        utime.sleep_ms(100)
        count += 1

wdt = WDT(1)
wdt.init()
wdt.deinit()

try:
    wdt.start()
except ValueError:
    print('test pass')#命令行输入'test pass'

try:
    wdt.feed()
except ValueError:
    print('test pass')#命令行输入'test pass'

wdt.init()#实例化看门狗对象。
wdt.start()#看起看门狗对象。
wdt.feed()#开始喂狗。

keep(wdt.feed)
print('\n')
stop_feed()#停止喂狗,超时后,设备重启。

results matching ""

    No results matching ""