• Ubuntu 16.04下8051单片机开发环境搭建


    工作需求,准备学习单片机,加上以后准备学习嵌入式Linux,而且最近烦透了Win10的自动更新,遂放弃Windows环境,准备在Linux环境下从51单片机开始折腾起,学单片机和Linux两不误。本人是单片机和Linux系统双料新手,学习过程中碰壁不断,遂将过程做一下笔记,也分享到网上,高手见笑,新手且看,希望能帮到一些朋友。

    系统:   Ubuntu 16.04 LTS amd64

    单片机:  某宝¥149开发板,芯片STC90C51,板子自带USB转串口芯片CH340G。Ubuntu好像自带了这个的驱动,不用另装驱动了。

    本来想折腾mcu8051ide的,但是apt-get安装和手动一个个安装依赖库再编译主程序安装两种方式的都运行闪退,只能用原始的方法了。

    需要的软件:

    1. 编辑器: 随便 vim emacs gedit nano都行

    2. 编译器:sdcc,一个小型的C编译器

    sudo apt-get  install sdcc sdcc-doc

    3. ISP下载器:

      a.  stcflash.py,一个单独的python文件,命令行直接使用。【推荐】

      https://github.com/laborer/stcflash

      b. gSTCISP,一个带GUI的下载器,SourceForge提供源码下载,需要编译安装。也可以在Ubuntu论坛找到一个编译好的版本。我自己测试时,烧写成功率不高,不知道怎么回事,所有不太推荐。

      https://sourceforge.net/projects/gstcisp/

    开发单片机程序简单步骤:

    1.随便写个单片机程序,比如main.c。需要注意的是sdcc下的程序与Windows 的Keil下有点区别,目前仅发现两点:头文件不一样和IO口sbit定义不一样,具体区别自行百度。

    #include <8051.h>
    
    
    void Delayms(unsigned int ms);
    
    void main()
    {
        while(1)
        {
            P0=0xfe;
            Delayms(500);
            P0=0x01;
            Delayms(500);
        }
    }
    
    void Delayms(unsigned int ms)
    {
        unsigned int i, j;
        for(i = ms; i > 0; i--)
            for(j = 110; j > 0; j--);
        return;
    }

     2. 编译:调用sdcc编译并生成bin或hex文件。需要说一下的是,gSTCISP只支持下载bin文件,而stcflash.py能下载bin和hex文件。

    生成hex文件:
    sdcc main.c && packihx main.ihx > main.hex
    生成bin文件:
    sdcc main.c && makebin -p main.ihx main.bin

    3. 烧写程序:

      推荐使用stcflash.py,因为我用gSTCIPS十次有九次都下不进去,不知道什么原因。

      stcflash.py是Python语言写的,需要用到Python的串口模块,用如下命令安装。

    sudo apt-get install python-serial

      为了方便使用,我把stcflash.py复制到了/usr/bin/下,并添加执行权限,这样不用每次调用都要输入文件的保存路径了。当然应该也可以把stcflash.py的保存路径加入$PATH变量,我是懒人。

    sudo cp stcflash.py /usr/bin/
    sudo chmod +x /usr/bin/stcflash.py

      然后检查USB连接:

      a.  $  lsmod | grep usbserial
        如果输出有 usbserial,说明系统支持USB转串口。

      b. 用USB数据线将开发板与电脑连接起来,运行

        $ ls /dev/ttyUSB*

        如果输出有/dev/ttyUSB0或1等等,说明系统已正确识别该USB转串口设备。

        也可以用“#lsusb”命令查看是否有“USB-Serial adapter”类似的设备。

      c. 设置串口为ttyUSB0(可以不做,在下载时手动指定--port):

        $ dmesg | grep ttyUSB0

      d. 关闭开发板电源,运行stcflash.py烧写程序,当出现如下字样时,打开开发板电源,即开始下载:

    $ sudo stcflash.py main.bin --port /dev/ttyUSB0 --lowbaud 1200
    Connect to /dev/ttyUSB1 at baudrate 1200
    Detecting target... 

        下载完成为这样:

    
    
    $ sudo stcflash.py main.bin --port /dev/ttyUSB0 --lowbaud 1200
    Connect to /dev/ttyUSB1 at baudrate 1200
    Detecting target... done
    FOSC: 12.013MHz
    Model: STC90C516RD+ (ver4.3C) 
    ROM: 64KB
    [X] Reset stops watchdog
    [X] Internal XRAM
    [X] Normal ALE pin
    [X] Full gain oscillator
    [X] Not erase data EEPROM
    [X] Download regardless of P1
    [X] 12T mode
    Baudrate: 38400
    Erasing target... done
    Size of the binary: 158
    Programming: #################### done
    Setting options... done

     

      stcflash.py默认port为/dev/ttyUSB0,波特率为2400,所以当使用ttyUSB0时,也可以直接运行"$sudo stcflash.py main.bin",不用手动指定端口和波特率。

    完。

        

      

      

  • 相关阅读:
    Redis分布式锁的正确加锁与解锁方式
    高并发系统中的限流算法
    谈谈 InnoDB引擎中的一些索引策略
    面试必问:手写一个内存泄漏的程序
    空指针异常与Optional类
    Redis的内存淘汰策略
    explain的关键字段的意义
    pycharm编辑器简单配置-- 持续更新完善
    vscode 插件-better comments-代码注释高亮
    阿里前端开发规范-转载
  • 原文地址:https://www.cnblogs.com/ToddleLobster/p/5537560.html
Copyright © 2020-2023  润新知