问题标签 [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 投票
1 回答
1396 浏览

stm32 - STM32 SAI:了解FIFO

据我了解,FIFO(在硬件环境中)是一个缓冲区,将根据先进先出原则进行管理。您按顺序将一些位放入其中,然后您可以在达到所需阈值时逐块读取它们。但我对STM32的串行音频接口的FIFO管理感到困惑:

根据数据表,串行音频接口 (SAI) 最多支持 8 个字的 FIFO。(8x32bits) SAI 的数据寄存器 (SAI_xDR) 为 1 word (32bits)。文档解释了

如果 FIFO 未满,则对该寄存器的写入会加载 FIFO。

如果 FIFO 不为空,则从该寄存器读取会清空 FIFO。

如何解读它?

我的猜测是:如果我对该寄存器进行写访问,它将寄存器内容(32 位块)作为第一个字加载到 FIFO 中,然后在第二次写访问时,它将第二个字加载到 FIFO 中,依此类推。然后,当我进行读取访问时,它会返回队列中的第一个单词,然后是第二个单词,依此类推。这是正确的吗?

如果是这样,当我向寄存器写入少于 32 位时会发生什么?即我写了一个 16 位块。然后我又写了一个16位。两个位块是共享一个字还是转移到单独的字?如果我读一个单词,我会得到两个 16 位块还是只得到前 16 位?我不明白 FIFO 如何知道我填充到数据寄存器中的位序列的大小。还是每次写访问总是占用整个 32 位?

在此处输入图像描述在此处输入图像描述

0 投票
1 回答
1238 浏览

arm - STM32上的数据、指令和flash CCM RAM有什么区别

此 STM32F7 架构概述文档的第 14 页显示了以下内存地址:

  • FLASH-ITCM(我使用的 F730 尺寸未知)
  • DTCM-RAM (64KB)
  • ITCM-RAM (16KB)

这些有什么区别?许多示例显示数据进入 DTCM。堆栈或关键函数之类的东西最适合在哪里?

在 ART 加速器上使用 Flash ITCM 接口有什么好处吗?

0 投票
2 回答
3458 浏览

stm32 - STM32F7:ADC DMA 传输只工作一次

我想连续读取 ADC 值并使用 DMA 将它们写入数组。我使用的开发板是带有 STM32F767ZI 的 Nucleo 开发板。

为了保持简单的输出数据之类的东西,我将 Arduino IDE 与 STM32 板包一起使用。

我能够让 ADC 在连续模式下工作,但是当我添加 DMA 时它将无法工作。似乎只转移了一个值。包含要传输的数据量的 NDTR 寄存器保持在我将其设置为负一的值。

这是小程序:

我在 STM32F3 上成功使用了 ADC+DMA,但我无法让它在这个 F7 上工作。

GPIOA 的时钟启用,PA3 设置为模拟输入。ADC 的时钟被启用。ADC 设置为具有 DMA 模式和连续 DMA 请求的连续模式。输入为 PA3。ADC 转换开始。DMA 流 4 设置为 ADC1 的正确通道(通道 0)。设置输入和输出地址以及要传输的数据数量,并启用内存增量模式。然后流被启用。

我不确定我在这里错过了什么。

我将衷心感谢您的帮助!

编辑#2

我不小心将通道误认为是流,因此我为 DMA 选择了错误的通道(通道 4 而不是通道 0 用于 DMA2 流 4 中的 ADC1)。这就是为什么它不起作用的主要问题。现在它在双缓冲模式下工作正常,除了一件事:当我启用传输完成中断时,程序不再工作。它只是通过 Serial.print 写一个字母,从开头的“s”。不传输任何值。我做了中断,所以它现在应该只禁用 DMA,但由于某种原因,中断似乎根本不起作用。

0 投票
1 回答
325 浏览

stm32 - NuttX:如何为 STM32F7 板添加 PWM 支持?(stm32_pwm.h 未找到)

我想在我的 nuttx 板配置中添加 PWM 支持。我正在使用 STM32F765VGT6 MCU。

我开始像在 STM32F4Discovery 配置目录中那样实现它:

  • 加入stm32_pwm_setup()_configs/<board_name>/src/<board_name>.h
  • 添加configs/<board_name>/src/stm32_pwm.c
  • 附加stm32_pwm.c在 Makefile ( configs/<board_name>/src/Makefile)

但是,我总是收到找不到“stm32_pwm.h”的编译错误。另外,我无法调用stm32_pwm_initialize()我的configs/<board_name>/src/stm32_boot.c.

是否有人已经在 STM32F7 上实现了 NuttX PWM 支持,或者可以提示我为什么会失败?

0 投票
1 回答
4603 浏览

c - 在 STM32 上运行 TCP Server 和 UDP Client

我正在尝试在 STM32 Nucleo F746ZG 上同时运行 TCP 服务器和 UDP 客户端。我正在使用 freeRTOS 和 LWIP 库,我在同时运行两种网络技术(TCP 和 UDP)时遇到了麻烦。然而,它们独立地工作正常。不能同时运行两者还是我的代码有问题?

这就是我实现 TCP 服务器的方式:

这是 UDP 客户端:

谢谢小伙伴!!

0 投票
1 回答
796 浏览

stm32 - 采用LVDS接口的触摸屏面板

嗨,我正在考虑将 14 英寸或更大的液晶触摸屏与我的发现板连接。目前我有 stm32f4 和 stm32f7 发现板。目前我知道连接它们的不同方法。但我对LTDC最感兴趣。我尝试过使用旧协议,例如摩托罗拉 6800 Parralel RGB。但是阿里巴巴提供的更大尺寸和更大分辨率的触摸屏不支持它们。

如果我错了,请纠正我的理解,对于更大的屏幕尺寸和更大的分辨率,摩托罗拉 6800、英特尔® 8080 总线和 SPI 协议等旧协议将不起作用。因为市场上发现的更大的触摸屏没有它们。

并行 RGB 连接是否能够在更大的屏幕上工作。如果是的话,你能给我一个链接吗?

我看到的设备带有 lvds 连接。他们是否能够使用 stm32 发现工具包。如果是,那么如何。

最后,除了数据表之外,你能建议我一些很好的工作教程吗?

谢谢你 !!!

0 投票
2 回答
177 浏览

c - 试图理解这个#define

我正在尝试将 stm32fxxx 的 16 位录音机应用程序调整为 24 位,但我偶然发现了一个#define让我感到困惑的问题。

uint16_t我已经将 16 位 DMA 更改为32 位 DMA 以及一些缓冲区uint32_t等等。不知道为什么uint32_t并且没有签名 int 但我稍后会看。没有办法通过 DMA 传递 24 位,所以我将发送 32 位并稍后丢弃一个字节。

的第三个输入HAL_SAI_Transmit_DMA()实际上期望uint16_t.

我猜我需要更改为

但我想知道#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE)应该做什么以及它是如何工作的!它几乎写成好像它是一个函数?xIO值在哪里?

AUDIODATA_SIZE是每个样本中的字节数:

作为 C 语言的初学者,我深表歉意,但我从未见过这样的事情,只能假设它掩盖了缓冲区的大小。但为什么?

pBufferuint16_t*指向传递给函数的指针的指针,并根据需要强制转换(uint8_t*)pBufferHAL_SAI_Transmit_DMA。我也从未见过这样的指针,但它确实有效。

0 投票
3 回答
3061 浏览

stm32 - 如何配置STM32定时器在每次递增/递减时触发中断?

我尝试将旋转编码器与 STM32F7 连接。计时器 (TIM1) 应在 0-100 之间计数一个值,并在每次增加或减少该值时触发中断。

计数有效,但我只能在每个更新事件上配置一个中断。(如果计数器上溢/下溢)

如何配置这样的计时器?

在此处输入图像描述

0 投票
1 回答
331 浏览

c - STM32:将地址映射存储在数组中

我正在尝试将地址映射存储在数组中。

以下代码片段在我的 STM32F767ZI 上按预期工作,但编译时出现警告...

编译时出现警告:

在最后一行 ( int* c=addressMap[0];)。

我也试过uint32_tint32_t作为addressMap数组的数据类型。同样的警告。

根据本文档(http://www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm)地址为 32 位宽(如预期)。

如果没有此警告,我该如何编写代码?

0 投票
2 回答
4074 浏览

stm32 - FreeRTOS 任务优先级和堆栈大小

我有 STM32F746ZG Nucleo-144pin 板并使用 STMCubeMx 生成代码。我选择了 CubeMx 提供的 10.0.0 版本的 FreeRTOS,工具链是 SW4STM32。

我做了两个任务,以下是我的功能。我的代码在这里:

  1. 任务优先级。

我发现如果两个任务具有相同的任务优先级,这两个任务可以正常工作,但是如果它们具有不同的任务优先级,那么低任务就不能工作。

  1. 任务堆栈大小。

如果两个任务的堆栈大小加起来大于 3 KB,则确认该任务没有正常工作。下面的代码可以正常工作。

但是,如果堆栈大小如下更改,则第二个任务不起作用。

尝试将 STM32F746ZGTx_FLASH.ld 中的 _Min_Stack_Size 从 0x400 更改为 0x4000 会出现同样的问题。

谁能解释这个原因?