你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

[折腾STLINK] windows下成功编译stlink库(https://github.com/xor...

[复制链接]
Mandelbrot_Set 发布时间:2017-2-8 14:17



写在前面:
0.好久不发帖子,排版略渣
1.编译是可以成功的,但不保证不同环境及设置所造成差异
2.只是编译通过,库本身是否有bug属于未知问题.



仓库简介:
STMicroelectronics STlinkv2 programmer library and tools
(具体可到web页面上自己看 http://github.com/xor-gate/stlink2)
这个就不多说的,代码不是我写的.



windows环境编译心得及步骤:
1.搭建msys2环境。
[仅mingw可能就够用了,不过考虑到源码用到cmake,有个shell命令行开发环境,是相当有必要的]
下载 msys2安装包(我用的是msys2-x86_64-20161025.exe)
ref:
http://sourceforge.net/projects/msys2/files/Base/i686/
http://www.msys2.org/
印象中这个是要windows 64位操作系统才支持的。
安装步骤略...,就是一路点下去,设个安装路径.
启动过后用pacman安装必要的工具,这个不是本贴重点,暂略...
具体可以百度google,网络不行pacman的源也可以修改,baidu吧.

2.编译libusb
下载libusb-1.0源码
[参:http://sourceforge.net/projects/libusb/files/libusb-1.0/]
子版本号应该不是重点
这个编译很简单,编译步骤:
  • 解压
  • msys2进入相应目录下
  • ./configure
  • make

如果成功,在libusb/.libs目录下生成libusb的静态库和动态库.这是我们需要的。
libusb/下的头文件也用的到.

几点说明:
[注1:可以make install,但并非必要]
[注2:可以指定安装路径,也非必要 ./configure --help 查看帮助]

3.编译stlink2
下载源码:
git clone http://github.com/xor-gate/stlink2
如果msys2不想安装git,web页面下载压缩包,然后解压过去,效果是一样的。
进入stlink目录,打开README.md...先看一看...
这是个好习惯
所有设置都正确,执行make debug即可开始编译。
由于现在什么也没做,不出意外,是编不过的。
make release应该差不多,先不考虑。
根据出错提示进行修改,修改过后,执行:
make clean
make debug
修改方法:
1.提示缺少工具
比如没装gcc,没装cmake,没装make。。。那么安装一个..,反正少啥就装啥...

2.提示:
System is unknown to cmake, create:
Platform/MINGW32_NT-6.1 to use this system, please send your config file to cmake@www.cmake.org so
修改顶层MakeFile[line 49 - 51] (贴出来tab键咋没了)
  1. build/Debug:
  2.         @mkdir -p $@
  3.         @cd $@ && cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_SYSTEM_NAME=Generic ../../
复制代码
release先不考虑...

3.提示LIBUSB_INCLUDE_DIR LIBUSB_LIBRARY 出错
这是因为cmake找不到libusb库,可以手动设置下:
修改cmake/Find7Zip.cmake
set (LIBUSB_INCLUDE_DIR [这儿填路径,中括号删掉])
set (LIBUSB_LIBRARY [这儿填路径,中括号删掉])
LIBUSB_LIBRARY 指向 你的libusb-1.0.a的路径
LIBUSB_INCLUDE_DIR 应该也可以随便设,自己把libusb的.h copy过来

4.缺少头文件
反正都能找的到...注意下 include <>与“”的差别

附上编译成功的输出信息:
  1. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink2
  2. $ make debug
  3. -- The C compiler identification is GNU 5.3.0
  4. -- Check for working C compiler: /usr/bin/cc.exe
  5. -- Check for working C compiler: /usr/bin/cc.exe -- works
  6. -- Detecting C compiler ABI info
  7. -- Detecting C compiler ABI info - done
  8. -- Detecting C compile features
  9. -- Detecting C compile features - done
  10. -- stlink2 version: 0.1.0-dev
  11. --            Major 0 Minor 1 Patch 0
  12. -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
  13. CMake Warning (dev) at cmake/Doxygen.txt:27 (message):
  14.   Doxygen is needed to build the documentation.
  15. Call Stack (most recent call first):
  16.   CMakeLists.txt:19 (include)
  17. This warning is for project developers.  Use -Wno-dev to suppress it.

  18. -- Performing Test C_SUPPORTS_STD_C99
  19. -- Performing Test C_SUPPORTS_STD_C99 - Success
  20. -- Performing Test C_SUPPORTS_WEXTRA
  21. -- Performing Test C_SUPPORTS_WEXTRA - Success
  22. -- Performing Test C_SUPPORTS_WSHADOW
  23. -- Performing Test C_SUPPORTS_WSHADOW - Success
  24. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_2
  25. -- Performing Test C_SUPPORTS_D_FORTIFY_SOURCE_2 - Success
  26. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING
  27. -- Performing Test C_SUPPORTS_FSTRICT_ALIASING - Success
  28. -- Performing Test C_SUPPORTS_WFORMAT
  29. -- Performing Test C_SUPPORTS_WFORMAT - Success
  30. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY
  31. -- Performing Test C_SUPPORTS_WFORMAT_SECURITY - Success
  32. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED
  33. -- Performing Test C_SUPPORTS_WMAYBE_UNINITIALIZED - Success
  34. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS
  35. -- Performing Test C_SUPPORTS_WMISSING_VARIABLE_DECLARATIONS - Failed
  36. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32
  37. -- Performing Test C_SUPPORTS_WSHORTEN_64_TO_32 - Failed
  38. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION
  39. -- Performing Test C_SUPPORTS_WIMPLICIT_FUNCTION_DECLARATION - Success
  40. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS
  41. -- Performing Test C_SUPPORTS_WREDUNDANT_DECLS - Success
  42. -- Performing Test C_SUPPORTS_WUNDEF
  43. -- Performing Test C_SUPPORTS_WUNDEF - Success
  44. -- Performing Test C_SUPPORTS_WSWITCH
  45. -- Performing Test C_SUPPORTS_WSWITCH - Success
  46. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL
  47. -- Performing Test C_SUPPORTS_WFLOAT_EQUAL - Success
  48. -- Check if the system is big endian
  49. -- Searching 16 bit integer
  50. -- Looking for sys/types.h
  51. -- Looking for sys/types.h - found
  52. -- Looking for stdint.h
  53. -- Looking for stdint.h - found
  54. -- Looking for stddef.h
  55. -- Looking for stddef.h - found
  56. -- Check size of unsigned short
  57. -- Check size of unsigned short - done
  58. -- Using unsigned short
  59. -- Check if the system is big endian - little endian
  60. -- LITTLE_ENDIAN
  61. -- Looking for nanosleep
  62. -- Looking for nanosleep - found
  63. -- Performing Test C_SUPPORTS_WALL
  64. -- Performing Test C_SUPPORTS_WALL - Success
  65. -- Performing Test C_SUPPORTS_O0
  66. -- Performing Test C_SUPPORTS_O0 - Success
  67. -- Performing Test C_SUPPORTS_GGDB
  68. -- Performing Test C_SUPPORTS_GGDB - Success
  69. -- Performing Test C_SUPPORTS_FPROFILE_ARCS
  70. -- Performing Test C_SUPPORTS_FPROFILE_ARCS - Failed
  71. -- Performing Test C_SUPPORTS_FTEST_COVERAGE
  72. -- Performing Test C_SUPPORTS_FTEST_COVERAGE - Success
  73. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER
  74. -- Performing Test C_SUPPORTS_FNO_OMIT_FRAME_POINTER - Success
  75. -- LIBUSB_INCLUDE_DIR: ~/workspace/STLINKALL/stlink2/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/
  76. -- Found Libusb: ~/workspace/STLINKALL/stlink2/3thparty/libusb-1.0.21/libusb-1.0.21/libusb/.libs/libusb-1.0.a
  77. CMake Warning (dev) at src/CMakeLists.txt:39 (add_library):
  78.   ADD_LIBRARY called with SHARED option but the target platform does not
  79.   support dynamic linking.  Building a STATIC library instead.  This may lead
  80.   to problems.
  81. This warning is for project developers.  Use -Wno-dev to suppress it.

  82. -- Found Perl: /usr/bin/perl.exe (found version "5.22.1")
  83. -- tests enabled
  84. -- Configuring done
  85. -- Generating done
  86. -- Build files have been written to: /aaaa/workspace/STLINKALL/stlink2/build/Debug
  87. [DEBUG]
  88. Scanning dependencies of target stlink2-shared
  89. [  2%] Building C object src/CMakeFiles/stlink2-shared.dir/stlink2.c.obj
  90. [  5%] Building C object src/CMakeFiles/stlink2-shared.dir/cortexm.c.obj
  91. [  8%] Building C object src/CMakeFiles/stlink2-shared.dir/flash.c.obj
  92. [ 11%] Building C object src/CMakeFiles/stlink2-shared.dir/log.c.obj
  93. [ 14%] Building C object src/CMakeFiles/stlink2-shared.dir/usb.c.obj
  94. [ 17%] Building C object src/CMakeFiles/stlink2-shared.dir/stm32.c.obj
  95. [ 20%] Building C object src/CMakeFiles/stlink2-shared.dir/semihosting.c.obj
  96. [ 23%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/hexstr.c.obj
  97. [ 26%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/msleep.c.obj
  98. [ 29%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/ihex.c.obj
  99. [ 32%] Building C object src/CMakeFiles/stlink2-shared.dir/utils/flag.c.obj
  100. [ 35%] Linking C static library stlink2.a
  101. [ 35%] Built target stlink2-shared
  102. Scanning dependencies of target stlink2-static
  103. [ 38%] Building C object src/CMakeFiles/stlink2-static.dir/stlink2.c.obj
  104. [ 41%] Building C object src/CMakeFiles/stlink2-static.dir/cortexm.c.obj
  105. [ 44%] Building C object src/CMakeFiles/stlink2-static.dir/flash.c.obj
  106. [ 47%] Building C object src/CMakeFiles/stlink2-static.dir/log.c.obj
  107. [ 50%] Building C object src/CMakeFiles/stlink2-static.dir/usb.c.obj
  108. [ 52%] Building C object src/CMakeFiles/stlink2-static.dir/stm32.c.obj
  109. [ 55%] Building C object src/CMakeFiles/stlink2-static.dir/semihosting.c.obj
  110. [ 58%] Building C object src/CMakeFiles/stlink2-static.dir/utils/hexstr.c.obj
  111. [ 61%] Building C object src/CMakeFiles/stlink2-static.dir/utils/msleep.c.obj
  112. [ 64%] Building C object src/CMakeFiles/stlink2-static.dir/utils/ihex.c.obj
  113. [ 67%] Building C object src/CMakeFiles/stlink2-static.dir/utils/flag.c.obj
  114. [ 70%] Linking C static library stlink2.a
  115. [ 70%] Built target stlink2-static
  116. Scanning dependencies of target stlink2
  117. [ 73%] Building C object src/cmd/stlink2/CMakeFiles/stlink2.dir/main.c.obj
  118. [ 76%] Linking C executable stlink2
  119. [ 76%] Built target stlink2
  120. Scanning dependencies of target probe
  121. [ 79%] Building C object tests/CMakeFiles/probe.dir/probe.c.obj
  122. [ 82%] Linking C executable probe
  123. [ 82%] Built target probe
  124. Scanning dependencies of target open_close
  125. [ 85%] Building C object tests/CMakeFiles/open_close.dir/open_close.c.obj
  126. [ 88%] Linking C executable open_close
  127. [ 88%] Built target open_close
  128. Scanning dependencies of target ihex
  129. [ 91%] Building C object tests/CMakeFiles/ihex.dir/ihex.c.obj
  130. [ 94%] Linking C executable ihex
  131. [ 94%] Built target ihex
  132. Scanning dependencies of target log
  133. [ 97%] Building C object tests/CMakeFiles/log.dir/log.c.obj
  134. [100%] Linking C executable log
  135. [100%] Built target log

  136. admin@admin-PC MINGW32 ~/workspace/STLINKALL/stlink2
复制代码
测试工具在 build\Debug\tests
编好的静态库 build\Debug\src\stlink2.a





msys2命令行下可直接运行.
window cmd下运行可能会提示缺少msys-2.0.dll,msys2\usr\bin下可以找的

测试一下:

open_close

open_close



ENJOY YOURSELF







评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20

查看全部评分

1 收藏 2 评论15 发布时间:2017-2-8 14:17

举报

15个回答
Mandelbrot_Set 回答时间:2017-2-8 14:46:17
读下flash 看上去OK

修改下open_close.c:
#include <stdio.h>
#include "stlink2.h"

void dump_hex(const void * data, size_t size)
{
        char ascii[17];
        size_t i, j;
        ascii[16] = '\0';
        for (i = 0; i < size; ++i) {
                printf("%02X ", ((unsigned char*)data));
                if (((unsigned char*)data) >= ' ' && ((unsigned char*)data) <= '~') {
                        ascii[i % 16] = ((unsigned char*)data);
                } else {
                        ascii[i % 16] = '.';
                }
                if ((i+1) % 8 == 0 || i+1 == size) {
                        printf(" ");
                        if ((i+1) % 16 == 0) {
                                printf("|  %s \n", ascii);
                        } else if (i+1 == size) {
                                ascii[(i+1) % 16] = '\0';
                                if ((i+1) % 16 <= 8) {
                                        printf(" ");
                                }
                                for (j = (i+1) % 16; j < 16; ++j) {
                                        printf("   ");
                                }
                                printf("|  %s \n", ascii);
                        }
                }
        }
}

static void test_open_close(stlink2_context_t ctx, const char *serial)
{
        stlink2_t dev;

        dev = stlink2_open(ctx, serial);
        if (!dev)
                return;

        uint32_t cpuid;
        uint16_t devid;

        stlink2_log_set_level(dev, STLINK2_LOGLEVEL_INFO);

        //printf("  serial: %s\n",    stlink2_get_serial(dev));
        //printf("    name: %s\n",    stlink2_get_name(dev));
        //printf(" version: %s\n",    stlink2_get_version(dev));

        stlink2_get_mode(dev);
        stlink2_set_mode_swd(dev);
        //stlink2_mcu_halt(dev);

        /*
    uint32_t pc;

        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);
        printf(" PC: 0x%08x\n", pc);
        stlink2_read_all_regs(dev);

        stlink2_mcu_init(dev);
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_PC, &pc);
        printf(" PC: 0x%08x\n", pc);

        uint32_t xpsr;
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_XPSR, &xpsr);
        printf(" xPSR: 0x%08x\n", xpsr);

        uint32_t control;
        stlink2_read_reg(dev, STLINK2_CORTEXM_REG_CONTROL, &control);
        printf(" CONTROL: 0x%08x\n", control);

        cpuid = stlink2_get_cpuid(dev);
        devid = stlink2_get_devid(dev);
*/
/*
        printf(" voltage: %f\n",    stlink2_get_target_voltage(dev));
        printf("   cpuid: %08x\n",  cpuid);
        printf("     partno: %03x (%s)\n", stlink2_cortexm_cpuid_get_partno(cpuid), stlink2_cortexm_cpuid_partno_str(cpuid));
        printf("  coreid: %08x\n",  stlink2_get_coreid(dev));
        printf("  chipid: %08x\n",  stlink2_get_chipid(dev));
        printf("   devid: %s (0x%03x)\n", stlink2_stm32_devid_str(devid), devid);
        printf("  flash size: %dKiB\n", stlink2_get_flash_size(dev));
        printf("  unique id: %s\n", stlink2_get_unique_id(dev, 0x1ff800d0));
*/

//#ifdef BLA
        uint8_t *flash = malloc(1024);
        stlink2_read_mem(dev, 0x08000000, flash, 1024);
        dump_hex(flash, 1024);
//#endif
#ifdef SEMIHOSTING
        while (true) {
                if (stlink2_get_status(dev) == STLINK2_STATUS_CORE_HALTED)
                        stlink2_mcu_run(dev);
                stlink2_semihosting(dev);
                stlink2_msleep(1);
        }
#endif

        //stlink2_mcu_run(dev);
        stlink2_close(&dev);
}

int main(void)
{
        stlink2_context_t ctx = stlink2_init();

        test_open_close(ctx, NULL);
        stlink2_exit(&ctx);
}

readram.PNG
moyanming2013 回答时间:2017-2-8 17:37:02
不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?
七哥 回答时间:2017-2-8 23:11:38
楼主强大,楼主威武,此处有掌声
标记备用
Mandelbrot_Set 回答时间:2017-2-9 09:55:48
moyanming2013 发表于 2017-2-8 17:37
不同于ST-LINK/V2吧?ST-LINK/V2还未开源吧?

我截图用的NUCLEO-F303RE..
xiongmao5k 回答时间:2017-3-29 14:26:20

最近也在搞这个。

本帖最后由 xiongmao5k 于 2017-3-29 16:25 编辑

我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。
现在已经编译成功,生成了三个文件,sg.exe   flash.exe   usb.exe    问一下楼主,接下来应该怎么用啊???
Mandelbrot_Set 回答时间:2017-3-30 09:17:16
xiongmao5k 发表于 2017-3-29 14:26
我用的是TDM-GCC,cmake已经构建成功,make有问题,先赞一下楼主,再回过头看。
现在已经编译成功,生成了 ...

你用的应该是http://github.com/texane/stlink吧。
和我一楼说的不是一个东西。这个要比我1楼说的功能强很多.
这个github上有编译好的win64版本
xiongmao5k 回答时间:2017-3-30 16:05:46
我用的也是STlink-v2,现在想做的就是自己修改main文件,实现通过代码实现stlink直接对spi flash下载擦除的功能。楼主有没有好的建议?能否留个联系方式方便交流。?
Mandelbrot_Set 回答时间:2017-3-30 17:59:53
xiongmao5k 发表于 2017-3-30 16:05
我用的也是STlink-v2,现在想做的就是自己修改main文件,实现通过代码实现stlink直接对spi flash下载擦除的 ...

官方stlink utility 就有这功能的.(没用过)
http://www.st.com/content/ccc/re ... s/en.CD00262073.pdf
2.2.6节 3.9节 等

xiongmao5k 回答时间:2017-4-5 13:25:51
本帖最后由 xiongmao5k 于 2017-4-6 11:31 编辑

软件我是用过的,现在是想用STlink通过读写寄存器配置STM32的SPI,将数据写入DR寄存器。然后再外置的SPI FLASH读取DR寄存器。来直接对外置SPI FLASH进行读写操作。
xiongmao5k 回答时间:2017-4-12 17:21:34
感谢楼主写的文章,我后面又在spi_flash芯片上加了个spiffs文件系统,已经跑成功了!
CC4 回答时间:2017-4-12 18:35:29
我怎么编译不出来这些可执行文件呢?执行make debug以后,生成了一堆东东,象是ihex log open_close probe 这怎么使用呀?
Mandelbrot_Set 回答时间:2017-4-13 09:34:00
select326 发表于 2017-4-12 18:35
我怎么编译不出来这些可执行文件呢?执行make debug以后,生成了一堆东东,象是ihex log open_close probe  ...

有一个*.a的库。
ihex log open_close相当于是例子.功能比较少...
CC4 回答时间:2017-4-13 09:56:46
Mandelbrot_Set 发表于 2017-4-13 09:34
有一个*.a的库。
ihex log open_close相当于是例子.功能比较少...

那意思是,这个不是一个完整的工具?而只是一个开发库?
Mandelbrot_Set 回答时间:2017-4-13 10:19:33
select326 发表于 2017-4-13 09:56
那意思是,这个不是一个完整的工具?而只是一个开发库?

是啊.
另外,找了半天只找到memread,没找到memwrite,
功能不是很全,编译一下,纯当练练手了.
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版