问题标签 [stm32f0]

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 投票
0 回答
66 浏览

stm32 - STM32F030x每5秒发送一次ST20033000022056000063227OV,无法编程

我构建了 2 个裸机开发板,均使用 STM32F030K6T6。可以使用引导引脚选择和 USART 引脚 PA14 和 PA15 对一块板上的 MCU 进行编程,如数据表中所示。第二个不响应闪烁命令,而是每 5 秒以 9600 波特率在 USART TX 引脚上持续发送相同的消息ST20033000022056000063227OV 。

我无法在数据表或其他地方找到与此相关的任何参考资料。我可以放弃董事会,但我想了解发生了什么。MCU 似乎处于某种故障模式。消息是什么意思?

我尝试使用Arduino 的 STM32 库中可用的stm32flash脚本进行闪烁。使用示波器确定信号的波特率。然后通过以下方式捕获消息:

两个 MCU 来自同一批次,开发板具有相同的附加组件(2 个去耦电容器、一个引导选择器跳线和一个复位按钮)。

0 投票
0 回答
34 浏览

c - sscanf 出现奇怪的内存问题

在 eclipse 中使用 gcc-arm-none-eabi-5_42016q3-20160926 工具链。处理器:STM32F030 我有一个 3 行程序,它在任何硬件初始化之前启动以隔离问题:

我已将 RAM 设置为 0XAA,因此我可以看到被破坏的内容,为堆栈留出足够的空间。在 memset 指令之后,堆栈指针位于 0X20001F78,内存为 0XAA,直到 0X20001F00,正如预期的那样。在我执行 sscanf 函数后,堆栈指针回到 0X20001F78 但是内存一直被破坏到 0X20001BB4 这让我认为这个简单的调用占用了将近 1K 的堆栈,或者在例程中存在一些其他错误。我已停止使用此功能,但很好奇这是否是预期行为?此外,是否有一个在嵌入式系统中应该避免的 C 函数列表,这让我感到惊讶,但通过搜索我发现我并不孤单。

0 投票
1 回答
322 浏览

stm32 - 使用 CubeMX 时,PlatformIO 中为 STM32 定义 NVIC 的文件在哪里?

我最近切换到使用 PlatformIO 使用以下工作流程为 STM32 进行开发:

  • 使用 CubeMX 实用程序创建一个 .ioc 文件
  • stm32pio从命令行实用程序中的 .ioc 文件生成源代码和 PlatformIO 配置
  • 使用适用于 VSCode (Mac) 的 PlatformIO 插件进行编辑、构建和调试

总的来说,这非常有效。但是,我以前在 ST 的 CubeMX IDE 中使用 CubeMX 代码生成,它将一个 .s 文件放在定义 NVIC 的源目录中(据我所知),以及用于异常/中断的默认函数没有明确定义(即,由其默认的弱实现处理的那些。)我看不出这是在新工作流中定义的位置。这是作为构建过程的一部分动态生成的吗?

我问的原因是(除了希望更好地理解整个过程),我想为 EXTI0 编写一个中断处理程序,但将其作为软件中断触发,而不是为其分配引脚。如果那是不可能的,那么整个问题可能就没有实际意义了。

0 投票
1 回答
40 浏览

c - STM32cubeIDE 忽略我的代码并使用 MX 配置

我有个问题。STM32cubeIDE中是否有禁用CubeMx的选项?

我只想使用UART。所以我在 main.c 文件中编写了 PIN 和 UART 配置。但是 CubeMX 已经配置了 UART 的引脚,完全忽略了我的引脚配置。

当我不知道是否必须在代码或 CubeMx 中配置某些内容时,这非常烦人。

提前感谢您的回答。

0 投票
2 回答
685 浏览

embedded - 如何选择 STM32 以获得低外部中断时间?

我有一个电路需要在 0.5uS 左右响应外部中断。我用一个 STM32F031K6 和一个设置为在 2x PLL 上运行的 20MHz 振荡器构建了电路,提供了一个 40MHz 时钟。我很惊讶地发现,虽然一个时钟周期是 25nS,但我只能在 300nS 时切换一个引脚——我不确定为什么需要这么长时间,我对 8 位 AVR 有一些经验,虽然我不希望它在一个时钟周期内运行,12 似乎很慢。外部中断响应时间为 3uS。我该如何选择满足我 0.5uS 要求的芯片?

我只是假设我需要更换芯片,如果有人对我如何减少响应时间有建议,那也很棒

我的完整代码在这里,这是一个由立方体生成的空白程序,我删除了一些生成的注释以使其更易于阅读

0 投票
1 回答
899 浏览

embedded - 用stm32设计移位寄存器的最佳方法是什么

我正在使用 STM32F031K6,时钟频率为 40MHz,我想设计一个用作循环移位寄存器的程序 - 使用外部触发器为其计时,每次上升/下降沿时移位寄存器中的值左移已收到。输出是一个引脚高或低。

我需要使时钟边沿和输出之间的时间小于 0.5uS,或者尽快失败。移位寄存器的值可以改变,长度也可以改变,但现在我只是从一个像 11000010 这样的字节开始。

我最初想用外部中断来实现它,但有人建议可能有更好的方法来实现它

非常感谢任何帮助

0 投票
0 回答
133 浏览

embedded - 通过直接写寄存器来正确使用ADC?

我正在尝试在 STM32F031K6 上使用 ADC,而不使用 HAL(设置中除外),使用 cubeIDE。我在不连续模式下使用 ADC - 据我所知,事件的顺序应该是

  • ADC 已设置,然后使用 ADEN 启用
  • ADC 通过设置 ADSTART 开始转换
  • 检查 EOC 标志以查看转换何时完成
  • 当从 DR 寄存器读取数据时,EOC 标志清零

这就是我感到困惑的地方 - 然后我必须再次设置 ADSTART 吗?在连续模式下,参考手册似乎表明下一次转换将自动发生,但在不连续模式下,下一次转换需要手动启动 - 我假设这是由 ADSTART 完成的?在模拟中,这似乎不起作用。数据表上说ADSTART是软件设置的,是不是不能直接写?

我的代码如下,如果我一步一步点击它似乎无法正常工作,如果我将其设置为运行,我可以看到 ADC1_data 变量在我更换板上的锅时发生变化,但它间歇性地工作,在0 和正确的值

HAL 设置是

程序中的代码读取

谁能确认我是否犯了错误?非常感谢任何帮助

0 投票
1 回答
257 浏览

c - Stm32 ADC(通过 DMA)重新启动 ADC(DMA)时的错误代码 4

代码由 CubeIde(Mx) 生成。

因此,在主循环的第二次运行时,ADC 错误寄存器读取 4 并停止工作(状态寄存器读取 320)。ADC 配置为读取 2 个通道(1.5 个周期)(正向扫描),ADC 时钟是主时钟除以 4 (48/4=12MHz)。DMA 配置为半字和循环。
定时器配置为 40kHz。

我检查了使用的数组的大小是否正确。优化不会改变行为。

拳头打断

第二次中断

感谢您阅读:)

0 投票
0 回答
236 浏览

touch - STM32 TSC Slider_3 Ch_Capacitive Touch_STM32F072 Discovery_ 0...255范围内的分辨率和位置计算

为了了解基于电容式触摸/TSC 库的应用程序,我一直在研究 AN5105 中为 STM32F072B-Disco 评估板提供的基于轮询的示例代码。在调整代码以自定义应用程序后,我有一些问题如下,我无法理解,即使在查看 ST 的各种应用程序说明后也找不到任何解释。您的意见将不胜感激,对我阐明 TSC 的概念很有帮助。

  1. 滑块上触摸位置的分辨率和计算在 0...255 范围内:

由 TSC 提供的头文件 tsl_conf.h 具有以下参数:

#define TSLPRM_LINROT_RESOLUTION (7) //以位数表示的位置分辨率(范围=1..8)

#define TSLPRM_USE_3CH_LIN_H (1) //半端电极设计

MyLinRots[0].p_Data->Position 结构用于比较 0...255 范围内的位置值,但我无法理解滑块/通道上触摸的值和位置的相关性。分辨率值 1..8 如何影响此计算?是否有任何基于分辨率参数的公式可以根据在滑块上触摸哪个通道来计算位置值?

在 AN5105 中给出的示例代码中,我试图使用以下代码使 4 个 LED 均匀分布在 0...255 范围内的整个滑块中,但无法理解用于比较的值的计算使用 MyLinRots[0].p_Data->Position 结构:

{

}

否则 //if(MyLinRots[0].p_Data->StateId == TSL_STATEID_RELEASE)

{

}

  1. 在另一个示例中,我将同一 STM32F072B-Disco 板上的触摸通道重新配置为 3 个单独的触摸键。如果我将 tsl_conf.h 头文件中的 TSLPRM_TKEY_Detect_IN_TH 和 TSLPRM_TKEY_Detect_OUT_TH 参数保留为默认值 110 和 120,则项目编译时不会出现任何错误。

    // TouchKeys 检测状态输入阈值(范围=0..255)

    #define TSLPRM_TKEY_DETECT_IN_TH (110)

    // TouchKeys 检测状态输出阈值(范围=0..255)

    #define TSLPRM_TKEY_DETECT_OUT_TH (120)

有了这些参数值,我不得不在通道上用力按压,而且经常很难检测到触摸,所以我将检测阈值重新配置为较低的值 50。

通过此更改,我得到如下编译错误:

用户代码如下:

//私有宏#define TEST_TKEY(NB) ((MyTKeys[(NB)].p_Data->StateId == TSL_STATEID_DETECT) || (MyTKeys[(NB)].p_Data->StateId == TSL_STATEID_DEB_RELEASE_DETECT) || (MyTKeys[ (NB)].p_Data->StateId == TSL_STATEID_TOUCH) || (MyTKeys[(NB)].p_Data->StateId == TSL_STATEID_DEB_DETECT))

我不明白我做错了什么以及如何在此滑块上配置 3 个触摸键并具有可调节的检测阈值?

我已经在 Keil 中编译了该项目,我可以分享它以更好地理解问题。

非常感谢您对这些问题的支持,这对我理解和学习 TSC 和 Touch 应用程序非常有帮助。

谢谢你。

0 投票
2 回答
267 浏览

c - SPI 总是读 0

我正在尝试将 SPI 接口与 SPI ADXL345 传感器和 STM32F072 Nucleo 板一起使用。我想做一个非常基本的读取操作。现在读取功能在等待 RXNE 信号时被阻塞。但 RXNE 从未设置。SPI 总是读取 0。我在这里使用 IAR 是我的代码,我也使用这些函数来写入和读取 SPI。