# lua **Repository Path**: Tangerine_S/lua ## Basic Information - **Project Name**: lua - **Description**: STM32F4 LUA - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-04 - **Last Updated**: 2026-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LUA — STM32F407VET6 嵌入式 Lua 脚本平台 基于 **STM32F407VET6(LQFP100)** 的嵌入式 **Lua 5.4.7** 脚本平台。通过串口交互,每发送一行 Lua 脚本即执行并回显结果,支持 GPIO、SPI Flash、RTC、RS485 透传与 MODBUS 主从站等硬件控制。 ## 技术栈 | 项 | 说明 | |----|------| | MCU | STM32F407VET6(LQFP100) | | 系统时钟 | HSE 8MHz → PLL → SYSCLK 168MHz | | RTOS | FreeRTOS V10.3.1(CMSIS-RTOS V1 API) | | Lua | 5.4.7(双精度 double,内存共享 FreeRTOS 堆 80KB) | | 编译 | MDK-ARM V5.32(ARMCC),STM32CubeMX 6.18 生成工程 | | 内存 | 全在普通 SRAM(不启用 CCM) | ## 硬件外设 | 外设 | 引脚 | 用途 | |------|------|------| | USART1 | PA9/PA10 | 调试打印(COM4) | | USART2 | PA2/PA3 | Lua REPL 交互串口(COM3) | | USART3 | PB10/PB11 | RS485 通讯(透传 / MODBUS),Lua `uart3`/`modbus` 库 | | RS485_DIR | PE15 | RS485 半双工收发方向控制脚 | | SPI1 | PB3/PB4/PB5 | W25Q16 SPI Flash(片选 PB0) | | RTC | PC14/PC15 | 日历(LSE 32.768kHz) | | LED | PA6 | 系统运行指示(200ms 翻转) | ## Lua 内建库 | 库 | 说明 | |----|------| | `gpio` | 空闲 IO 配置/读写/翻转/列表(外设占用引脚自动屏蔽) | | `w25q` | W25Q16 Flash:id/read/write/erase_sector/chip_erase | | `rtc` | 实时时钟:get(读)/set(设置) | | `uart3` | RS485 串口:cfg(波特率/模式)/send/recv/pe(PE15 方向) | | `modbus` | MODBUS-RTU(03/06/16):可配从站/主站,内置 16×16bit 寄存器 | 另含 Lua 全部标准库(math/string/table/tonumber 等)。 ## 快速开始 1. 用 **COM3(USART2,115200-8-N-1)** 连接交互串口,复位后出现 `sys power on`。 2. 逐行输入 Lua 脚本,回车执行,结果回显在 COM3: ```lua return 1+2 -- → 3(裸表达式需加 return) return rtc.get() -- 读 RTC 时间 rtc.set(2026,9,4,13,30,0) -- 校准时间 gpio.mode("PA0","out"); gpio.write("PA0",1) -- IO 控制 return w25q.id() -- 读 SPI Flash ID(EF4015) ``` 3. RS485 / MODBUS 详见 [Lua 使用手册](LUA使用手册.md)。 ## 透传 / MODBUS 示例 ```lua -- 透传:USART3 数据自动转发到 COM3,也可 recv 取 uart3.cfg(9600,"transparent") return uart3.recv() -- MODBUS 主站 modbus.cfg("master",500) r = modbus.read_regs(2,0,2) -- 读远端从站地址2 return r and r[1]..","..r[2] or "timeout" -- MODBUS 从站(地址1)响应上位机查询 modbus.cfg("slave",1,200) modbus.set_reg(0,1234) ``` > `read_regs` 返回表,须用 `r[1]` 下标或 `table.concat(r,",")` 取元素(REPL 不展开表内容)。 ## 文档 - **[LUA使用手册.md](LUA使用手册.md)**:Lua REPL 用法、5 个硬件库接口与实例、常见问题。 - **[开发日志.md](开发日志.md)**:开发历程、外设分配、构建/烧录命令。 ## 构建 / 烧录 ```powershell $UV4 = "C:\Users\hp\AppData\Local\Keil_v5\UV4\UV4.exe" & $UV4 -b -j0 MDK-ARM\LUA.uvprojx -o build_log.txt # 编译 & $UV4 -r -j0 MDK-ARM\LUA.uvprojx # 全量重建 & $UV4 -f MDK-ARM\LUA.uvprojx -o flash_log.txt # 烧录(自动复位运行) ``` > 注意:CubeMX 每次重新生成后,需复查 `FreeRTOSConfig.h` 的堆大小(80KB)与 LUA 任务栈(2048),否则可能被重置导致卡死。