问题标签 [stm32f7]
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 - NUCLEO-F746ZG UART3
我正在尝试将 NUCLEO-F746ZG 中的 UART3 与 TrueStudio 一起使用。USART3 连接 ST-LINK 支持虚拟 COM 口,但是现在不行了。我没有示波器,我真的很想通过超级终端看到打印消息,就像一个实时术语。
我搜索了这个问题,发现很多用户都很难过。
最后,我从以下网站找到了 STM32CubMX 中的 UART 示例解决方案。如果我复制 syscall.c,那么它在 UART 示例中可以正常工作。
https://community.st.com/s/question/0D50X00009XkXDcSAN/problem-with-uart-example-on-nucleof746zg
以下是来自 STM32CubeMX 的 UART 示例代码。目录:STM32Cube_FW_F7_V1.15.0\Projects\STM32F746ZG-Nucleo\Examples\UART\UART_Printf。
但是,我使用 STM32CubeMX 生成了代码。我只使用了 USART3 并确认其中有 syscall.c。但尽管如此,我还是看不到打印消息。如果有人解决了这个问题,如果他们分享,我将不胜感激。
以下是我使用STM32CubeMX生成的代码。
stm32 - STM32F746ZG - 如何更新闪存中 256 KB 扇区的某些部分
我正在使用 STM32F103 并将我的代码移动到 STM32F746。F103 能够以每页为基础更新 1KB 和 2KB 的 Flash。我有 STM32F746ZG Nucleo-board,我的代码很大,flash 占用了 0x08038000。我想将其他小型应用程序保存在 0x08040000(sector_5) 上。该应用程序由几个 2KB 大小组成。我需要在 Sector_5 中存储多个应用程序,而 M7 不能以 1KB 或 2KB 为增量使用 Flash。
以下是 STM32F746ZG 的扇区大小。
STM32F746 由扇区大小为 256 KB 的闪存组成,从扇区 5 到扇区 7。如果我想使用 Sector_5,我必须擦除整个一个扇区。如果我只想更新 Sector_5 前面的大约 2KB 并保持 2KB 之后的区域完好无损怎么办?这意味着我只将内容从 0x08040000 更新到 0x08042000。我必须保持从 0x08042001 到 0x0807FFFF。
我什至无法将 256 KB 的闪存复制到 RAM。因为 F746 只有 240KB 的内部 RAM,而我的许多任务已经使用了 RAM,所以没有足够的 RAM 来复制一个扇区。在这种情况下,请告诉我如何在闪存中更新部分 256KB。
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 时有效。
如果您知道解决方案,请告诉我。提前感谢您的回复。
timer - STM32F7 上定时器的频率限制问题
我在将 STM32F7 开发板上的定时器设置为 500 Khz 时遇到问题。由于某种原因,我似乎最高在 370kHz 左右。'正在将带有范围的 GPIO 引脚切换到输入,并简单地更改定时器上的周期以监视正在发生的事情。
我正在使用 CubeMX 生成我的项目文件并初始化我的计时器:
然后我以中断模式启动定时器:
然后在这段时间过去后切换 GPIO 引脚:
GPIO 引脚设置为:
但是,我玩弄Period
了计时器,得到了以下结果:
我希望在 215 周期内获得 500Khz,但事实并非如此。我的设置有什么问题吗?
c - 使用单帧缓冲区的动画怎么可能?
我正在使用设备 STM32F746。我知道它有一个硬件 2D 图形加速器。我知道如何使用双缓冲来制作动画。但是根据这个 https://www.touchgfx.com/news/high-quality-graphics-using-only-internal-memory/
他们声称他们只使用一个帧缓冲区来制作动画。
这怎么可能以及使用 STM32F746 使用了哪些技术?
stm32 - 在STM32板上运行后如何更改UART波特率?
我正在使用STM32F746ZG
和使用五个UARTs
. All UARTs
工作正常。USART
有人可以告诉我在初始化后更改波特率的程序吗?我正在使用波特率USART6
并对其进行初始化。9600
启动后,没有任何通过USART
. 我想将波特率从9600 to 57600 or 115200
. 对于这种变化,我打电话给HAL_UART_DeInit()
但MX_USART6_UART_Init_57600()
它不起作用。如果我没有改变波特率,它工作正常。但是如果我改变波特率,我就无法接收数据USART.
如果有人知道解决方案,请告诉我。
以下是我的代码。
我打电话Change_UART()
,但它不起作用。
stm32 - STM32上的单元测试
我正在寻找有关如何在我的 STM32F7 平台上进行单元测试的建议。人们过去做了什么?你有哪些恐怖故事?你将做点什么不同的?我目前的计划有什么问题?
我的设置
- 带有定制载体 PCB 的 STM32 Nucleo-144
arm-atollic-eabi-gcc
编译器(暂时没有 C++)- 使用 Atollic TrueStudio 作为 IDE
- 从 Ubuntu 16.04 完成的开发
- 在板上运行 FreeRTOS
我的测试计划
有不同级别的测试;我专门谈论对不依赖于外部硬件的库/功能集进行单元测试。诸如“我的环形缓冲区实现是否正确处理滚动而没有内存泄漏”和“此位移操作是否导致结果变量中的正确字节序”之类的东西?所以我专注于这些类型的测试。
- 将我的项目转换为使用 C++ 编译(以及所有相关的
extern C
必需项) - 将我的代码重构为“库”部分和“应用程序”部分。
- 构建
googletest
(这是我们用于系统其他部分的)并将我的库链接到其中进行测试。 - 在通过 Atollic 运行调试会话时在设备上运行单元测试。
timer - STM32F7-有没有办法在输出比较模式下同步两个不同定时器的输出?
我的处理器是STM32F746ZGT6,我希望使用TCD132DG,所以我需要生成两个不同频率的同步时钟脉冲(一个是2 MHz,另一个是500 KHz),所以我在输出比较模式下使用了两个不同的定时器。问题是这两个脉冲有相移。在 TCD132DG 的数据表中,允许的最大时移为 60ns,而脉冲的时移为 240ns。
谢谢,阿米尔·雷扎
c - 堆栈粉碎检测到 STM32f7
我很想在 STM32F779I 中编写 micropython 代码。我在运行应用程序时没有运行任何检测到的代码堆栈粉碎。
这是我的内存布局
这是我运行 micropython 的方式: