标签: stm32cubeide

我可以阻止 STMCubeIDE 在微控制器重置(调试)时打开启动 .s 文件吗?

当我调试时,STM32CubeIDEstartup_stm32f722xx.s在微控制器重置时打开文件(当我开始调试或重置微控制器时)。

看起来调试器有一些“隐藏”断点,它击中了它们,然后继续,但文件保持打开状态。

现在对我来说没有用。对此我能做什么?

我正在使用 STM32CubeIDE 1.6.1 和 STM Nucleo-F722ZE(板载 STLink 3v)。

debugging stm32cubeide

7
推荐指数
1
解决办法
2436
查看次数

为什么STM32CubeIDE生成了2个链接描述文件?

我正在学习 STM32 裸机编程,在此过程中我使用 STM32F429ZI mcu。我在互联网上阅读了很多示例,它们都只使用一个链接描述文件。我在想,如果这些示例非常适合我的 MCU,那么链接器脚本在功能方面将与 STM32CubeIDE 生成的链接器脚本相同(?)。

现在我的问题是,当我使用 STM32CubeIDE 生成项目时,我得到了 2 个链接器脚本,但是STM32F429ZITX_FLASH.ld我检查构建日志时,仅使用了一个链接器脚本,即. STM32CubeIDE 使用一两个链接器脚本来构建项目吗?如果它只使用一个,那么为什么它生成两个链接描述文件?STM32F429ZITX_RAM.ldSTM32F429ZITX_FLASH.ld

下面,我发布了构建日志。这是我在构建日志中找到的命令:

arm-none-eabi-gcc -o "STM32F429ZI-Test.elf" @"objects.list"   -mcpu=cortex-m4 -T"/home/biomed/STM32CubeIDE/workspace_1.4.0/STM32F429ZI-Test/STM32F429ZITX_FLASH.ld"
Run Code Online (Sandbox Code Playgroud)

项目浏览器

arm-none-eabi-gcc -o "STM32F429ZI-Test.elf" @"objects.list" -mcpu=cortex-m4 -T"/home/biomed/STM32CubeIDE/workspace_1.4.0/STM32F429ZI-Test/STM32F429ZITX_FLASH.ld"

14:10:36 **** Build of configuration Debug for project STM32F429ZI-Test ****
make -j8 all 
arm-none-eabi-gcc "../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c" -mcpu=cortex-m4 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DDEBUG -DSTM32F429xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d" -MT"Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o"
arm-none-eabi-gcc "../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c" -mcpu=cortex-m4 -std=gnu11 …
Run Code Online (Sandbox Code Playgroud)

linker gcc build stm32 stm32cubeide

5
推荐指数
1
解决办法
4427
查看次数

在STM32CubeIDE项目中添加新的.h和.cpp文件的位置

我使用 STM32CubeIDE 通过“文件”>“新建”>“STM32 项目”为我的 nucleo-f411re 板创建了一个新的 (C++) 项目。该项目像往常一样创建。因为我选择 C++ 作为目标语言,所以我将“main.c”重命名为“main.cpp”。一个简单的“blinky”编译并在板上正确运行。所以现在我想开始向项目添加一些 C++ 代码。

“main.cpp”位于项目树中的 myproject > Core > Src > main.cpp 下。如果我想创建一些新的源/头文件,例如“foo.h”和“foo.cpp”,我想我可以右键单击项目树中的某些内容,然后“新建”>“头文件”或“新建”>“源文件”。但问题是——我右键单击什么来创建源文件/头文件?我假设该文件将在我右键单击的位置(=文件夹)中创建。我想把它们放在哪里?它们都在“Core”文件夹中吗?分别在“Core > Inc”和“Core > Src”文件夹中?我不知道。

编辑:我分别将头文件/源文件添加到 Core > Inc 和 Core > Src,这似乎有效。是推荐的吗?我想知道如果我更改配置,它们是否仍然存在,导致代码重新生成。

stm32cubeide

5
推荐指数
1
解决办法
1万
查看次数

STM32 Cube IDE - 在最初成功启动和使用后,现在在启动屏幕启动阶段保持空闲状态 (Linux)

我使用的是 Ubuntu 22.04 以及 STM32 Cube IDE(最新版本)的官方 Debian 安装程序,直接从 STM 网站下载。

安装完所有内容(默认安装,位于/opt/st/)后,我启动了 IDE 并开始使用它。我设法快速找到了为我的 STM32L-Discovery 板创建、构建和启动一个简单的闪烁测试程序(闪烁两个 LED)的方法(尽管我对板和 ARM 的总体技能都很差)。

现在的问题是第二天我无法再启动 IDE。从那以后一直都是这样。一旦启动(无论是从菜单中安装创建的启动器(我有 XFCE)还是通过终端),IDE 在初始屏幕中的进度条填满后保持空闲状态:

STM32 Cube IDE - 在启动屏幕上冻结

奇怪的是,htop我没有看到任何活动:

[htop - STM32 Cube IDE 没有活动

永远都是这样。好吧,永远在这里意味着 20-30 分钟,直到我的耐心耗尽。:D

我看到启动器启动了Wayland版本。我尝试了另一个以防万一,尽管从安装开始后第一次开始这应该不是问题(即使使用我的旧笔记本电脑)。

有人知道解决办法吗?我可以尝试重新安装并删除我的工作区,尽管 IDE 目前似乎并不支持后者。

linux ubuntu stm32 stm32cubeide

5
推荐指数
1
解决办法
4527
查看次数

STM32CubeIDE 在没有调试信息或程序代码之外的地址“xxx”处中断

我正忙着用 STM32F030C8 单片机开发一些新硬件。我正在使用带有 gcc 的 STM32CubeIDE。我对微控制器开发非常陌生,这是我使用 ST 及其工具的第一个项目。

这是一个非常基本的程序,它只触发一个 GPIO。其余的都是生成的代码。由于我在这方面的经验很少,我希望有人可以指出我可以查看的位置。我怀疑这可能是配置问题。

这是代码(我删除了所有生成的注释以使其更紧凑):

int main(void)
{
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2); //my code 1
  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2); //my code 2

  while (1)
  {
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);
      HAL_Delay(1000);
  }
}
Run Code Online (Sandbox Code Playgroud)

当我单步执行代码时,一旦我进入“我的代码 2”,它将触发“我的代码 1”上的 GPIO,这将导致问题。我什至尝试过只运行一个完全生成的程序而不做任何修改,但问题仍然存在。这是一个快速测试,看看程序是否确实在 mcu 上运行。它确实会触发 GPIO。

调试器控制台输出:

Temporary breakpoint 1, main () at ../Core/Src/main.c:74
74        HAL_Init();

Program received signal SIGTRAP, Trace/breakpoint trap.
0x1fffecec in ?? ()
Run Code Online (Sandbox Code Playgroud)

临时断点是程序开始的地方,然后我可以从那里运行。或者单步执行,结果都是一样的。

控制台输出:

Waiting for debugger connection...
Debugger connected
      -------------------------------------------------------------------
                        STM32CubeProgrammer v2.4.0                  
      -------------------------------------------------------------------

ST-LINK SN  : 34FF6E065250343816210143
ST-LINK …
Run Code Online (Sandbox Code Playgroud)

c microcontroller stm32f0 stm32cubeide

4
推荐指数
1
解决办法
2439
查看次数

在 macOS Big Sur 上安装 STM32CubeProgrammer

我正在尝试在 MacOS BigSur 上安装 STM32CubeProgrammer,我已按照网站上的以下步骤进行操作: https: //community.st.com/s/question/0D50X0000BmnqrB/how-to-run-stm32cubeprogrammer-on-macos-catalina- 10151-19b88?t=1620993010340。虽然当我使用终端运行程序时,它给我一个错误,说我找不到 jre 文件夹。但从网站下载时,附带了jre文件夹、SetupSTM32CubeProgrammer-2.7.0.exe和SetupSTM32CubeProgrammer-2.7.0.app。
这是错误行:

JRE Folder not found!
Run Code Online (Sandbox Code Playgroud)

未找到jre

stm32 stm32cubeide

4
推荐指数
1
解决办法
6499
查看次数

DMA 模式下 UART 接收数据失败

我正在尝试从 NUCLEO F446RE stm32 板上的电脑接收 8 个字节。传输至电脑即可。问题是,我无法使用 DMA 接收数据。我看到了一个具有几乎相同代码的示例,并且它对这个人有用。如果我使用中断模式(只需将 HAL_UART_Receive_DMA 更改为 HAL_UART_Receive_IT,它确实可以工作并且正在调用 RX Complete 回调。

这是完整的 main.c。DMA 处于循环模式。

main.c
Run Code Online (Sandbox Code Playgroud)

https://pastebin.com/1W4BCjxB

stm32 stm32f4 nucleo cubemx stm32cubeide

3
推荐指数
1
解决办法
6519
查看次数

无法解决 STM32CubeIDE 中与指针数组相关的 C 警告

面临着我们无法摆脱的警告。我使用 stm32 MCU 和 STM32CubeIDE 以及标准 C11 编译器。我想我可以理解为什么编译器会抛出警告,但问题是我无法解决。任何帮助表示赞赏。谢谢。

指针数组是这样定义的

static const GPIO_TypeDef *gpioOutPortss[GPIO_OUT_CH_NR] =
{
    DOUT_OD_OUT4_GPIO_Port,
    DOUT_OD_OUT6_GPIO_Port,
    DOUT_OD_OUT5_GPIO_Port,
    DOUT_OD_OUT7_GPIO_Port,
    DOUT_LED_DISABLE_GPIO_Port,
    DOUT_BUZZ_GPIO_Port,
    DOUT_OD_OUT8_GPIO_Port,
    DOUT_OD_OUT3_GPIO_Port,
    DOUT_OD_OUT2_GPIO_Port,
    DOUT_OD_OUT1_GPIO_Port,
    DOUT_ALARM_GPIO_Port,
    DOUT_12V_PWR_GPIO_Port,
    DOUT_12V_PWR_GPIO_Port
};
Run Code Online (Sandbox Code Playgroud)

要调用的函数是这样定义的:

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));

  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
  }
}
Run Code Online (Sandbox Code Playgroud)

实际的函数调用如下所示:

if (gpioOutPolarity[channel])
{
    HAL_GPIO_WritePin(gpioOutPortss[channel], gpioOutPins[channel],
    GPIO_PIN_SET);
}
Run Code Online (Sandbox Code Playgroud)

编译器产生的警告是这样的:

warning: passing argument 1 of 'HAL_GPIO_WritePin' discards 'const' qualifier …
Run Code Online (Sandbox Code Playgroud)

c stm32 c11 stm32cubeide

1
推荐指数
1
解决办法
437
查看次数

STM CubeIDE 1.9.0 有链接器问题吗?

Prolog:我正在使用 STM32 CubeIDE 为 STM32 微控制器开发嵌入式应用程序,例如 F1 系列、F4 系列、G0 系列和其他一些使用 C 语言的控制器。

发生了什么:今天早上,自动更新功能建议我更新到 STM CubeID 版本 1.9.0,我接受了。更新程序完成后,我打开当前项目并更改 typedef 结构中的一个变量,然后单击“构建”按钮。突然,链接器报告了很多“多重定义”和“首先在此处定义”错误。该项目昨天使用 CubeIDE 1.8 版本完美编译,没有任何问题

经过一两个小时的搜索后,我可能错过了一个分号或其他方向的东西,这可能会弄乱整个代码,我得出的结论是,从 CubeIDE 1.8.0 升级到 1.9.0 可能是根源导致此错误的原因。

所以我决定卸载 CubeIDE 1.9.0 并重新安装版本 1.8.0,将项目回滚到昨天晚上的最后一个工作版本(使用 1.8.0 编译),进行相同的更改,瞧!- 一切又恢复正常了。

对我来说,STM 似乎把链接器弄乱了。任何人都可以证实这种行为,还是只有我受到影响?

stm32 stm32cubeide

1
推荐指数
1
解决办法
3639
查看次数

HAL_ADC_PollForConversion - 它到底是做什么用的?

我已经对 STM32 (F103RB) 进行了几周的修修补补,但我不明白的一件事是

HAL_ADC_PollForConversion
Run Code Online (Sandbox Code Playgroud)

功能目的。我的意思是,我没有看到此功能对 ADC 读数有任何影响。这是我的代码示例:

   Version 1 (with PollForConversion on)

     while (1)
    
    {
        HAL_ADC_Start(&hadc1);
        HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
         
        uint32_t value = HAL_ADC_GetValue(&hadc1);
        float voltage = 3.3f * value / 4096.0f;
         
        printf("ADC = %lu (%.3f V)\n", value, voltage); //send the value via UART
        HAL_Delay(250);
    
        }

Version 2 (with PollForConvertion off)

     while (1)
    
    {
        HAL_ADC_Start(&hadc1);
        //HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
         
        uint32_t value = HAL_ADC_GetValue(&hadc1);
        float voltage = 3.3f * value / 4096.0f;
         
        printf("ADC = %lu (%.3f V)\n", value, voltage); //send the value via UART …
Run Code Online (Sandbox Code Playgroud)

stm32 adc nucleo stm32cubeide

1
推荐指数
1
解决办法
9219
查看次数

标签 统计

stm32cubeide ×10

stm32 ×7

c ×2

nucleo ×2

adc ×1

build ×1

c11 ×1

cubemx ×1

debugging ×1

gcc ×1

linker ×1

linux ×1

microcontroller ×1

stm32f0 ×1

stm32f4 ×1

ubuntu ×1