问题标签 [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.

0 投票
2 回答
532 浏览

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 功能。

0 投票
2 回答
785 浏览

c - 读取 GPIOB_IDR 寄存器时值不正确

我在 atollic true studio ide 上进行 stm32f030r8 arm 编程。

我从 idr 寄存器读取正确数据时遇到了一些问题。

我制作了 GPIOB(0,1,2,3) 的下拉 PUPR 寄存器。

GPIOB的其他引脚是我用MODER寄存器制作的输出。

当我每次读取 F 值时都在循环下读取 idr 数据但没有任何输入。

请帮我解决这个问题[您可以看到我在调试时读取的值[1]

没有任何输入 它必须读取 0x00

0 投票
3 回答
8998 浏览

stm32 - 如何更改闪存的起始地址?

我正在使用 STM32F746ZG 和 FreeRTOS。flash的起始地址是0x08000000。但我想把它改成0x08040000。我已经通过谷歌搜索了这个问题,但我没有找到解决方案。

我更改了链接描述文件,如下所示。

如果我只更改它并运行调试器,它就有问题。如果我将 VECT_TAB_OFFSET 从 0x00 更改为 0x4000,它工作正常。

但是如果我不使用调试器,它就不起作用。这意味着它仅在使用 ST-Linker 时有效。

如果您知道解决方案,请告诉我。提前感谢您的回复。

0 投票
1 回答
617 浏览

stm32 - 无法将 PC15 用作 stm32f030rc 上的 GPIO 输入

我正在使用 stm32f030rc 进行项目。我需要将 PC15 用作 GPIO 输入,但似乎我做不到。

我知道这对 PC14/PC15 与 LFE 振荡器共享,但我当然没有使用该功能。此外,我能够读取 PC14 GPIO 上的正确引脚电平。在关于我的模型的数据表中,PC15 引脚被标记为 I/O,OSC32_OUT 作为附加功能:它可以用作输入吗?

作为参考,这是我用来测试功能的 C 代码;我正在使用 libopencm3 进行初始化。

0 投票
1 回答
566 浏览

c - 有人有带有 TLC59116 I2C 示例代码的 STM32L0xx 吗?

我正在编写一个基本的 LED 程序,以使用 STM32L0xx 芯片和 TI TLC59116F 在定制板上点亮 LED,但我在解释数据表时遇到了一些麻烦。

我使用 STM32CubeMX 设置初始引脚和初始化 I2C,并根据我找到的一些示例提出以下内容。

然后在 main.c

编辑:这是一个更完整的代码示例,其中包含 HAL 错误检查等。

0 投票
1 回答
531 浏览

stm32 - OpenOCD 在断点处退出

我正在 STM32F042 上开发应用程序。我从一个 makefile 驱动一切,包括我的单元测试。我使用 OpenOCD 和 ST-LINK 来刷新目标。我的单元测试在主机和目标上运行。主机单元测试驱动程序在成功时从 main() 返回 0,在失败时返回非零,因此 makefile 知道测试是否通过。makefile 在目标上闪烁并开始测试,但不知道它们是成功还是失败。嵌入式测试应用程序打开红色 LED 表示失败,绿色表示通过,所以我知道——现在我想自动化这一步。

我想在代码中设置两个断点,一个在故障处理程序中,一个在 main 末尾,并告诉 OpenOCD 如果遇到一个或另一个断点,则以零或非零状态退出。

所以我的问题归结为两个具体的问题:

  1. 要设置断点,我需要知道特定代码行的 PC 值。如何从 arm-gcc 工具链中获取该值?

  2. 我可以将 OpenOCD 配置为在特定断点处以特定状态退出吗?

0 投票
0 回答
61 浏览

arm - Keil uVision 将我的代码编译成 0xfff-s

我有一个奇怪的问题。出于某种原因,我的编译器生成 0xfff-s 而不是真正的代码。整个文件都会发生这种情况(见截图,sim800.c 是这样的),其他文件编译得很好。此特定文件不一定会发生这种情况。如果我更改代码,sim800.c 可以正常编译,但其他代码会出错。仅当优化关闭时才会发生这种情况(-O0)如果我打开优化(-O1),问题就会消失。干净编译没有帮助。

C 代码及其程序集

我在用着

  • 凯尔 uVision 5
  • GCC v5.06 更新。1
  • STM32F030
0 投票
1 回答
667 浏览

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 库

所以我的问题:

有没有办法将应用程序变量的内容分配给引导加载程序中的变量,而无需确切知道它在哪个内存地址中?

0 投票
1 回答
709 浏览

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 索引或至少一个配置字符串索引的字符串数组。可能示例文件不完整,但感觉更有可能我只是没有在寻找正确的东西。

我的问题是,首先是我对字符串描述符如何正确工作的基本假设?如果是这样,通常如何以及在哪里存储字符串?任何指向示例实现的链接也将非常有帮助!

0 投票
3 回答
11815 浏览

stm32 - 校准 STM32 ADC (VREFINT)

我正在尝试在 STM32F042 微控制器上读取 VDDA。当 VDD 为 3.29V 时,我得到了意想不到的结果。我一定错过了一些基本的东西。

输出:

adc_test.c:

数据表截图:

在此处输入图像描述

参考手册截图

请注意这是指 0.3V,但我认为这是一个错字,因为上面的数据表和下面较长的公式指的是 3.3V,并且 .3V 低于这部分的最低工作电压

在此处输入图像描述