查看: 14823|回复: 12

lua 成功运行在STM32F103ZE上(LCD弹出式多级菜单+Lua贪吃蛇)

  [复制链接]
  • TA的每日心情
    开心
    2015-12-8 11:46
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-12-8 11:40:32 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 勇往直前2 于 2015-12-19 14:07 编辑

       前些日子在论坛看到一篇很好的帖子“[原创] 打算做块STM32F4的板,用来跑LUA,做你想做的事 ”,
    当我看到这几句话时就很感兴趣了。
    “因为有了LUA,您可以动态加载您的应用程序,可以像WINDOWS那样在桌面生成您应用程序的图标,点击图标就可以执行您的程序。
    还可以用LUA解释XML,这样你就可以在PC机上布局你的界面,生成XML,让LUA去帮您完成剩下的工作。让界面设计变得如此简单。”
        于是我上周六决定自己也玩玩,下载了进度帖中的工程文件开始自己改程序。本人没学过Lua,在调试的时候完全摸不着头脑,后来捣鼓了一天才实现了dio.mode(dio.OUTPUT,0);的IO操作。这两天总结了一些经验,想分享给没接触过Lua的小伙伴们。用的工程是原子哥的 FATFS实验(库函数版)
    1.需要修改堆栈设置:startup_stm32f10x_hd.s Stack_Size      EQU     0x00001000   4kb
    Heap_Size       EQU     0x00002c00   11kb
    2.屏蔽串口中的Printf ---把 39行的"if 1"改成 if 0
    //LED0翻转 -需注册到Lua
    static int SetLED0(lua_State *L)
    {
      LED0=!LED0;

      delay_ms(300);
    }

    char Testbuf[100] = {"while 1 do LED0(L); end"}; //需要定义一个BUF来填写lua语法的程序
    lua_State *L ;   
    L   = lua_open();
    luaopen_base(L);

    lua_register(L, "LED0", SetLED0);//"Lua程序中可调用的名字",需注册的函数
    luaL_dostring(L,
    Testbuf);//调用脚本 类似于运行了buf中的字符串
    while(1);
    以上是一个简单写法。
    如果想运行SD卡的程序,就只需更改Testbuf中的字符串即可。
    怎么做到呢,这点在我说的那个帖子中已经解决了,需要申明和注册以下这个函数
    static int do_file_script(char *filename)//读取SD中的指定文件名
    但是这个函数在我的工程中需小改一下,把操作LUA的语句都屏蔽掉,换成我以上的程序,再把BUF改成全局变量即可。
    你可以先把buf中的内容打印出来,如果打印出来的内容与.Lua中的内容一致说明读取SD卡成功,既然得到了Buf,那么按照我以上提供的语句即可实现运行SD中的Lua文件了。
    至于 dio.mode(dio.OUTPUT,0); 这些操作,我把dio中所有的语句都重新lua_register了一遍,然后写入Lua文件,就实现了IO操作了。
      那篇帖子是2012年写的,那时我在读书呢。过了这么久我还能看到这么好的分享帖子,这应该就是论坛的力量吧。马上就2016年了,时间过得真快啊。




    这两天又开始玩lua 了,现在共享出一些我写的代码,贪吃蛇是用的别人的代码改过来的,这个POPMENU是根据傻孩子菜单改进的,上图上代码:用STM32 运行SD卡中的两个文件 snake.lua  和 readme.lua
    snake.rar (1.85 MB, 下载次数: 404)
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-3-28 17:24
  • 签到天数: 276 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-12-8 12:31:10 | 显示全部楼层
    膜拜               
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-12-8 12:34:27 | 显示全部楼层
    这个哪里有卖的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-12-8 11:46
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2015-12-8 12:39:37 | 显示全部楼层
    BOSS王 发表于 2015-12-8 12:34
    这个哪里有卖的

    买个STM32开发板就好了 FLASH RAM尽量大点
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-1-16 10:58
  • 签到天数: 602 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-12-8 14:09:28 | 显示全部楼层
    能上图片就更好了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-20 21:41
  • 签到天数: 728 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-12-8 23:03:40 | 显示全部楼层
    学习学习...........................
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-12-10 09:01:30 | 显示全部楼层

    学习学习...........................
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-30 16:31
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2016-1-14 11:57:18 | 显示全部楼层
    楼主我想问个问题,为什么我一加上L = lua_open();这句话,程序就允许不起来,好纠结!但是用你的程序可以允许!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-1-17 21:55:13 | 显示全部楼层
      谢谢分享,正想学习,不知道能不能直接用串口将lua文件下载到单片机内,,,,就像事先在板内装好bootloader,用串口传输bin文件进去一样,这样就省了SD卡这个步骤
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-10-17 12:07
  • 签到天数: 306 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2016-4-2 15:32:23 | 显示全部楼层
    最近看到 micropython,,想玩一下lua,,lua 在速度上 比python有优势,尤其是 mcu,,也想鼓捣库文件,类似于 arduino 和micropython,不知道可行不?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 05:39 , Processed in 0.198173 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.