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

[折腾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还未开源吧?
toofree 回答时间: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进行读写操作。
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

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