stm32 cube ide 无法使用 盗版 stlink
需求 stm32 cube ide 使用淘宝 ¥10+ 的 stlink,提示出错。 解决 这个是 st 自身的验证,只能换成 mdk,才能用了,而且 mdk 也会有弹窗,但是能讲究着用。 参考 STM32CubeIDE使用笔记(03):使用ST-LINK调试程序
需求 stm32 cube ide 使用淘宝 ¥10+ 的 stlink,提示出错。 解决 这个是 st 自身的验证,只能换成 mdk,才能用了,而且 mdk 也会有弹窗,但是能讲究着用。 参考 STM32CubeIDE使用笔记(03):使用ST-LINK调试程序
需求 stm32 cube ide 配置完成引脚后,发现时钟有问题,无法配置外部时钟 解决 这个其实是伴随着 sys 之类的无法选择外部时钟,无法选择 swd 等。 这个其实是软件 bug,把软件重启一下,就可以设置了。 参考 STM32CubeMX配置时钟无法使用高速外部时钟HSE
需求 如何给 stm32 cube ide 的 mcu package 安装 patch? 解决 直接安装 patch 的时候,会提示,没有找到 stm32cube_fw_f1_v180.zip ,但是实际上,我们已经安装了 v1.8.0 的 package. 但是解决也很简单,把原来安装的 v1.8.0 的 package 的 zip 压缩包,复制到默认的 C:\Users\Administrator\STM32Cube\Repository 这个仓库里面,并且把名字从 STM32Cube_FW_F1_V1.8.0.zip 修改为 stm32cube_fw_f1_v180.zip, 然后再进行 patch 安装即可。 参考 How do I install STM32Cube MCU Package for STM32F4 Series 1.27.1 without an internet connection? How to install a patch offline in the STM32Cube IDE? STM32 CubeMx本地安装库并打补丁(patch安装)
需求 编译的时候,提示 undefined reference to 解决 这种问题经常会碰到,一般就是相关源文件没有在编译列表里面,结果经过仔细查找,都添加进去了。后来经过仔细查找,发现原来是 c++ 和 c 混合编译的问题,在 c++ 中文件里面调用的函数,其所在的头文件没有使用 extern "C" 包含,导致的。想要修改也很简单,不需要改动头文件,只需要在 c++ 文件中这样: #include "gx_api.h" extern "C" { #include "gx_display.h" } 而且其实在 map 文件中是有相关线索的,下面分别是没有用 extern 包含,和用了 extern 包含的 map 文件中的函数信息。可以明显看到有 extern 包含的,有相关地址。 .text._gx_display_driver_565rgb_setup 0x0000000000000000 0x260 ./guix/common/src/gx_display_driver_565rgb_setup.o .text._gx_display_driver_565rgb_setup 0x000000000801e6e8 0x260 ./guix/common/src/gx_display_driver_565rgb_setup.o 0x000000000801e6e8 _gx_display_driver_565rgb_setup 参考 gcc “undefined reference to” 问题解决方法
需求 如何使用 stm32cubeide 开启 threadx 中的 stack check ? 解决 使能 stack check 在项目属性中, C/C++ Build -> Settings -> MCU GCC Compiler -> Preprocessor 中添加 TX_ENABLE_STACK_CHECKING 在 MCU G++ Compiler 中添加同样的 TX_ENABLE_STACK_CHECKING printf 函数 #include "stdio.h" #include "usart.h" int _write(int file, char *ptr, int len) { HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, 0xFFFF); return len; } *注意: 需要在头文件中增加 int _write(int file, char *ptr, int len); , 否则可能无法覆盖由 __attribute__((weak)) 修饰的原来 _write. * 处理函数 VOID StackErrorHandler(TX_THREAD * thread_ptr) { printf("=============================================================== \n"); printf("如下任务被检测出栈溢出 \n"); printf("=============================================================== \n"); printf(" 任务优先级 任务栈大小 当前使用栈 最大栈使用 任务名 \n"); printf(" Prio StackSize CurStack MaxStack Taskname \n"); TX_THREAD *p_tcb; /* 定义一个任务控制块指针 */ p_tcb = &ServiceVibration; /* 遍历任务控制列表TCB list),打印所有的任务的优先级和名称 */ do { if (p_tcb !...
需求 如何使用 stm32cubeide 运行 threadx? 解决 启用 threadx core 打开项目 ioc 文件, Middleware and software Packs -> THREADX -> Mode 勾选 core 下方的 configuration 中, TX_TIMER_TICKS_PER_SECOND 设置为 1000. Memory Configuration 中的 ThreadX memory pool size 也设置大一点,这个是默认生成的字节池的大小。 左侧 System Core 中的 SYS, 修改 Timebase Source 为 TIM7. 这个一定要修改,因为 HAL 的基准是 systick, threadx 的基准也是 systick, 如果不修改,会导致不自动生成 systick 的 handler 函数,导致进入 hard fault. 至于到底修改为哪个 tim, 这个就随便了。 保存自动生成代码。 使用 threadx 新建文件,创建 UINT ThreadInit(TX_BYTE_POOL * byte_pool) 这样的函数,然后在 app....
需求 调试的时候,有时候会比较在意某个寄存器到底是什么时候被修改? 解决 这个其实可以参照 eclipse 正常的变量监控的方法去做。 找到寄存器对应的结构体变量,比如说我需要监视 uart1 的 TCIE 在 DMA 发送的时候,是什么时候被置位的。我就可以先找到 uart1 对应的结构体变量 huart1. 添加变量监控。 在 右侧的 expressions 中添加 huart1 添加断点。 在 huart1 -> instance -> CR1 上面右键,点击 add watch point 就可以新增一个监视这个寄存器的断点了。 参考 Eclipse开启变量监控 STM32CubeIDE查看变量 STM32 CubeIDE 仿真时怎样把变量添加到监视窗口。 记一次STM32中HardFault问题的调试解决(INVPC, LR 0xFFFFFFF5) STM32CubeIDE使用总结(三)——debug调试程序 关于STM32CubeIDE环境下的变量显示及监测 用Keil仿真调试查看变量内存地址被篡改的方法 keil debug时用断点管理抓取变量变化 eclipse中debug改变变量的值
需求 最近使用 stm32u575 芯片的时候,调试时发现很尴尬的问题, jlink 必须安装高版本,然后盗版的就不能用了。MDK 可以直接使用 DAPLink,但是 stm32cubeide 不能直接支持。所以需要想办法解决这个问题。 解决 参考了网上的资料,st 自带的 openocd 不能用,端口不对。 openocd 需要下载官方的 openocd,不要使用 stm32cubeide 自带的。下载地址: https://gnutoolchains.com/arm-eabi/openocd/ 。下载后自行安装。 配置 openocd stm32cubeide 菜单栏 -> Run -> External Tools -> External Tools Configrations -> Program 右键 -> New Configration. Name 自己输入。 Location: 选择刚才下载的 openocd 中的 openocd.exe 所在路径。 Arguments: -f interface\cmsis-dap.cfg -f target\stm32u5x.cfg apply 然后 Run. 配置 debug Run -> Debug Configurations -> GDB Hardware Debugging 右键 -> New Configuratin....
需求 在使用 stm32 cube ide 开发的时候,调试时希望使用 sprintf, printf 等 通过 %f 打印浮点数,需要开启 ide 相关支持. 解决 开启 浮点数支持, =project –> properties –> c/c++ build –> setting –> tools setting –> mcu setting –> use float with printf from newlib-nano(-u_printf_float)= 参考 C语言用printf读取和输出double类型
需求 在使用 stm32 cube ide 开发的时候,希望通过 c++ 开发,但是自动生成的一些文件是 c 语言的,所以需要解决混合开发的问题。 解决 项目使用 cpp 在新建项目的时候,targeted language 选择 C++ 即可。 混合开发 所有 cpp 需要用到的 c 的头文件,都需要包含 extern "C" 这个标识,需要把相关代码如下包含起来: // may be main.h #ifdef __cplusplus extern "C" { #endif // something #ifdef __cplusplus } #endif 参考 STM32CubeIDE实现nRF24L01通信(C和C++混合编程) STM32CubeMX快速创建工程 点亮LED灯 设置C/C++混合编译 让你的 STM32Cube KEILV5 + HAL库工程支持C++开发 C 和 C++混合编译