问题标签 [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.
c++ - stm32f769板子支持c标准库吗?
我目前正在尝试熟悉 stm32f769 板。我注意到当我使用 malloc 时出现构建错误。
我对微控制器开发不是很熟悉,所以不确定这个错误是否是因为 stdlib 不存在或其他原因。
这些是我正在使用的编译器标志:
stm32 - 指定超时后有意接收完整的 UART DMA 中断
我已将 UART 配置为以 DMA 模式接收,其中缓冲区的大小约为 64 字节。因此,基本上,HAL_UART_RxCpltCallback() DMA 接收完成中断只会在接收到 64 个字符时触发。
STM32中是否有一种方法可以通过它为DMA Rx配置超时,当缓冲区仅部分填充(即接收到少于64个字符)并且我们在指定的超时时间内不再接收到字符时,DMA将然后引发相同的基于 HAL_UART_RxCpltCallback() 的中断,让消费者使用当前在 UART 上接收到的任何部分数据?
usb - 通过USB连接STM32F7和SIM7600
有没有人尝试通过 USB HS 将 sim7600 LTE 模块与 STM32f7 连接?
Simcomm 开发了适用于 Windows/Linux/Android 的 USB 驱动程序,但不适用于 STM32 等普通微控制器。
STM32F7 具有 USB HS Host 能力。
问候,
c++ - STM32F767ZI 外部中断处理
我正在尝试为 AD7768-4 ADC 创建一个合适的 SPI 从接口。ADC 有一个 SPI 接口,但它不通过 SPI 输出转换。取而代之的是,数据输出在各个 GPIO 引脚上同步输出。所以我基本上需要bit-bang数据,并输出到SPI以获得正确的从属SPI接口。请不要问我为什么要这样做,它是分配给我的。
我遇到的问题是中断。我使用的是 STM32F767ZI 处理器——它以 216 MHz 运行,我的 ADC 数据必须以 20MHz 时钟输出。我已经设置了我的 NMI,但我没有看到系统调用或指向中断处理程序的位置。
我使用 STMCubeMX 软件分配引脚并生成设置代码,并在stm32F7xx.c
文件中显示了该NMI_Handler()
功能,但我在系统文件的任何地方都没有看到指向它的指针。我还在 中找到了 voidHAL_GPIO_EXTI_IRQHandler()
函数STM32F7xx_hal_gpio.c
,它似乎检查引脚是否已被断言,并清除任何未决位,但它没有重置中断标志,也没有检查它,我再次看到没有指向该函数的指针。
为了使事情更复杂,我有 10 个时钟周期来确定设置了哪个标志(一次两个标志中的一个),重置它,增加一个变量,并从 GPIO 寄存器移动数据。我相信这是可能的,但同样,一旦中断被触发,我就不确定系统在做什么。
有没有人有在这个处理器上处理外部中断的经验,可以阐明这个特定系统如何处理事情?再一次 - 10 个时钟周期来做我需要做的事情......移动数据应该只需要我 1-2 个时钟周期,让我 8 来处理中断......
编辑:
我们将 DCLK 速度更改为 5.12 MHz(20.48 MHz MCLK/4),因为在 2.56 MHz 时,我们正好有 12.5 微秒的时间来输出数据并为下一个 DRDY 脉冲进行设置,而 80 kHz 的速度正好为我们提供了零余量。在 5.12 MHz 时,我有 41 个时钟周期来运行中断例程,如果我跳过检查第二个标志而只处理传入数据,我可以稍微减少它。但我觉得我至少必须使用 DRDY 标志检查,并使用例程启用第二个中断,否则我将不断中断,因为 ADC 上的 DCLK 一直在运行。这让我有 6.12 微秒的时间来读取数据,并在下一个 DRDY 脉冲之前有 6.25 微秒的时间将其洗牌。我应该能够在 32 MHz SPI 时钟(从属)下做到这一点,但很可能会在 50 MHz 下做到这一点。这是我当前的中断代码:
我仍然担心时钟周期,如果我假设唯一会触发的其他 EXTI 标志是时钟引脚,我相信我可以只检查 DRDY 标志。虽然我质疑如果 SYS_TICK 在后台运行这将如何工作......我必须找出答案。
我们正在研究一种更快的处理器来处理位碰撞,但现在,如果 PI3 运行 Linux,它看起来将无法处理它,而且我不知道有太多更快的处理器运行非常小的可靠 RTOS,或者可以在紧要关头进行裸机编程......
stm32f7 - Mbedtls 熵生成永远运行
我正在尝试为 mbedtls 编写一个测试函数,它随机生成一个用于 AES 加密的密钥。我使用 mbedtls 的原始教程代码。执行“mbedtls_ctr_drbg_seed()”时,我的程序总是停止。
关于我的环境:STM_CUBEmx 的基本源文件,板:ST32F767 Nucleo,基于 STM_Cube 的 Makefile 编译
先感谢您
sockets - 无法通过 LwIP 在 STM32F746 UDP 套接字上接收数据
我一直在尝试让 LwIP 堆栈在我的 STM32F746 Discovery 板上工作,但在接收数据方面到目前为止还没有运气。发送工作正常,但由于某种原因,我无法接收任何数据包。Wireshark 确认数据包已发送,但董事会似乎忽略了它们。我的假设是 stm32f7xx_hal_conf.h 中的一些配置做错了,但是我在这方面的经验非常有限,所以我一直无法弄清楚。
这是我初始化套接字的方法:
打印倒数第二行,然后线程无限期地阻塞等待数据包。正如我所说,如果我发送数据而不是接收数据,那么一切正常。我也尝试了回调的方法来监听,但无济于事。
我直接从 ST 的 LwIP 示例应用程序中获取了网络初始化程序和配置文件。
这是我的 stm32f7xx_hal_conf.h,我感觉这里可能有一些错误配置,因为如果我弄乱了其中一些值,通过套接字发送也会停止工作。
非常感谢您的帮助,我已经坚持了好几天了!
c - 从 uint64_t 转换为 double
对于包含双浮点指令的 STM32F7,我想uint64_t
将double
.
为了测试这一点,我使用了以下代码:
默认情况下(如果DO_NOT_USE_UL2D
未定义)编译器(gcc 或 clang)正在调用函数:__aeabi_ul2d()
这在执行指令的数量上有点复杂。在此处查看汇编代码:https ://github.com/gcc-mirror/gcc/blob/master/libgcc/config/arm/ieee754-df.S#L537
对于我的特定示例,它需要 20 条指令而无需进入大多数分支
如果 DO_NOT_USE_UL2D
定义了,编译器会生成以下汇编代码:
代码比较简单,只有10条指令。
所以这里的问题(如果DO_NOT_USE_UL2D
已定义):
- 我的代码(在 C 中)是否正确?
- 我的代码比
__aeabi_ul2d()
函数慢吗(不是很重要,但有点好奇)?
我必须这样做,因为我不允许使用 libgcc 中的函数(有很好的理由......)
请注意,这个问题的主要目的不是关于性能,我真的很好奇 libgcc 中的实现,我真的很想知道我的代码是否有问题。
c - 相同的库文件适用于 stm32f7 但不适用于 stm32f4
在使用飞行时间传感器VL53L0x - 200 cm
和VL6180x - 60 cm
. 我有两个板,STM32F446 Nucleo
和STM32F767 Nucleo
。我已经为两个飞行时间传感器编写了库 STM32F767 Nucleo
。但是,当我试图在它上面实现相同的库时,STM32F446 Nucleo
它不起作用。
在寻找解决方案时,我发现 I2C 存在问题。在 F7 中一切正常,它返回 HAL_OK。但在 F4 中它返回“HAL_ERROR”。我 的意思是这个功能。
库文件的 Pastebin 链接
https://pastebin.com/z15btwTD - vl6180.c
https://pastebin.com/62XYxUVx - vl6180.h
当然,在我使用 for 时vl6180.h
已更改#include "stm32f7xx.h"
为。我在两个板上都使用了 I2C1。但我也尝试过其他 I2C,但它们都遇到了同样的问题。Hal 库是使用 CubeMx 生成的,而 Attolic True Studio 是 IDE。#include "stm32f4xx.h"
STM32F446 Nucleo
同样的事情正在发生VL53L0X Sensor
。
任何建议将不胜感激。
编辑
从函数的这个特定部分HAL_I2C_Master_Transmit()
返回HAL_ERROR
问候。