问题标签 [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 - 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 位?
arm - STM32上的数据、指令和flash CCM RAM有什么区别
此 STM32F7 架构概述文档的第 14 页显示了以下内存地址:
- FLASH-ITCM(我使用的 F730 尺寸未知)
- DTCM-RAM (64KB)
- ITCM-RAM (16KB)
这些有什么区别?许多示例显示数据进入 DTCM。堆栈或关键函数之类的东西最适合在哪里?
在 ART 加速器上使用 Flash ITCM 接口有什么好处吗?
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,但由于某种原因,中断似乎根本不起作用。
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 支持,或者可以提示我为什么会失败?
c - 在 STM32 上运行 TCP Server 和 UDP Client
我正在尝试在 STM32 Nucleo F746ZG 上同时运行 TCP 服务器和 UDP 客户端。我正在使用 freeRTOS 和 LWIP 库,我在同时运行两种网络技术(TCP 和 UDP)时遇到了麻烦。然而,它们独立地工作正常。不能同时运行两者还是我的代码有问题?
这就是我实现 TCP 服务器的方式:
这是 UDP 客户端:
谢谢小伙伴!!
stm32 - 采用LVDS接口的触摸屏面板
嗨,我正在考虑将 14 英寸或更大的液晶触摸屏与我的发现板连接。目前我有 stm32f4 和 stm32f7 发现板。目前我知道连接它们的不同方法。但我对LTDC最感兴趣。我尝试过使用旧协议,例如摩托罗拉 6800 Parralel RGB。但是阿里巴巴提供的更大尺寸和更大分辨率的触摸屏不支持它们。
如果我错了,请纠正我的理解,对于更大的屏幕尺寸和更大的分辨率,摩托罗拉 6800、英特尔® 8080 总线和 SPI 协议等旧协议将不起作用。因为市场上发现的更大的触摸屏没有它们。
并行 RGB 连接是否能够在更大的屏幕上工作。如果是的话,你能给我一个链接吗?
我看到的设备带有 lvds 连接。他们是否能够使用 stm32 发现工具包。如果是,那么如何。
最后,除了数据表之外,你能建议我一些很好的工作教程吗?
谢谢你 !!!
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)
应该做什么以及它是如何工作的!它几乎写成好像它是一个函数?x
IO值在哪里?
AUDIODATA_SIZE
是每个样本中的字节数:
作为 C 语言的初学者,我深表歉意,但我从未见过这样的事情,只能假设它掩盖了缓冲区的大小。但为什么?
pBuffer
是uint16_t*
指向传递给函数的指针的指针,并根据需要强制转换(uint8_t*)pBuffer
为HAL_SAI_Transmit_DMA
。我也从未见过这样的指针,但它确实有效。
c - STM32:将地址映射存储在数组中
我正在尝试将地址映射存储在数组中。
以下代码片段在我的 STM32F767ZI 上按预期工作,但编译时出现警告...
编译时出现警告:
在最后一行 ( int* c=addressMap[0];
)。
我也试过uint32_t
和int32_t
作为addressMap
数组的数据类型。同样的警告。
根据本文档(http://www.keil.com/support/man/docs/armcc/armcc_chr1359125009502.htm)地址为 32 位宽(如预期)。
如果没有此警告,我该如何编写代码?
stm32 - FreeRTOS 任务优先级和堆栈大小
我有 STM32F746ZG Nucleo-144pin 板并使用 STMCubeMx 生成代码。我选择了 CubeMx 提供的 10.0.0 版本的 FreeRTOS,工具链是 SW4STM32。
我做了两个任务,以下是我的功能。我的代码在这里:
- 任务优先级。
我发现如果两个任务具有相同的任务优先级,这两个任务可以正常工作,但是如果它们具有不同的任务优先级,那么低任务就不能工作。
- 任务堆栈大小。
如果两个任务的堆栈大小加起来大于 3 KB,则确认该任务没有正常工作。下面的代码可以正常工作。
但是,如果堆栈大小如下更改,则第二个任务不起作用。
尝试将 STM32F746ZGTx_FLASH.ld 中的 _Min_Stack_Size 从 0x400 更改为 0x4000 会出现同样的问题。
谁能解释这个原因?