问题标签 [stm32f1]

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

arduino - Arduino Nano 和 STM32 Blue Pill 上的 I2C 无法检测到所有设备

我对 I2C 设备有一个奇怪的问题。我在同一条 I2C 总线上使用了 RTC(DS3231 + 24LC32 EEPROM)、基于 SSH1106 的 1.3 英寸 OLED 显示器和 Si5351 时钟发生器。它们各自的地址是0x680x570x3C0x60

在 Arduino 上,模块使用 5V 接口和 Vcc,I2C 扫描仪正确检测到所有设备(它们都是 3.3 伏设备,并且模块包含低压降稳定器和电平转换,应该可以在 5V 和 3.3V I2C 总线上正常工作)。在i2c_scanner草图中,所有设备都被正确检测到。当我在一个草图中使用 RTC、U8Glib2 库用于 OLED 和 Si5351 设置时,显示器没有初始化,Si5351A 没有产生任何信号。

我认为这是由于堆栈溢出,因为 Arduino 设备只有 2KB RAM,编译器报告动态变量使用了 1980 字节 RAM。当我重写整个草图以使用简化的 U8x8 库(不使用 RAM 缓冲区来显示数据)时,我得到了能够显示必要信息和驱动 Si5351A 的工作程序。

然后我从面包板上取出两个模块 Si5351 和 OLED 并将它们连接到 STM32 板(Blue Pill)。有趣的是,在我连接 Si5351A 之前,i2c_scanner 检测到了 OLED(地址0x3C )。连接 Si5351 后,它停止检测 OLED :-(

知道这怎么可能吗?特别是,为什么在 AVR 版本的 Wires 库中它可以工作,但在 STM32 版本中却不行?以及为什么地址为 0x3C0x60的设备之间似乎存在冲突(后者似乎在寻址 0x3C 时“覆盖”了 ACK 位如果它真的是 I2C 总线,这应该是不可能的......)

另外,OLED 显示器的模块 PCB 指示其 I2C 地址应为0x7E ( 0x3C << 1 ),因此 7 位和 8 位地址之间似乎存在一些混淆。

我试图在各种社区讨论和教程中找到解释,但无济于事。

我感到很困惑..

0 投票
2 回答
849 浏览

stm32 - 带有 STM32f103c8t6 Bluepill 和 CAN 总线的 HAL_CAN_ERROR_PARAM

我正在努力通过带有 stm32f103 bluepill 板和 SN65HVD230 收发器(端接)的 CAN 总线发送消息。在另一端,我使用终止的 USB 可以适配器,工作正常。CAN 总线速度为 500kbit/s。

SN65HVD230 的连接:

CubeMX 中的配置

固件版本 1.8.0。这是main.c

在调试器中调用 HAL_CAN_AddTxMessage 3 次(3 个邮箱?)后,在 hcan.ErrorCode 中显示 0x200 错误,即定义为 HAL_CAN_ERROR_PARAM。看起来所有邮箱都已满,没有消息发送到总线。

任何想法如何调试这个问题并让它工作?

0 投票
0 回答
1963 浏览

c++ - STM32F1 写/读闪存,Cortex M3

我需要在我的蓝色药丸板(stm32f103c8t6)中写入/读取闪存,我按照本教程https://www.youtube.com/watch?v=BKgh896Bj8Q&t=32s但我使用了 Keil uVision 5 IDE,我遇到了这个错误

" #error 167: "uint32_t" 类型的参数与 "const char *" 类型的参数不兼容 "

这是我使用的 .c 库

在 main.c 中,我只使用了 Flash_Write_Data(0x0801FC00,data); 都是来自 .c 和 .h 文件的命令,我还使用了 CubeMX 和 Keil IDE(不知道有没有区别)

不知道是不是keils配置的问题,教程中用到的.c和.h库看不出那么复杂。我在互联网上搜索,这是一个非常常见的错误,但没有找到解决方案。我什至没有在 PAGE MEMORY TYPE 的 cortex M3 中找到太多关于闪存的信息。如果有人可以帮助解决此错误或在 cortex M3 中写入/读取闪存,我将不胜感激。

0 投票
1 回答
500 浏览

c - STM32F103芯片大约每500ms保持一次复位

我为 stm32f103rbt6 芯片写了一个简单的闪烁程序,但过了一会儿我注意到 MCU 不断地复位。当我检查 RCC-CSR 寄存器时,PINRSTF 标志为高。但我没有将任何外部连接到 NRST 引脚。有人知道为什么会这样吗?有没有可能是什么内部原因导致了这种情况?

这是我为调试而编写的程序。结果是每次 LED 想要打开但又很快关闭。

0 投票
1 回答
40 浏览

gpio - STM32F10x 通过 uint8 指针将 uint8 值写入 gpio 寄存器

所以我必须将代码从 STM32F4xx 设备移植到 STM32F10x 设备。一切都很顺利,我很快就取得了巨大的进步。但后来它击中了我!在软件中的某一时刻有以下定义

#define BYTE_GPIO (*((__IO uint8_t *)(GPIOE_BASE + 0x0C + 1)))

这显然定义了对 GPIOE ODR 寄存器的高字节的访问。虽然这在 STM32F4x 设备中工作正常(正如我被告知的那样),因为它们支持对该寄存器的字节访问,但它不适用于 stm32F10x 设备。这在 RM 中也有说明:

这些位可以通过软件读取和写入,并且只能在字模式下访问。

首先我忽略了这条语句,只是尝试了一下:代码编译良好,没有任何错误或警告,甚至对GPIOE高字节的写入也会执行良好,但很快我发现GPIOE的低字节受到了影响也对 BYTE_GPIO 进行任何写入。由于这显然不可用,我必须找到其他解决方案。但由于我不想更改很多应用程序层代码,我宁愿以某种方式修复这个定义。不幸的是,我不知道如何。所以我愿意接受。谢谢。

0 投票
1 回答
1016 浏览

c++ - cmsis_compiler.h:为 Arduino Due 编译 Arduino Tensorflow lite 库时没有这样的文件或目录

我正在尝试为 Arduino Due 板编译 Arduino Tensorflow lite Library 示例文件,但在编译时我收到了缺少 cmsis_compiler.h 文件错误的错误。我还尝试使用Arduino_TensorFlowLite 版本 2.1.0-ALPHA 预编译库在 Arduino 版本 1.8.12 上编译 STM32F103C8 板的代码,但仍然出现相同的错误。这是完整的错误

0 投票
0 回答
34 浏览

arm - keil Uvision5上usart1驱动stm32F103RB的问题

[调试窗口][1]我尝试使用 USART1 打印一条消息,代码正在编译,但串行监视器上没有打印任何内容,我在 usart2 上尝试了相同的配置(除了波特率和 clk 启用),一切正常,这是我的代码,请问有人遇到过同样的keil问题吗?在 mbed 上,usart1 和 usart2 都工作正常,这是我的新代码版本 2[调试窗口][2]:

这是我的代码经过一些修改我添加了一个屏幕来显示调试窗口,我删除了 ORR,并清除了 PIN9 的 ODR 寄存器,

0 投票
0 回答
44 浏览

stm32 - AC6 eclipse - 使用 libopencm3 运行示例闪烁器的问题

我在测试来自 libopencm3 的 STM32F103 的代码示例时遇到问题。我在包含 inc 文件的目录中包含了一个 libopencm3,并将 inc 目录添加到“路径和符号”中。即使我在目录 inc 中有文件“libopencm3/stm32/common/rcc_common_all.h”,我也会收到类似没有文件或目录的错误。我做错了什么?

屏幕1

屏幕2

0 投票
0 回答
167 浏览

stm32 - 在 STM32F1 上使用 SPI 和 DMA 的问题

在使用 DMA 传输 SPI 时,我在触发 NSS 引脚时遇到问题。我使用 CubeMX 生成项目的整个核心。触发 NSS 为低电平和发送数据(也在传输结束和 NSS 为高电平之间)的时间太长。我怎样才能缩短这个时间?

我试着用

用于检测 SPI DMA 传输的结束,但一旦它工作,后来当我在 CubeIDE 中更改某些内容时,它完全停止了整个程序的工作......

逻辑分析仪

0 投票
1 回答
190 浏览

c - STM32 PWM DMA 只有在每次传输时都重新初始化才能正常工作,否则会丢弃前几个脉冲

正如标题所说,如果我不包括对HAL_DMA_Init(&hdma_tim2_ch1)in的调用WS2812_DMA_Stop,我的第一次传输工作正常,但所有后续传输都缺少第一个(1-4,通常是 3)脉冲。

DMA设置:

下面附上完整代码: