Funpack11期-LPC55S69 Micropython控制LED
使用RT-Thread源码, 进行LPC55S69移植Micropython, 使用UART控制GPIO
标签
嵌入式系统
Python
funpack11
john
更新2021-11-02
1335

一. 项目说明

任务

本次我选择的是任务4: 移植Micropython,并实现串口通信和控制IO口。

需要实现以下效果:

  • 上位机通过串口连接开发板
  • 通过串口发送指令控制板载的三个LED RGB灯珠的亮灭

系统框图

img

板卡技术和功能规格

FnH5-FNyU_jLRwrDao6O_Lq7yxxq

FnJFmf7CeYx7MskLl81hFZZZ8YB9

LPC55S6x MCU家族是全球首款基于通用Cortex-M33的微控制器。

该高效率MCU家族采用Armv8-M架构,性能和高级安全功能达到新水平,包括TrustZone-M和协处理器扩展。LPC55S6x家族利用协处理器扩展型号,大幅提高信号处理效率,采用专有DSP加速器,使计算的时钟周期减少了10倍。还可选择使用第二个Cortex-M33内核,支持灵活地平衡高性能与功率效率。

此外,LPC55S6x MCU家族依托基于40nm NVM的处理技术,具备成本效益优势,提供广泛的可扩展封装和存储器选项,并提供强大的支持,包括MCUXpresso软件和工具生态系统及低成本开发板。

芯片功能图

FpuceifS-ljpq5L1Kg-jKSWEbQ3r

开发环境

  • Keil: 是美国Keil Software公司出品兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发环境

  • VS Code: Visual Studio Code(VS Code)是微软2015年推出的一个轻量但功能强大的源代码编辑器,基于 Electron 开发,支持 Windows、Linux 和 macOS 操作系统。内置了对JavaScript,TypeScript和Node.js的支持并且具有丰富的其它语言和扩展的支持,功能超级强大。

  • MCUXpresso IDE: 是一款为开发人员带来一个易于使用的基于Eclipse的开发环境,适用于基于Arm® Cortex®-M内核的恩智浦 MCU,包括通用、跨界和Bluetooth™ MCU。

  • RT-Thread: 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过近 15 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。RT-Thread RTOS 支持许多架构,并且已经涵盖了当前应用中的主要架构。

  • Micropython: MicroPython是Python的一个精简版本,它是为了运行在单片机这样的性能有限的微控制器上,最小体积仅256K,运行时仅需16K内存。 MicroPython是基于Python 3.4的语法标准。

     

二. 环境搭建

1/ RT-Thread环境搭建

1. 下载RT-Thread env, 以实现Micro python的配置和编译

https://www.rt-thread.org/page/download.html

https://pan.baidu.com/s/1cg28rk#list/path=%2F

2. 设置右键启动

这里是可选项, 设置右键启动是更加方便了我们的操作, 在第4步编译设置中, 我们就不需要去进入对应的目录了

3. 下载RT-Thread 源代码

https://gitee.com/rtthread/rt-thread

4. 编译设置

  • 进入rt-thread\bsp\lpc55sxx\lpc55s69_nxp_evk

  • 右键打开env工具

    必须使用env工具才可以使用menuconfig, pkg, scons等命令, 如果没有启动选项, 需要回到第一, 第二步进行设置

  • 启动menuconfig

  • 进入RT-Thread online packages ---> language packages ---> [*] MicroPython: A lean and efficient Python implementation for microcontrollers and c, 并且在Hardware中启动UART2

  • 修改HEAP SIZE为20480

  • 进入RT-Thread Components --->, Set main thread stack size中配置为8192

  • 输入命令启动编译pkgs --update scons --target=mdk5, 程序将会自动下载MicroPython

  • 修改文件rt-thread\bsp\lpc55sxx\lpc55s69_nxp_evk\packages\SConscript FnCbC3bCQuI3NBK1UvCPC3Uw-U5R

2/ 使用Keil进行编译

  1. 修改while循环

    如果修改while循环中的代码, 默认上电时会点亮和熄灭蓝色LED, 并且无法通过调试串口烧录Micropython FliTNczSVaUjLRytssD2JYER8ttC

  2. 编译, 下载 下载代码前需要通过USB数据线, 连接PC和开发的板载Link调试接口

    FiZggphO4_yNPfSVxoDh4eNrHapx

三. 代码编写

1/ 使用RT-Thread micropython vscode插件开发micropython

下载插件和基本的使用方法可以参考RT-Thread vscode插件的相关操作, 点击查看参考文章

  1. 创建项目

    • 通过RT-Thread vscode插件创建Micro Python项目
  2. 连接开发板

    • 点击VS Code中的连接按钮, 连接设备管理器中LPC-LinkII Ucom Port设备对应的端口
    • 使用在控制台输入print("hello world")会打印出信息, 即表示连接成功
  3. 代码编写

    • UART操作

      # 初始化
      UART_OBJ = UART(2, 115200)
      # 读
      uart_message = UART_OBJ.read()
      # 写
      UART_OBJ.write("Please Input [red/green/blue on/off]")
       
    • GPIO操作

      # 初始化
      PIN_LED_R = 39  # 红色RGB的引脚
      LED_RED = Pin(("led_red", PIN_LED_R), Pin.OUT_PP)
      # 写
      LED_RED.value(led_value)
       

    完整代码:

    import utime as time
    from machine import Pin
    from machine import UART
    LED_ON = 0
    LED_OFF = 1
    ​
    # 设置引脚标识
    PIN_LED_R = 39  # 红色RGB的引脚
    PIN_LED_G = 40  # 绿色RGB的引脚
    PIN_LED_B = 37  # 蓝色RGB的引脚
    ​
    # 初始化引脚
    LED_RED = Pin(("led_red", PIN_LED_R), Pin.OUT_PP)
    LED_GREEN = Pin(("led_green", PIN_LED_G), Pin.OUT_PP)
    LED_BLUE = Pin(("led_blue", PIN_LED_B), Pin.OUT_PP)
    ​
    # 初始化UART, 使用UART2, 波特率为115200
    UART_OBJ = UART(2, 115200)
    ​
    # 上电死循环, 编写功能代码
    while True:
       # 读取UART内容
       uart_message = UART_OBJ.read()
       print(uart_message)
       if (uart_message == b'') :
           # 如果为空内容, 不做任何处理
           pass
       else:
           # 去除掉左右的空格
           uart_message = uart_message.strip()
           print(uart_message)
           # 拆分字符串, 获得要控制的LED和开关状态
           mes = str(uart_message).split("|")
           led_type,switch = mes[1],mes[0]
           
           print("switch")
           print(switch)
           print("led_type")
           print(led_type)
    ​
           if 'on' in led_type:
               # 设置引脚状态
               led_value= 0
           elif 'off' in led_type:
               led_value= 1
           else:
               # 如果两者都不是, 则进入下一次循环, 并提示用户输入信息
               UART_OBJ.write("Please Input [red/green/blue on/off]")
               print("error")
               print(led_type)
               continue
           if 'red' in switch :
               LED_RED.value(led_value)
           elif "green" in switch :
               LED_GREEN.value(led_value)
           elif 'blue' in switch :
               LED_BLUE.value(led_value)
           else:
               # 如果三者都不是, 则进入下一次循环, 并提示用户输入信息
               UART_OBJ.write("Please Input [red/green/blue|on/off]")
               continue
       time.sleep(1)
  4. 右键直接在设备上运行Micropython文件 FuW1lhG6bQupYRH-WHmvim_ewnpC

2/ 使用串口工具连接uart2

  1. 连接, 配置为115200 Fs-w26079GVnV2oS-gyVGhZyMFE3

    • Link接口只能用于代码的下载和调试, 已经被占用
    • 参考系统框图, 使用串口2进行UART的通信, 需要使用USB to UART设备, 连接开发板的P24RX, TXl两个IO口

四. 实验现象

  1. 通过串口工具输入red|on点亮红灯
    FvG7J1MnIkHqg4IsF38dqMfI4ete

  2. 通过串口工具输入blue|on点亮蓝灯

    FlGUGCG_5O4tzpWcNK0X7rqMiwA_

  3. 通过串口工具输入red|off即可熄灭对应的LED

五. 实验心得

  • 学习了如何移植Micropython到对应的开发板上, 了解了RT-Thread这样的RTOS的基本特性
  • 体验了Micropython的基本使用流程, 了解如何连接Micropython开发板以及烧写代码
  • 学习了NXP IDE的使用和设置
  • 学习了通过Keil开发NXP单片机的步骤和方法
  • 了解了NXP LPC系列的相关特性

六. 改进方向

  • 掌握C编程: 使用Micropython开发程序, 无论从运行效率还是执行稳定性方面来说, 都不如C编程高, 下一步任然需要继续学习通过Keil或MCUXpresso IDE进行编程. 本次只是初步地掌握了两个工具的使用流程, 巩固了使用方法, 下一步需要通过LPC55s69的Example进行代码的学习. 以充分掌握开发板的更多特性.
  • 掌握双核编程: LPC55s69最大的特点就是其是一款双核的Arm处理器, 掌握双核协同编程是学习这块开发板的必经之路. 下一步需要通过学习双核双线程的编程.
  • 掌握LPC55s69的更多特性: 除了双核外, 该芯片还有很多其他的两点, 如运行门阵列单元/超低功耗等.

 

附件下载
rtthread-lpc55s6x.axf
main.py
团队介绍
黄煜鑫 阳狮集团星传媒体 Python 高级软件工程师
团队成员
john
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号