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

0 投票
4 回答
25739 浏览

c - STM32 - 如何启用 DWT 循环计数器

我正在使用 STM32F7-Discovery 开发板,并且一直在尝试启用 DWT 循环计数器。从我在网上看到的情况来看,这应该足以启用它:

但是,每当我运行该代码时,值都不会更改或操作会被跳过(我不太确定发生了什么)。

我尝试过指向内存中的地址并直接更改它们也无济于事。前任:

目前,我得到的唯一方法是在 Visual Studios(使用 VisualGDB)中使用调试器单步执行时,如果我将 DWT->CTRL 的值更改为 ON 值,则循环计数器开始。除此之外,我似乎无法获得改变代码的价值。

编辑:什么可能导致这些代码行没有执行其任务但也没有崩溃和继续的行为。

在运行这些代码行之后,这些内存位置的所有值都保持不变,并且不会随着应该执行的操作而改变。

例如:

应该导致 DWT->CTRL 的值是,0x40000001但它仍保持其默认值0x40000000

下面的图片是运行时发生的情况的示例。

之前前

之后后

0 投票
1 回答
1053 浏览

stm32 - stm32f429 USB CDC VCP检测

[伙计们,我已经安装了 VCP 驱动程序并在我的 stm32f429 中加载了 USB_CDC 的代码。但 VCP 端口在设备管理器中不可见。而是在设备管理器中显示“未知的USB设备,(设备描述符请求失败)”,如图所示。下面给出了谁的链接。请帮我解决这个问题。

http://i.stack.imgur.com/qRzed.png ] 1

0 投票
2 回答
3443 浏览

c - 在皮质 m7 上测量时钟周期数

我一直在测量皮质 m4 上的时钟周期数,现在想在皮质 m7 上进行测量。我用的板子是STM32F746ZG。

对于 m4,一切都适用:

问题是当我在 m7 上运行时 DWT_CTRL 寄存器没有更改,并且保持 0x40000000 而不是更改为 0x40000001,因此循环计数始终为零。从我在其他帖子中读到的内容看来,您似乎需要将 FP_LAR 寄存器设置为 0xC5ACCE55 才能更改 DWT_CTRL。

我添加了这些定义(已尝试以下两个 FP_LAR_PTR 地址):

这个功能:

当我调用未注释的打印时,我得到 0xC5ACCE55 但是当我在函数返回后打印它时,我得到 0x00000000,我不知道为什么。我是在正确的轨道上还是完全错误的?

编辑:我想提一下我已经尝试过在函数中没有所有额外代码并且只尝试更改 LAR 寄存器也是一件好事。

BR古斯塔夫

0 投票
1 回答
397 浏览

flash - 使用 QStlink2 刷新 STM32F745 失败,但可以使用 stlink-gui

我使用的工具集(linux、eclipse、arm、gcc-arm-none-eabi)在使用 QStlink2 闪烁时适用于 stm32f4xx。

对于一个使用 stm32f745 的新项目,我发现这在刷新生成的 .bin 文件的级别上以某种方式失败。.bin 文件本身很好,因为当我使用 stlink-gui 刷新它时,一切正常。所以问题似乎出在 QStlink2

我现在没有被困住,但想在这里发布这个,看看是否有其他人有同样的问题?我还将发布到 QStlink 页面。

当我运行该工具时,我得到以下输出(如果太长,我深表歉意)

0 投票
1 回答
83 浏览

makefile - 从链接器脚本产生两个输出

STM32F746G-Discovery 板上有一个 Quad-SPI NOR 设备,我想用它来存储只读数据。

所以理想的情况是链接器文件为 F746G 闪存生成一个 ELF 文件和一个用于对 NOR 进行编程的十六进制文件。

然后我可以使用 STM32 ST-LINK Utility 对目标进行编程,并使用 External Loader 对 NOR 进行编程。

谁能告诉我如何做到这一点?

0 投票
1 回答
9005 浏览

arm - STM32 内部时钟

我对我的 STM32F7 设备(来自 STMicroelectronics 的 Cortex-M7 微控制器)上的时钟系统感到困惑。参考手册没有充分阐明这些时钟之间的差异:

  • 系统时钟
  • 时钟
  • 时钟

参考手册在章节 << 5.2 Clocks >> “RCC 以除以 8 的 AHB 时钟 (HCLK) 馈送 Cortex 系统定时器 (SysTick) 的外部时钟”。
该声明与 CubeMX 的数据相矛盾。请注意,在 CubeMX 中,我可以选择自己的预分频器从 HCLK 到“Cortex System Timer”。它不一定是除以 8。

在此处输入图像描述

0 投票
1 回答
482 浏览

embedded - STM32F746 CAN初始化超时

美好的一天

我一直在尝试从 STM32F407 迁移到 STM32F746。我遇到的问题是使用 ST HAL 库来初始化 CAN。该代码是从 MX Cube (4.16) 生成的。

使用 Nucleo-144 STM32F746,我可以在调试(ST-Link)期间通过初始化代码(MX_CAN1_Init()),但在调试中使用 uLink Pro 的生产系统上则不行。等待 CAN 外设(MSR INAK 位未清除)将超时。

CAN 引脚没有连接任何东西,即悬空。

0 投票
1 回答
819 浏览

stm32 - 在STM32F746板上安装uclinux

我有STM32F746板,我想在那里安装 uclinux。我已经从emcraft 网站u-boot-stm32f746-discovery.bin下载了图片。现在我已经用 ST-Link 实用程序刷新了 u-boot。但我不知道如何处理networking.uImage?是否也应该在内部闪光时闪光?还是在 SD 卡上?我没有串口,只有 USB 和以太网,我使用 Windows 10。任何有用的链接或教程将不胜感激。networking.uImage

0 投票
3 回答
1032 浏览

microcontroller - STMicro 是否错误地解释了“影子寄存器”一词?

我使用 STM32 系列微控制器,更具体地说是该STM32F7系列。目前我正在研究通用计时器的使用。

关于双缓冲寄存器。

微控制器有时会使用双缓冲寄存器。这样,软件就可以对寄存器进行写入和读取,而不会造成麻烦。下图说明:

两者都有几个术语REGX_BUFREGX从上图中可以看出。

  • 通常寄存器REGX被称为“活动寄存器”。
  • 寄存器REGX_BUF有时被称为“缓冲寄存器”。其他术语是“预加载寄存器”和“影子寄存器 (?)”。

混乱解释了。

不幸的是,“影子寄存器”一词令人困惑。根据我从互联网上的几个来源阅读的内容,它指的是REGX_BUF. 但在 STM32F746 微控制器的参考手册 RM0385 和 STM32F767 微控制器的 RM0410 中,我偶然发现了对“影子寄存器”这个术语的完全相反的解释。它不会指代REGX_BUF,而是指代REGX
这是参考手册中的图片:

或者

在此处输入图像描述

这个数字让我很困惑。是我对“影子寄存器”一词的错误解释,还是意法半导体在编写本参考手册时犯了错误?

0 投票
0 回答
142 浏览

c++ - Cortex M7 随机系统冻结断开调试器

我正在为 STM32F746NG 开发一个非常复杂的软件。我正在使用经过改装的探索板。ST-Link 被移除并被一个通过 JTAG 的 Segger J-Link 取代。Rocktech 显示器被更大的显示器取代。我正在使用 gcc6.2

该系统运行良好。除了有一些系统冻结。它在刷新显示时随机出现。

如果发生冻结,调试器将无法停止 cpu,并且无法将调试器连接到 cpu。由硬件定时器触发的 LED 切换停止。并且在故障处理程序中通过 UART 发送错误消息不会发生。似乎CPU只是停止并且不再做任何事情。

有谁知道可能导致这种情况的原因?

我不能给出整个代码,也许是一些片段。

编辑:看起来硬件还可以。具有相同 800*480 显示器的新板,但再次带有糟糕的板载 ST-Link 再次导致问题。

更多信息:

  • 我使用的是 FreeRTOS v9.0.0,大约有 16 个任务正在运行。

  • Tickrate 相对高 10 kHz,但将其降低到 1 kHz 并不能解决问题。

  • 帧缓冲区位于发现板的外部 sdram 中 2 个用于前景的帧缓冲区和 1 个用于背景的帧缓冲区,最后 2 MB 用于堆。

    caddr_t _sbrk(int incr) { extern char _end; /* 由链接器定义 */ static char *heap_end=0;

    }

  • malloc 是通过 vTaskSuspendAll() 进行线程保存;

  • 已实施 HardFault、NMI、BusFault、MemFault 和 UsageFault 处理程序从其中删除所有代码并不能解决问题

通过函数 void refreshDisplay(); 重绘帧缓冲区(不管是哪一个)时,系统总是会冻结。

我观察了三种不同的行为来判断问题的可能性。

  1. 如果我调用 vTaskSuspendAll(); 在 refreshDisplay 和 xTaskResumeAll() 输入时;在退出时,这个问题不太可能发生。它不会发生几个小时。

  2. 如果我停用所有不可屏蔽的中断,即除了重置和 nmi 之外的所有中断(但它们永远不应该被调用)。在这种情况下,我无法观察到这个问题。

  3. 如果我停用所有具有可配置优先级的中断,即除复位之外的所有中断,nmi 和 HardFaultHandler。那么这个问题很有可能。它发生在几分钟后。

所有其他配置的行为都与最后一种情况类似。