一. 项目说明
任务
本次我选择的是任务4: 移植Micropython,并实现串口通信和控制IO口。
需要实现以下效果:
- 上位机通过串口连接开发板
- 通过串口发送指令控制板载的三个LED RGB灯珠的亮灭
系统框图
板卡技术和功能规格
LPC55S6x MCU家族是全球首款基于通用Cortex-M33的微控制器。
该高效率MCU家族采用Armv8-M架构,性能和高级安全功能达到新水平,包括TrustZone-M和协处理器扩展。LPC55S6x家族利用协处理器扩展型号,大幅提高信号处理效率,采用专有DSP加速器,使计算的时钟周期减少了10倍。还可选择使用第二个Cortex-M33内核,支持灵活地平衡高性能与功率效率。
此外,LPC55S6x MCU家族依托基于40nm NVM的处理技术,具备成本效益优势,提供广泛的可扩展封装和存储器选项,并提供强大的支持,包括MCUXpresso软件和工具生态系统及低成本开发板。
芯片功能图
开发环境
-
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
2/ 使用Keil进行编译
-
修改while循环
如果修改while循环中的代码, 默认上电时会点亮和熄灭蓝色LED, 并且无法通过调试串口烧录Micropython
-
编译, 下载 下载代码前需要通过USB数据线, 连接PC和开发的板载Link调试接口
三. 代码编写
1/ 使用RT-Thread micropython vscode插件开发micropython
下载插件和基本的使用方法可以参考RT-Thread vscode插件的相关操作, 点击查看参考文章
-
创建项目
- 通过RT-Thread vscode插件创建Micro Python项目
-
连接开发板
- 点击VS Code中的连接按钮, 连接设备管理器中
LPC-LinkII Ucom Port
设备对应的端口 - 使用在控制台输入
print("hello world")
会打印出信息, 即表示连接成功
- 点击VS Code中的连接按钮, 连接设备管理器中
-
代码编写
-
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)
-
-
右键直接在设备上运行Micropython文件
2/ 使用串口工具连接uart2
-
连接, 配置为115200
- Link接口只能用于代码的下载和调试, 已经被占用
- 参考系统框图, 使用串口2进行UART的通信, 需要使用USB to UART设备, 连接开发板的P24
RX, TX
l两个IO口
四. 实验现象
-
通过串口工具输入
red|on
点亮红灯 -
通过串口工具输入
blue|on
点亮蓝灯 -
通过串口工具输入
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的更多特性: 除了双核外, 该芯片还有很多其他的两点, 如运行门阵列单元/超低功耗等.