问题标签 [stm32f0]
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.
stm32 - cortex-M3 和 cortex-M7 的 SRAM 消耗
我从 M3 迁移到 M7。M3 使用 STM32F103VE,具有 64 KB 的 SRAM。M7 是 STM32F746ZG,它有 240KB 的 SRAM。我将大部分 M3 代码移至 M7。附加 LWIP 用于 M7 中的以太网功能。但我发现堆内存不足并增加如下。
使用 M3 时,使用了以下堆大小。
如果我使用M3的堆大小,就会出现问题,因为堆内存不足。如果我将堆大小设置为 45*1024,则以太网功能不起作用并且不会增加堆内存。我知道增加堆会减少堆栈。不过,虽然相比 M3 增加了 3 倍左右的 Heap,但使用 MALLOC 功能的余地仍然不多。
尽管 M7 的内存是 M3 的四倍,但我不明白为什么会有这么多的内存损失。如果有人有过这样的经历,请给我好的建议。我正在为 STM32 使用 FreeRTOS、LWIP 和 HAL。我想充分使用 Malloc 功能。
stm32 - 如何更改闪存的起始地址?
我正在使用 STM32F746ZG 和 FreeRTOS。flash的起始地址是0x08000000。但我想把它改成0x08040000。我已经通过谷歌搜索了这个问题,但我没有找到解决方案。
我更改了链接描述文件,如下所示。
如果我只更改它并运行调试器,它就有问题。如果我将 VECT_TAB_OFFSET 从 0x00 更改为 0x4000,它工作正常。
但是如果我不使用调试器,它就不起作用。这意味着它仅在使用 ST-Linker 时有效。
如果您知道解决方案,请告诉我。提前感谢您的回复。
stm32 - 无法将 PC15 用作 stm32f030rc 上的 GPIO 输入
我正在使用 stm32f030rc 进行项目。我需要将 PC15 用作 GPIO 输入,但似乎我做不到。
我知道这对 PC14/PC15 与 LFE 振荡器共享,但我当然没有使用该功能。此外,我能够读取 PC14 GPIO 上的正确引脚电平。在关于我的模型的数据表中,PC15 引脚被标记为 I/O,OSC32_OUT 作为附加功能:它可以用作输入吗?
作为参考,这是我用来测试功能的 C 代码;我正在使用 libopencm3 进行初始化。
c - 有人有带有 TLC59116 I2C 示例代码的 STM32L0xx 吗?
我正在编写一个基本的 LED 程序,以使用 STM32L0xx 芯片和 TI TLC59116F 在定制板上点亮 LED,但我在解释数据表时遇到了一些麻烦。
我使用 STM32CubeMX 设置初始引脚和初始化 I2C,并根据我找到的一些示例提出以下内容。
然后在 main.c
编辑:这是一个更完整的代码示例,其中包含 HAL 错误检查等。
stm32 - OpenOCD 在断点处退出
我正在 STM32F042 上开发应用程序。我从一个 makefile 驱动一切,包括我的单元测试。我使用 OpenOCD 和 ST-LINK 来刷新目标。我的单元测试在主机和目标上运行。主机单元测试驱动程序在成功时从 main() 返回 0,在失败时返回非零,因此 makefile 知道测试是否通过。makefile 在目标上闪烁并开始测试,但不知道它们是成功还是失败。嵌入式测试应用程序打开红色 LED 表示失败,绿色表示通过,所以我知道——现在我想自动化这一步。
我想在代码中设置两个断点,一个在故障处理程序中,一个在 main 末尾,并告诉 OpenOCD 如果遇到一个或另一个断点,则以零或非零状态退出。
所以我的问题归结为两个具体的问题:
要设置断点,我需要知道特定代码行的 PC 值。如何从 arm-gcc 工具链中获取该值?
我可以将 OpenOCD 配置为在特定断点处以特定状态退出吗?
variables - STM32F0。如何将 RAM 中变量的值分配给单独的变量?
我正在为 STM32F051 的引导加载程序做一个项目,它跳转到不同内存位置的应用程序。这部分工作正常。我遇到的问题是我在 FLASH 中定义了一个位置来放置应用程序的变量。这些变量可以是版本号、时间戳等,应用程序用作信息的基本变量。
我想允许引导加载程序访问这些变量而不尝试设置它们。当我在加载应用程序后对引导加载程序进行更改(或者即使我没有)然后尝试调试它时,它会失败,因为它尝试在已经包含数据的应用程序变量闪存空间中执行写入。
引导加载程序链接器片段:
应用程序的链接器是相同的,只是它不包含:
这是引导加载程序中用于分配变量的代码行
char application_version_number[5] __attribute__((section(".application_vars.VERSION_NUMBER")));
在应用程序中我分配它
char version_number[5] __attribute__((section(".application_vars.VERSION_NUMBER"))) = "v1.0";
我知道我可以使用指针指向“VERSION_NUMBER”的确切内存地址,但我总是需要知道它在哪里。如果我想更新应用程序,我必须确保每个变量始终位于旧版本中的同一位置。
我正在使用“用于 stm32 的系统工作台”、“CubeMX”和 HAL 库
所以我的问题:
有没有办法将应用程序变量的内容分配给引导加载程序中的变量,而无需确切知道它在哪个内存地址中?
usb - 如何添加字符串描述符
我想在我的 HID 项目中添加一个字符串(以存储有关固件版本的信息)。我已经阅读了有关字符串描述符的信息https://www.beyondlogic.org/usbnutshell/usb5.shtml,我的理解是配置描述符或报告描述符列出了指向字符串的索引。字符串存储在其他地方。然后主机可以通过“get”string“Descriptor”请求按索引请求字符串。
不过,我对实施感到非常困惑。我一直在浏览 STM32F04 示例库(可从 STM 下载或在此处复制https://github.com/caozoux/arm/blob/master/stm32/STM32F0x2_USB-FS-Device_Lib%20V1.0.0/Libraries/STM32_USB_Device_Library /Class/dfu/src/usbd_dfu_core.c)并找到了这个:
它在 0x02 处给出 iConfiguration 的索引。然后我搜索了另一个引用 0x02 或配置字符串的所有文件,但一无所获。我希望找到某种可以通过 0x02 索引或至少一个配置字符串索引的字符串数组。可能示例文件不完整,但感觉更有可能我只是没有在寻找正确的东西。
我的问题是,首先是我对字符串描述符如何正确工作的基本假设?如果是这样,通常如何以及在哪里存储字符串?任何指向示例实现的链接也将非常有帮助!