问题标签 [stm32f3]

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 回答
790 浏览

c - 如何使用 Nucleo-F303K8 每 1us 进行一次 adc 转换?

我使用的是 STM32 Cube IDE。我现在尝试的是在 TIM2 中启用 MSM,在通道 1 上启用 output_compare_no_output,然后选择“Reset”作为触发事件。然后我转到 ADC1 并启用 Regular_Conversion_Mode,将 Number_Of_Conversions 设置为 1,将 External_Trigger_Conversion_Source 设置为 Timer 2 Trigger Out 事件。之后,我在循环模式下设置了一个 DMA,将半字推送到 RAM 缓冲区。为了测试,我将定时器的频率设置得低很多(10Hz),并在 ConvHalfCoplt 和 ConvCoplt 完成回调中通过 UART 从缓冲区发送一些 ADC 读数。但目前它不起作用。你能想想我的方法有什么错误吗?

################################################# ############################ 老的: #################### ################################################# ########

到目前为止,我尝试将 TIM2 配置为每微秒重置一次并在中断回调中开始转换:

但据我所知 PollForConversion 可能需要一些时间。

创建一个缓冲区并使用 DMA 不断地将数据从 ADC 传输到缓冲区并每微秒从那里读取一个值会更好吗?我不会那样阅读“旧”数据吗?

0 投票
1 回答
135 浏览

rust - 如何从 stm32f30x 中的 cortex-m-rt 获取中断重新导出以运行

我想使用 rust 和 the cortex-m-rtand crates 为 STM32F3Discovery 板编写一个程序stm32f30x。更准确地说,我想实现一个我想使用该#[interrupt]属性的外部中断。但是转出口似乎有问题。

cortex-m-rt 关于中断的文档说该#[interrupt]属性不应直接使用,而应使用设备箱中的重新导出:

事实上,stm32f3x crate的文档显示 cortex-m-rt crate 中的这个属性被重新导出。但是,编译:

或者

给出错误

我不知道为什么会发生这种情况,因为我遵循的示例也是如此。我在 Cargo.toml 中的依赖项如下所示:

我很感激任何帮助:)

0 投票
1 回答
61 浏览

rust - 我的 EXTI0 中断处理程序没有被覆盖/工作正常(STM32F3Discovery)

我正在尝试学习嵌入式设备的编码并希望实现中断。为此,我编写了一个程序,其中主要功能只是一个循环,使一个 LED 闪烁,中断应该点亮另一个 LED,以测试一切是否正常。

我的代码如下所示:

我正在使用我自己为计时器编写的 f3discovery 模块和用于 LED 的另一个模块 (aux9)。当我运行程序时,第一个 LED 闪烁,直到按下导致中断的按钮。但是第二个 LED 永远不会亮起。删除 EXTI0 会产生相同的结果,这导致我认为处理程序没有被正确覆盖。

我很感激任何建议:)

0 投票
1 回答
117 浏览

c++ - 如何在按下并释放一次按钮时打开 LED,然后通过再次按下和释放将其关闭?

我试图通过按下并释放一次按钮来打开 LED,然后通过再次按下并释放它来关闭它,依此类推。我一起写了一堆代码,但我不确定听起来是否正确。我的意思是我不知道这是我的面包板还是连接松动,但不确定它是否按预期工作。我知道接线是正确的,只需在按下按钮时将其打开,然后通过释放按钮将其关闭即可。任何帮助深表感谢。谢谢你。

这是代码:

0 投票
0 回答
670 浏览

stm32 - 带地址标记检测的 STM32 UART 多处理器模式。预期的数据字节被解释为地址字节

我已将 UART 配置为通过 RS485 进行多处理器通信。我可以正确接收和传输数据。唤醒后(RWU=0)当接收到正确的地址后,后续字节应该正常接收,而不是解释为另一个地址是我的理解。但是,如果预期的数据字节包含一个“1”作为 MSB,则它被解释为一个地址。现在从文档中可以清楚地看出这是正确的行为,但是在接收到正确的地址后(RWU 设置为 0,RXNE 设置为 1,通过调试确认)我只能接收值小于定义地址的数据。例如,如果我将字长设置为 9 位,地址设置为 4,则正确的地址将是预期的 132(10000100)(我认为在这种情况下地址长度为 8 位,因为设置了 ADDM7)。但后续字节仍被解释为地址。发送 132,55,45,150(通过 RealTerm)只会收到 132,55,45,因为 132 是正确的地址,而 44,55 的 MSB 为“0”。150 被解释为新地址,因为 MSB 中的“1”和 RWU 再次设置为 1,因为它是不正确的地址,我无法再接收数据。

我的问题是,在我再次回去监听地址之前,如何将正确地址之后的后续字节解释为纯数据字节?如果我理解正确,RWU 和 RXNE 是由硬件在这种模式下设置的?或者我应该在 FW 中做些什么具体的事情?我的实现目前是基于中断的。我使用的MCU是F303K8。

我将附上一些图片、代码和文档以获取详细信息和清晰度。

谢谢!

参考手册: 参考手册1

参考手册2

代码和调试:

代码和调试

示波器: 示波器

0 投票
1 回答
1060 浏览

embedded - 为什么在尝试使用 openocd 连接 stlink-v2 时出现通信故障

我正在尝试使用 stlink-v2 连接到“stm32”“bluepill”以向其写入一些代码

每当我运行 openocd 时,它都无法连接我的 openocd.cfg 文件如下所示

当我运行 openocd 时,这是我收到的响应:

我以前在上面写了一些代码stm32f103bluepill当我连接到我的电脑时,代码运行(它导致 pc13 上的 LED 闪烁)

上次运行良好时,我没有更改 openocd.cfg 文件

0 投票
1 回答
113 浏览

stm32 - 在不使用 Cube MX 库的情况下控制 STM32F3 GPIO

我正在将此用于STM32F373CC的引导加载程序改编为我的设备。为了表明设备已通电但处于引导加载程序模式,我想打开一些状态 LED。但是,此引导加载程序不使用 STM Cube MX 库,因此我必须对其进行低级编码。包含头文件stm32f373xc.h,所以我可以使用GPIOB_BASE之类的表达式。

我在 main() 中尝试了以下第一件事,但不幸的是它不起作用:

有什么我想念的想法吗?如何确定问题是端口 B 的时钟还是引脚配置?

我发现了这个类似的帖子,但是第一个答案需要整个 CMSIS,第二个答案没有评论,所以我不完全理解他们在做什么。

0 投票
0 回答
61 浏览

embedded - 向 SPI1->DR 作为主机发送数据时出现问题

我尝试使用 SPI 将数据从主机发送到从机,

我对此真的很陌生,我不知道我做错了什么

我不知道它是否与我的初始化配置或我对 spi 进程的理解有关。如果有人知道或可以指导我,因为我不知道出了什么问题。

0 投票
2 回答
119 浏览

rust - 为什么我的 LED(stm32f3-discovery board)在应用延迟后不发光?

我在申请延迟延迟时犯了什么错误吗?

这是我正在使用的代码,用于在延迟后闪烁 LED 3 和 4。

如果我不使用延迟部分,它工作正常

0 投票
0 回答
49 浏览

arm - STM32F3 在这种特殊情况下无法让 UART 工作

我无法在两个 STM32F3 Discovery 板之间进行非常简单的传输。让我解释一下我在做什么。

我将 Board-A 通过 i2c 连接到 LCD 20x4,Board-B 通过 i2c 连接到 Qrobot 3D 手势传感器,目标是捕捉 Board-B 的运动,闪烁同一板上的一些 LED 并通过UART (uart4) 到 BoardA。

问题是虽然debug显示传输发生了,但实际上Board-A并没有进入RxCpltCallback的回调中。在深入探讨该主题之前,让我向您展示代码:

这是 Board-A 的 Receive 回调。(此外,此问题已测试通过 Uart4 从另一个 F3 接收(F3 也通过 uart4 发送,但在 BushButton 的回调中))

这似乎工作正常,我认为问题不在这里。

让我们看一下 Board-B 的代码:这个程序必须在一个循环中检查一些代表手势的标志,当出现时闪烁​​一些 LED 并通过 huart 发送一个数字,这是一个非常简单的任务!

}

为了通过调试和断点进行测试,我仅为传输创建了一个单独的函数(还尝试了 HAL_UART_Transimit(&huart4, (uint8_t *)num, sizeof (uint32_t), HAL_MAX_DELAY)):

当我在板上尝试此代码时,传感器识别手势并闪烁正确的 LED,在调试中我可以清楚地看到我输入了 trasmit 的函数 sed() 但没有任何东西到达另一块板上。PS:连接两块板的每根电缆都工作正常,并且在正确的引脚上。

你怎么看呢?我无法摆脱这个问题!