问题标签 [stm32cubeide]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
215 浏览

stm32f4 - 为什么在 PWM 模式下清除 TIM1->BDTR 中的 MOE 会停止为 STM32F401 触发 ADC1 IN STM32 Nulceo-64?

在实验过程中,我遇到了一个问题,我希望这里有人可能知道解决方案。

我在 PWM 模式下使用 TIMER1,它应该在后台连续运行。由于在 STM32F401 中无法使用 Timer1 更新事件触发 ADC,因此我使用了以下设置。

TIM1:触发事件选择_输出比较(OC1REF) ADC1:外部触发转换源_定时器 1 捕捉比较 1 事件

在通过 ADC1 检测到特定值时,我需要禁用主输出(我不想禁用定时器)所以我清除了 BDTR 寄存器中的 MOE 位。

但禁用 MOE 位实际上会停止 ADC 触发。

当仅禁用主输出且定时器仍在运行时,ADC 未获得正确触发可能是什么问题?

如果这不是正确的方法,那么单独关闭输出的正确方法是什么?

0 投票
1 回答
815 浏览

c++ - 从 STM32CubeIDE 启动 QEMU 模拟器的问题

我正在尝试 STM32CubeIDE,我一直在尝试让它与作为 Eclipse CDT 包一部分的 GDB QEMU 调试插件一起使用。我已经能够为我的 STM32F4-Discovery 板创建项目和调试配置,并且调试器部分启动,但是,就在模拟器启动时,它创建的 GUI 窗口突然崩溃,我收到此错误:

我认为这是由于我安装的 CDT 插件和我安装的 Ubuntu 20.04 附带的 GCC 工具链之间的一些不匹配造成的。但是,我不确定如何解决这个问题。

我有什么办法解决这个问题吗?

0 投票
0 回答
334 浏览

stm32 - STM32F4 ADC多模式,主控由定时器触发

首先:我使用的是STM提供的CubeIDE工具链。

一些 STM32 微控制器具有多个 ADC(例如 STM32F446xx)并提供多规则同时模式(DualMode 甚至 TripleMode),其中 ADC1 设置为主机并触发其他处于从机配置的 ADC。

当我在 CubeIDE 中使用此配置时,我仍然可以将 ADC1 的触发器设置为计时器,而不是在连续模式下使用它。这个配置有意义吗?我也可以为我想在同一个计时器上同步的所有 ADC 设置触发器,不是吗?所以按照我的理解,只有当我想让它在连续转换模式下运行并让所有 ADC 同步时,多模式才有意义。

0 投票
1 回答
1552 浏览

gcc - 为什么 STM32CubeIDE 有 2 个生成的链接器脚本?

我正在学习 STM32 裸机编程,为此我使用的是 STM32F429ZI mcu。我在互联网上阅读了很多示例,所有示例都只使用一个链接器脚本。我在想,如果这些示例适合我的 MCU,那么链接器脚本将与 STM32CubeIDE 生成的功能(?)相同。

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

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

项目浏览器

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"

0 投票
1 回答
593 浏览

c - 使用 USB CDC (STM32) 发送数据


我正在使用 NucleoF413ZH 和 STM32CubeIDE。我有 16 个麦克风,每个都连接到一个 ADC 通道,并且由于使用了 DMA,它可以将数据定向到内存。但是,我想对信号进行互相关,所以我得出的结论是我会将数据发送到 PC 或 RPi 4b,然后我会在那里进行计算。但对我来说,问题是从内存中发送了如此多的数据。我尝试使用 CDC_TRANSMIT_FS 但我无法发送所有 16 个通道的测量值,而且传输速度也很慢。有没有办法发送 16 个元素的整个数组,甚至更好的 16xM 元素,所以它可能会更快?我需要 16mic x10bit x44.1khz ~= 7Mbit/s =882KBytes/s,我也可以将一些麦克风减少到 12 个。这是我的代码(完整链接https://pastebin.pl/view/6059edc8):


另外,如果语法不好,对不起,英语是我的第二语言,我还在学习




usart 设置

0 投票
1 回答
537 浏览

external - 使用STM32cubeProgrammer进行外部FLASH慢速验证

我正在使用带有 Micron MT25Q Quad_SPI 闪存的 STM32F469 芯片。要对 Flash 进行编程,需要开发一个外部加载程序。一切正常,但问题是 QSPI Flash 的验证非常慢。

查看日志文件,它显示正在以 150K 字节块对 Flash 进行编程。但是,验证是在 1K 字节块中完成的。此外,在每次块检查之前,都会重新初始化芯片。我已经通过 STM32cubeIDE 和 STM32cubeProgrammer 直接尝试过这个。

外部编程器程序包含正确的芯片配置信息并指定 64K 页面大小。我看不出如何让程序员使用更大的块大小。看起来它了解使用了 SRAM 的哪一部分,并且正在使用板载 SRAM 中的 256K 的余额来对 QSPI 闪存进行编程。它可以使用相同的大小来读回数据,也可以使用外部加载器中的 Verify() 函数。它调用 Read() 然后检查数据本身。

有什么想法或提示吗?

让我添加一些关于创建新的外部加载器的意见。第一个观察是“不要”。如果您可以选择支持的外部芯片并将其固定以使用现有的加载器,那么就这样做。STM 只提供了 4 个示例程序,但它们必须有 50 个外部加载器。如果硬件设计复制了具有外部加载器的演示板的原理图,您应该没问题并避免进行开发工作。

外部加载程序不是完整的可执行文件。它提供了一组函数来执行基本操作,如 Init()、Erase()、Read() 和 Write()。诀窍是程序启动时没有 main() 并且没有运行启动代码。

外部加载器是一个 ELF 文件,重命名为“*.stldr”。编程工具查看调试信息以找到函数的位置。然后它设置寄存器来提供参数,PC 来运行函数,然后让它运行。有一些非常聪明的工作正在进行中来完成这项工作。程序员查看返回值 (R0) 以查看事情是否通过。它还可以确定函数是否使核心崩溃或超时。

编写外部超级有趣的是调试器正在运行程序,因此没有可用的调试器来查看代码在做什么。我决定在被调用函数的 return() 上输出错误和编码信息,以提示正在发生的事情。

外部加载程序不是“完整”程序。没有启动代码,很多片上的东西都没有设置好,有些就无法工作。至少我想不通。我不确定它是否配置不正确或调试器阻止了它的使用。查看示例外部加载程序,它们以非常简单的方式编写,不调用 HAL 或使用中断。您需要提供核心设置功能来配置时钟链。由于计时器和/或中断不工作,Hal_Delay() 方法将永远不会返回。我永远无法让它们工作,并怀疑 NVIC 不知何故被禁用了。我最终将 HAL_delay() 函数替换为基于核心时钟速率和每个循环的指令周期旋转的 for 循环。

应用笔记建议开发一个独立程序来调试基本功能。这是个好主意,但也是一个挑战。在启动外部加载程序之前,我让 QSPI 执行所需的操作,但来自调用 HAL 的 C++ 应用程序。从中创建一个外部加载器是一项长时间的剥离和替换功能的练习。提示是这些示例是在寄存器级别编写的。我不太擅长同时处理 QuadSPI 外设和芯片的指令集。

消除了程序的正常启动。在调用 main() 之前所做的一切(例如,在 startup_stm32f469nihx.s 中)取决于您。这包括设置时钟链以提升核心时钟并使外围总线正常工作。该程序在片上 SRAM 中运行,因此任何已初始化的变量都可以正确加载。不需要移动数据,但堆栈和未初始化的数据区域可以/应该仍然归零。

我希望这可以帮助别人!

0 投票
0 回答
937 浏览

audio - 如何从 Stm32 USB 音频设备获取数据并发送到 DAC?

我正在使用带有 STM32CubeIDE 的 STM32F103RCT6 板。我启用了 USB 音频设备并且代码正在运行,并且 Windows 将板识别为音频设备或扬声器。

我已经搜索并阅读了文档,但我不知道它在代码中做了什么。代码只有 MX_USB_DEVICE_Init();

1-它现在是否从 PC 接收数据并将它们保存在 RAM 中某个缓冲区的某个位置?

2- 我怎样才能访问数据并将它们发送到 DAC?

我不会使用 I2C 和编解码器,因为我没有编解码器 IC。所以我只想使用 DAC 生成音频发送到扬声器。

谢谢!

0 投票
0 回答
363 浏览

stm32 - 在环回模式下无法退出 STM32F429IGT 上 bxCAN 的睡眠模式

简而言之,手动复位 SLEEP 位时,SLAK 位不会复位。详细说明:

在尝试建立网络之前,我正在尝试以环回模式成功传输。经过大量文档阅读后,我让它在某个时候工作,但现在我遇到了一个新问题。(遗憾的是我不记得我改变了什么,也许是在玩时间)

在将外设设置为环回并提供一致的位时序值(所以我可能已经使用它们但它们恢复正常)后,我使用 Cube 生成代码。这意味着流程应该首先退出睡眠模式,进入初始化模式,进行设置,退出初始化模式,然后启动正常模式。根据参考手册:

如果在 bxCAN 处于休眠模式时软件通过设置 INRQ 位来请求进入初始化模式,它还必须清除 SLEEP 位。[...] 清除 SLEEP 位后,一旦 bxCAN与 CAN 总线同步,就会退出休眠模式[...]。一旦SLAK 位被硬件清零,就退出休眠模式

为了同步,bxCAN 一直等到 CAN 总线空闲,这意味着在 CANRX上已经监视了11 个连续的隐性位。

根据维基

0 数据位编码显性状态,而1 数据位编码隐性状态

所以

检查 Cube 生成的代码,这正是正在发生的事情。我在这里粘贴了 stm32f4xx_hal_can.c 的重要部分:

CAN_MSR 的 SLEEP 位被复位并等待来自 CAN_MSR 的 SLAK 位被硬件复位。CAN_TIMEOUT_VALUE 设置为 10,基本上是给 11 个隐性位稳定下来的时间。

这就是我卡住的地方。SLACK 不会重置...我试图移除if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE),以便 MCU 无限期地等待 SLAK 重置。没有帮助。

查看 CAN_MSR RX 寄存器,给出 RX 上的当前值,同时等待 SLACK 变化,我注意到它始终为 0。所以我尝试将 GPIO 设置为 RX 和 TX 的上拉和下拉,但是我认为它没有效果,因为在环回模式下,bxCAN 的 RX 与 GPIO 隔离 :) 这也意味着,问题不应该出现在硬件方面(如布线和东西,外部事物,而不是内部硬件)。让我相信在全局 HAL_Init() 或 MX_GPIO_Init() 或其他东西期间出了点问题,但由于它是由 Cube 生成的,我没有改变任何东西,我看不出它如何对 SLAK 产生影响离开。

我的想法可能是在某事上进行软件重置,但我不知道这条路将把我带到哪里,因为关闭电源并在芯片上不能解决问题......

0 投票
1 回答
106 浏览

c - UART通信 SMT32L496ZG

我正在尝试通过 IDE 在我的微控制器上使用 UART 通信传输信号,但它不起作用。

我的代码如下所示

我要与之通信的软件是 Tera Term,它具有以下设置:串行通信,端口:COM3 速度:9600 数据:8 位奇偶校验:无停止位:1 位流控制:无

如果您知道为什么它不起作用,请告诉我!

先感谢您!

问候

罗斯季斯拉夫

0 投票
1 回答
479 浏览

firebase - 如何通过 STM32CubeIDE 将 ESP8266 Wifi 模块连接到 Firebase

我正在 STM32F103rb Nucleo-64 板上开发一个嵌入式项目。

该项目包含 ESP8266 Wifi 模块。我在 STM32CubeIDE 工作区中编写代码。

有没有办法通过STM32CubeIDE工作环境将ESP8266 Wifi Module连接到firebase?
还是不可能?提前谢谢了!