[STM32L4+] 【STEVAL-STWINKT1B测评】linux开发环境搭建与点灯

[复制链接]
 楼主| xhackerustc 发表于 2024-9-1 19:33 | 显示全部楼层 |阅读模式
<
本帖最后由 xhackerustc 于 2024-9-1 19:39 编辑

#申请原创#

STEVAL-STWINKT1B这块开发板给人第一感觉就是板载传感器真是多,所以非常适合用来做STM家的传感 器评测。另开发板主控是用的STM32L4R9ZIJ6 MCU,其cpu基于Cortex-M4,最大频率120MHz。开发套件 自带了一块480 mAh的锂电池,STLINK-V3MINI调试器,以及一个外壳。完全组装起来后很漂亮,让人爱不释手。

linux开发环境概述
笔者长期在linux环境中干活,所以这次评测也以linux环境为例。开发环境软件上来说其实包括三大件:toolchain、项目工程编译管理和烧录调试。toolchain就用系统安装的arm-none-eabi-gcc,没安装 的读者可以看笔者其它开发板的评测,这里不赘述了。项目工程的编译笔者早期非常喜欢原始的Makefile,但后期MCU越来越复杂后切到cmake了。至于工具烧录和调试笔者特喜欢openocd与pyocd,但经笔者初步尝试,最新从源码编译的openocd成功烧录img后再openocd连接会报以下的错误,原因未知。
1.jpg


pyocd烧录同一个img没有此现象。另外说一句:用STM32CubeProgrammer烧录也没有此现象,说明openocd对STM32L4R9ZIJ的flash算法可能还有些兼容性问题,当然如果只用openocd调试是没任何问题的。所以笔者建议目前还是用pyocd吧。pyocd使用前需要安装下相应的Keil Pack包,STM官方已经上传至Keil官网,所以以下命令即可安装STM32L4R9ZIJ的pack包
  1. pyocd pack install stm32l4r9zijx


点灯
下面开始大家喜闻乐见的点灯,但点灯之前有个问题源码基于什么来做。显而易见可以选择STM32CubeL4,但前面说过这个STEVAL-STWINKT1B开发板很特别,传感器特别多,STM官方甚至给它单独打造了一个名叫fp-sns-datalog2的github项目,使用上特别方便,用户甚至不用编译固件就能很方便的通过USB命令或者sdcard上的配置文件来使用它,那源码就基于它来开发吧。另外说一句:STM官方还有一个名叫fp-sns-datalog1的github项目,个人理解它与fp-sns-datalog2的区别应该就是底层的RTOS不一样,fp-sns-datalog1基于FreeRTOS,而fp-sns-datalog2基于ThreadX,两者都可以做代码基础,但笔者更喜欢ThreadX一些,所以选中了fp-sns-datalog2。

clone源码先:
  1. git clone https://github.com/STMicroelectronics/fp-sns-datalog2.git



下面正式开始点灯之旅,先把样例工程拷贝一下

  1. cp -a Projects/STM32L4R9ZI-STWIN/Applications/DATALOG2/ Projects/STM32L4R9ZI-STWIN/Applications/demo



经阅读STEVAL-STWINKT1B开发板开发板原理图可知,有两个LED可由用户控制,分别是LED1(蓝色)和LED2(橙色),分别接在了PE1和PD0两引脚上,修改Projects/STM32L4R9ZI-STWIN/Applications/demo/Core/Src/main.c加入点灯代码如下

  1. <div class="blockcode"><blockquote>int main(void)
  2. {
  3.   HAL_Init();
  4.   SystemClock_Config();
  5.   SystemPower_Config();

  6.   MX_GPIO_PE1_Init();

  7.   while (1) {
  8.     HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
  9.     HAL_Delay(500);
  10.     HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
  11.     HAL_Delay(500);
  12.   }
  13. }




笔者的CMakeLists.txt文件如下
  1. set(CMAKE_SYSTEM_NAME Generic)
  2. set(CMAKE_SYSTEM_VERSION 1)
  3. set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
  4. cmake_minimum_required(VERSION 3.20)

  5. set(CMAKE_C_COMPILER arm-none-eabi-gcc)
  6. set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
  7. set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
  8. set(CMAKE_AR arm-none-eabi-ar)
  9. set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
  10. set(CMAKE_OBJDUMP arm-none-eabi-objdump)
  11. set(SIZE arm-none-eabi-size)

  12. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  13. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  14. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  15. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

  16. add_compile_options(-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16)
  17. add_compile_options(-ffunction-sections -fdata-sections -fno-builtin -fno-common -Wall -Wdouble-promotion -Wno-unused-parameter)

  18. add_compile_options(-O3)

  19. project(stwinkt1b C ASM)
  20. set(CMAKE_CXX_STANDARD 11)
  21. set(CMAKE_C_STANDARD 99)

  22. include_directories(Drivers/CMSIS/Include/
  23.                     Drivers/CMSIS/Device/ST/STM32L4xx/Include/
  24.                     Drivers/STM32L4xx_HAL_Driver/Inc/
  25.                     Projects/STM32L4R9ZI-STWIN/Applications/demo/Core/Inc/
  26.                     Projects/STM32L4R9ZI-STWIN/Applications/demo/mx/Inc/
  27.                     Drivers/BSP/Components/iis2dh/
  28.                     Drivers/BSP/Components/iis2mdc/
  29.                     Drivers/BSP/Components/iis3dwb/
  30.                     Drivers/BSP/Components/ism330dhcx/
  31.                     Drivers/BSP/Components/lps22hh/
  32.                     Drivers/BSP/Components/stts751/
  33.                     Projects/STM32L4R9ZI-STWIN/Applications/demo/Core/Inc/drivers/
  34.                     Projects/STM32L4R9ZI-STWIN/Applications/demo/Core/Inc/services/)

  35. add_definitions(-DSTM32L4R9xx -DSYS_TP_MCU_STM32L4)

  36. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include stm32l4xx_hal_conf.h -include sysconfig.h")

  37. file(GLOB_RECURSE SOURCES
  38.                 "Drivers/STM32L4xx_HAL_Driver/Src/*.c"
  39.                 "Projects/STM32L4R9ZI-STWIN/Applications/demo/Core/Src/*.c"
  40.                 "Projects/STM32L4R9ZI-STWIN/Applications/demo/Core/Src/tx_initialize_low_level.S"
  41.                 "Projects/STM32L4R9ZI-STWIN/Applications/demo/Core/Startup/startup_stm32l4r9zijx.s"
  42.                 "Projects/STM32L4R9ZI-STWIN/Applications/demo/mx/Src/*.c"
  43.                 "Drivers/BSP/Components/iis2dh/iis2dh_reg.c"
  44.                 "Drivers/BSP/Components/iis2mdc/iis2mdc_reg.c"
  45.                 "Drivers/BSP/Components/iis3dwb/iis3dwb_reg.c"
  46.                 "Drivers/BSP/Components/ism330dhcx/ism330dhcx_reg.c"
  47.                 "Drivers/BSP/Components/lps22hh/lps22hh_reg.c"
  48.                 "Drivers/BSP/Components/stts751/stts751_reg.c"
  49.                 )

  50. set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/Projects/STM32L4R9ZI-STWIN/Applications/demo/STM32CubeIDE/STM32L4R9ZIJX_FLASH.ld)
  51. add_link_options(
  52.                 -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
  53.                 -Wl,--gc-sections,--print-memory-usage,-Map,${PROJECT_NAME}.map
  54.                 --specs=nano.specs
  55.                 --specs=nosys.specs)
  56. add_link_options(-T ${LINKER_SCRIPT})

  57. add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})

  58. # target_link_libraries(${PROJECT_NAME}.elf printfloat)

  59. set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
  60. set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
  61. set(LST_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.lst)
  62. add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
  63.         COMMAND ${CMAKE_OBJCOPY} -Oihex lt;TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
  64.         COMMAND ${CMAKE_OBJCOPY} -Obinary lt;TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
  65.         COMMAND ${CMAKE_OBJDUMP} --all-headers --demangle --disassemble lt;TARGET_FILE:${PROJECT_NAME}.elf> > ${LST_FILE}
  66.         COMMAND ${SIZE} --format=berkeley lt;TARGET_FILE:${PROJECT_NAME}.elf>
  67. )


编译
  1. cmake -B build
  2. cmake --build build -j8



烧录
  1. pyocd load -e sector -t stm32l4r9zijx build/stwinkt1b.bin


此时STEVAL-STWINKT1B开发板上的绿色LED开始有规律闪烁,点灯完毕




caigang13 发表于 2024-9-2 07:49 来自手机 | 显示全部楼层
L系列是ST的低功耗型号,现在好像没有怎么更新了。
WoodData 发表于 2024-9-2 10:30 | 显示全部楼层
学习参考一下
xionghaoyun 发表于 2024-9-2 13:55 | 显示全部楼层
只有.c文件看得懂
呐咯密密 发表于 2024-9-2 14:49 | 显示全部楼层
多来点,这个板子点灯太浪费了
飞思啦 发表于 2024-9-2 16:58 | 显示全部楼层
可以试试功耗评测,看看这个功耗能做到多低
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

165

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部