Funpack第11期用LPC55S69玩MicroPython
Funpack第11期 LPC55S69 MicroPython 串口通信 gpio控制 RT-Thread 编译
标签
嵌入式系统
测试
happy
更新2021-10-22
896

硬件介绍
funpack第十一期活动带来的LPC55S69-EVK开发板是基于恩智浦公司LPC55S69芯片的开发板。该芯片采用Armv8-M架构,性能和高级安全功能达到新水平,包括TrustZone-M和协处理器扩展。LPC55S6x家族利用协处理器扩展型号,大幅提高信号处理效率,采用专有DSP加速器,使计算的时钟周期减少了10倍。还可选择使用第二个Cortex-M33内核,支持灵活地平衡高性能与功率效率。LPC55S69采用安全设计,并由驱动片上系统(SoC)的安全软件提供支持。
FiPUfR_Wv2ETeW9oH7EC4Lg2mnsi

任务选择
这款开发板自带调试器,官网有提供IDE工具,也支持用MDK,使用C语言编程。还支持MicroPython。所以这里我选择了任务4:移植Micropython,并实现串口通信和控制IO口。

实现过程
简单的实现
从恩智浦的论坛上有帖子“基于LPC55S69的Micropython平台测试版大公开”,从这个帖子中下载了MicroPython的固件,从恩智浦官网下载blhost工具。准备好之后,再找一个USB线插到开发板的Hight spd口上,然后在按下ISP按钮的同时,把USB线插到PC上(不能先插USB线,再按按钮)。然后在PC上打开一个CMD窗口,找到适当的目录,敲入这个命令:

blhost -u 0x1fc9,0x21 -- flash-image LPC55S69_mpy.hex erase

FiHB7jNwCuEXE9YwRqPrmV_QxknX
烧写完成后,reset开发板。usb线依然要接到Hight psd口上,然后电脑就可以看见多了两个串口了,Thonny中选择MicroPython(一般 )就可以用Thonny连接开发板进行编程了。这里切记不要插入SD卡,否则烧写会失败。这里存在一个问题,由于不能插入SD卡,python程序脚本就没有办法保存,只能贴上去运行。
FrWghguleE1C49ByhNe88vTtZowb2、实现串口通信和控制IO口。MicroPython编程还是相对比较简单的。何况论坛还提供了对应固件的说明文档。按照文档很快就完成了通过串口控制板载LED灯的程序。串口是接到debug link口上。还通过pyqt做了个简单的上位机,控制三个LED灯的亮灭。

from lpc55 import Pin,UART

b = Pin('PIO1_4',Pin.OUT, pull=Pin.PULL_UP)
r = Pin('PIO1_6',Pin.OUT, pull=Pin.PULL_UP)
g = Pin('PIO1_7',Pin.OUT, pull=Pin.PULL_UP)
def ledctl(ledctl):
    r.value(ledctl[0])
    g.value(ledctl[1])
    b.value(ledctl[2])


if __name__ == '__main__':
    uart = UART(0)
    uart.init(baudrate=115200)
    while True:
        if uart.any()>=3:
            buf=uart.read(3)
            ledctl(buf)
            # print(buf[0],buf[1],buf[2])

FvyRqXydrPs9WKGNYHlqqcrmGQnI
FrEGhZY3OK23K_3vTE70x-M46o_y

任务的功能实现了,可是移植Micropython呢?我陷入了沉思。Micropython也算使用了很多次了,不同的芯片有不同的MicroPython的固件,自己也有思考过,这些固件是从哪里来的,但是从来没有深究过。也从来没有想过自己做一个MicroPython。在群里Thomas大神告诉说:只要支持rtt的芯片都可以跑mpy。于是在大神的指导下,开始了从rt-thread编译MicroPython的操作。
再次实现:
首先RT-Thread
是一个开源的物联网操作系统,从官网可以找到最新版源码的github的链接。然后在RT-Thread文档中心可以找到“MicroPython 固件开发指南“
FkNyQJQF5GPe6Iy9-C0k77pHvKNz按指南调整配置参数。调用menuconfig来进行配置。有几个地方需要注意。调整好 main 线程的栈大小,这里我们将栈大小增加到 8k。MicroPython对系统 RAM 资源有了一定的y要求,按文档分配 20k 内存用于 MicroPython 运行时环境。MicroPython运行需要用到串口,这里还要添加Flexcomm2,设置波特率为115200。FlM1g7Ejp7J0BFveEgwFld4XQD50Fq84xqShyres_JLj8rrZ-voSNYKWFrfuf1btlhHayKVfOnHnHEq69GFVFixj9KmNXvxB3gl67pr1iCHj5y33配置完成后运行pkgs --update命令将软件包拉取到本地。这时候要修改编译配置文件,将编译参数换为 -fgnu
FlM33-JASvRLNZQansQjWjKs_nva
最后使用 scons --target=mkd5 重新生成工程,使配置在工程中生效。这样一个MicroPython的keil的工程就创建出来啦!打开keil进行编译,没有意外的话就编译成功了。修改main函数:

#include <rtdevice.h>
#include "drv_pin.h"

/* defined the LED pin: GPIO1_IO4 */
/* GPIO1_4 is Blue LED */
#define LEDB_PIN      GET_PINS(1, 4)


int main(void)
{
#if defined(__CC_ARM)
    rt_kprintf("using armcc, version: %d\n", __ARMCC_VERSION);
#elif defined(__CLANG_ARM)
    rt_kprintf("using armclang, version: %d\n", __ARMCC_VERSION);
#elif defined(__ICCARM__)
    rt_kprintf("using iccarm, version: %d\n", __VER__);
#elif defined(__GNUC__)
    rt_kprintf("using gcc, version: %d.%d\n", __GNUC__, __GNUC_MINOR__);
#endif

    rt_pin_mode(LEDB_PIN, PIN_MODE_OUTPUT);  /* Set GPIO as Output */
    while (1)
    {
        //rt_pin_write(LEDB_PIN, PIN_HIGH);    /* Set GPIO output 1 */
        //rt_thread_mdelay(500);               /* Delay 500mS */
        //rt_pin_write(LEDB_PIN, PIN_LOW);     /* Set GPIO output 0 */
        //rt_thread_mdelay(500);               /* Delay 500mS */

			extern void mpy_main(const char *filename);
			mpy_main(RT_NULL);
    }
}

FrYFxp1eWqq2Psnxncu4OTCVNV3o
通过usb线连接debug link口烧写到开发板中。重启开发板,使用vscode中的RT-Thread MicroPython插件通过串口就可以连接到开发板了。至此自制的MicroPython就做好了!
Fgja_3eh9lfv-_NIDb8BG-mPFXb1


测试:
自制的MicroPython只集成了基础的包,编程与论坛的略有不同。查看电路图FC2_USART我使用P24的3、4脚。使用Usb转串口模块与电脑连接。这样就可以使用先前的上位机控制LED灯了。不过不能使用Thonny,只能使用Vscode,原因暂时未知。

import utime as time
from machine import Pin, UART

b = Pin(('led_blue', 37), Pin.OUT_PP)
r = Pin(('led_red', 39), Pin.OUT_PP)
g = Pin(('led_green', 40), Pin.OUT_PP)

uart=UART(2,115200)   

def ledctl(ledctl):
    r.value(ledctl[0])
    g.value(ledctl[1])
    b.value(ledctl[2])

if __name__ == '__main__':
    while True:
        msg=uart.read()
        print(msg,len(msg))
        time.sleep(0.1)
        if len(msg)==3:
            ledctl(msg)

心得体会:
编译完MicroPython后非常兴奋,从来没想过自己来尝试编译。瞬间觉着世界又有一扇门被打开了。感谢硬禾学堂提供的活动,感谢坛友的大力指导。

附件下载
上位机.zip
下位机1.py
下位机2.zip
团队介绍
爱好DIY
团队成员
happy
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号