【Funpack 11】基于LPC55S69移植Micropython,实现GPIO及UART
基于LPC55S69移植RT-Thread与Micropython,实现GPIO和UART功能
标签
嵌入式系统
LPC55S69
MicroPython
NXP
葉SiR
更新2021-11-01
731

任务说明

此次项目需要在LPC55S69上移植Micropython,并实现GPIO与串口通信。有关LPC55S69开发板的介绍参见:

👉 硬禾学堂Funpack 11期

👉 恩智浦官网

板卡资源丰富,包含4位SDIO,及速度传感器,音频编解码,MikroElectronika Click拓展槽等。开发环境支持恩智浦的MCUXpresso、或通过生成LPC55S69的SDK在Keil5、IAR等环境中开发。

Micropython移植流程记录

有关Micropython的简介及开发流程可参考:

👉 Micropython官网

👉 RT-Thread文档中心

RT-Thread及MPY移植

在LPC55S69上移植Micropython,首先需要移植RT-Thread,再在此基础上完成Micropython的移植。RTT参见RT-Thread Github官方,其主要步骤及BSP(板级支持包)资源均配备。此外,需要配置RT-Thread Env

⚠️ 最好git clone 最新的RTT,以确保更多的bug得到了修复。

配置好Env后,在git clone后RTT所在文件夹下,打开ConEmu,如下图:

ConEmu Here

输入menuconfig → Hardware Drivers Config → On-chip Peripheral Drivers,使能GPIO,UART0与UART2。

Enable Peripheral Drivers

使能后退回上级菜单,在RT-Thread online packages → language packages → Micropython,使能并进入设置,“Heap size"改为20480,版本选用"latest”。

Settings of Micropython

进入Hardware Module使能"machine uart"。

Enable machine uart

最后在RT-Thread Components,改变"stack size"为8192,最后Exit退出配置。

在ConEmu中,输入"pkgs --update"将将软件包拉取到本地。

返回文件夹,在".\bsp\lpc55sxx\lpc55s69_nxp_evk\packages\micropython-latest"下有一"SConscript"文件,对此进行修改,注意30行改为"-fgnu"。

SConscript

改完后,在ConEmu中输入"scons --target=mdk5",生成Keil工程。根据Micropython用户手册,对main函数作出修改,在main线程中启动MicroPython,之后即可烧写到板卡中。

在main线程中启动Micropython

GPIO及串口通信

结合LPC55S69原理图及所生成Keil工程中drv_pin.c,板卡上LED_BLUE为Pin37,LED_RED为Pin39,LED_GREEN为Pin40,按键为Pin42。注意,板卡LPC-LINK2 占用了UART0,因此使用UART2做串口输入输出。

串口连接

使用vscode中的RT-Thread MicroPython插件进行mpy开发。

编写了一个简单的用按键控制LED和串口输出的程序,为了LED灯显示清晰没有整些花里胡哨的,该程序实现当KEY按下时,LED_BLUE与LED_RED翻转,串口每1秒打印语句。效果如下:

UART2输出

Red On

Blue On

代码片段

# Example of GPIO and UART by Micropython on LPC55S69-EVK
# Author: 葉SiR
# DateL 2021/10/30
# CSDN: https://blog.csdn.net/weixin_46422143?spm=3001.5343

import utime
from machine import Pin, UART

def main():
    led_blue = Pin(("LED_BLUE_PIN", 37), Pin.OUT_PP);
    led_red = Pin(("LED_RED_PIN", 39), Pin.OUT_PP);
    led_green = Pin(("LED_GREEN_PIN", 40), Pin.OUT_PP);
    user_key = Pin(("User_Key", 42), Pin.IN, Pin.PULL_UP);
    print_time = 0;
    led_blue.value(0);
    led_red.value(1);
    led_green.value(1);
    print("Welcome to RT-Thread MicroPython!");
    uart = UART(2, 115200);
    uart.init(115200, bits=8, parity=None, stop=1); 
    while True:
        utime.sleep(1);
        print_time = print_time + 1;
        uart.write('Hello World %d\r\n' % print_time);
        if(user_key.value() == 0):
            if(led_blue.value() == 1):
                led_blue.value(0);
            else:
                led_blue.value(1);

            if(led_red.value() == 1):
                led_red.value(0);
            else:
                led_red.value(1);

if __name__ == '__main__':
    main();
    

总结与心得

此次项目,实现了在LPC55S69上移植Micropython,移植过程中,我也初次了解到RT-Thread和Micropython是什么,是用来干什么的

感谢Thomas大佬提供的帮助,他对RT-Thread贡献的Pull Request帮助很大。感谢Funpack平台让我有机会学习到更多。

附件下载
hex及py代码附说明.rar
HEX文件直接烧录至板卡即可,py代码需要在vscode RT-Thread Micropython环境下运行
团队介绍
北京交通大学 电子信息工程学院 电子科学与技术专业就读
团队成员
葉SiR
二次元の开发者;👉 GitHub: https://github.com/KafCoppelia
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号