问题标签 [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.
debugging - 无法连接到目标:STlink V3 未使用 SWD 连接到 Nucleo Board
我正在使用 STLink V3 设置使用 SWDIO 接口对 F103RB Nucleo 板进行编程。当使用板载 STlink 调试器连接到 PC 时,该板工作正常,但是当我使用外部 STlink 设备对其进行编程时,它显示“无法连接到目标!”。我已经移除了板载 STlink 调试器跳线,以便我可以使用外部的。我从 Stlink V3 到 F103RB Nucleo (CN4 Header) 的连接如下:
Clock->Clock, GND->GND, SWDIO->SWDIO, NRST->NRST,VCC->NOT CONNECTED (即使我连接了,它也没有工作)
数据表说“如果外部应用中使用 CN4 引脚 5,SB12 NRST(目标 MCU RESET)必须关闭”,这是问题吗?如何解决?或者是否有任何其他潜在原因导致此错误。
我将非常感谢您的及时回复。谢谢
c - 通过usart使用stm32F103向esp8266发送AT命令
我正在尝试在 keil IDE 上使用 STM32F103 与 Wifi 模块(esp8266)通信。如示意图中所述:我想让我的 stm32 通过 usart1(Tx1)向 esp8266 发送 AT 命令,并获取 esp 响应(Rx1),然后使用 usart2(Tx2)在计算机串行监视器上显示 esp 响应。
在配置了 usart1 和 usart2,并编写了发送接收数据的函数之后,我只得到了命令的 ECHO,而不是应该是 "OK" 的响应enter code here
。当我发送“AT\r\n”时,我在串行监视器上只接收到 AT。我将分享我写的代码,以及逻辑分析仪上的痕迹。如果有任何建议,我将不胜感激。
stm32 - 如何从中断例程将数据发送到 EEPROM
我有一个 EEPROM AT24C256。我想从定时器中断程序写入这个 EEPROM。但是当我尝试时,STM卡住了。其他代码行不会发生这种情况。
我的代码是这样的。
我该如何管理?
c - 可以使用选项字节将用户数据永久存储在 STM32 微控制器的内部闪存中吗?
我正在使用 STM32F103C8 微控制器。根据STM32F10xxx 闪存编程手册(第 20 页),有 2 个选项字节可用于存储用户数据。这些字节称为Data0和Data1,它们存储在地址 0x1FFF F804。
单片机电源被切断后,这2个字节能否用于永久可靠地存储信息(例如单片机的电源状态)?
stm32 - stm32外部中断引脚模式改变
我正在设计一个带有 stm32f103c8t6 的 ESC。在我的设计中,我使用 BEMF 电路来检测电机的相位。从 BEMF 电路(带有比较器 LM339)我正在读取 3 个中断引脚,但是当代码运行时,我需要更改引脚模式(如上升沿检测到下降沿检测),并且我需要禁用其他 2 个(这取决于电机的相位那时)中断引脚,以免读取来自电路的噪声。我怎样才能做到这一点?
谢谢你的帮助,
timer - 如何正确设置 SysTick Timer?
我无法为 STM32F103C8(蓝色药丸)生成特定时间。显然,AHB 主时钟设置为 72 MHz。但是,无论 SysTick 时钟源是 AHB 还是 AHB/8,时间总是要长 10 倍。 时钟配置
此延迟应为 0.1 秒。但它总是在 1 秒内起作用。其他值也高出10倍,不管CLKSOURCE是AHB还是AHB/8。如果有人可以提供帮助,我将不胜感激。
stm32 - 重新编程STM32F102故障
我正在尝试为 MIDI 控制器(AKAI LPD8)制作一些自定义固件。单元中有一块STM32F102R8T6芯片。我试图用程序员来擦拭它,但它似乎没有响应。
我尝试过的一些信息和事情:
- 设备随附的固件可以正常工作,因此芯片没有损坏
- 移除了连接到编程引脚的组件(PA9-PA10 和 PA13-PA14)
- 我可以将 BOOT0 拉高并且让它不运行主程序,但是我无法使用连接到 PA13/14 的 ST-Link2(克隆)或连接到的 USB 到串行适配器来获得生命迹象PA9/PA10,所以不知道是什么模式
- 已检查连接,RX-TX 等是正确的方法(但也为了尝试这一切,我也颠倒了连接......)。
- 尝试了 STM32CubeProgrammer 和 stm32flash,但没有连接。
我实际上不确定 AKAI 是否以这样一种方式锁定了芯片,以至于您甚至无法进行完整的芯片擦除并将芯片用于新的东西?奇怪的是,当我尝试将 NRST 引脚拉低时,它也没有对固件的运行做任何事情。
有没有办法在这些芯片脱离商业产品时对其进行重新编程,或者它们是否被永久锁定?
任何解决方案/提示?
c - 为什么 UART 继续写入我的 25 字节缓冲区,它离开了哪个字节?
我有一个在 STM32F1 上运行的基于中断(RXNE)的接收周期。我只使用接收命令,即:
HAL_UART_Receive_IT(&huart3, RxBuffer, sizeof(RxBuffer));
因此,我收到一条消息,然后写入我的缓冲区:
uint8_t RxBuffer[25];
使用RxBuffer的内容后,我正在使用此函数清除此数组:
memset(RxBuffer, '\0', sizeof(RxBuffer));
传入的数据永远不会大于 24 字节顺便说一句。在接收到另一个数据并将其写入RxBuffer之前一切正常。当接收到下一个数据时,发生了一些奇怪的事情,并且HAL_UART_Receive_IT(&huart3, RxBuffer, sizeof(RxBuffer));
函数开始将数据填充到我的RxBuffer中,它在上次接收时留下了哪个字节。
例如;
1 -> RxBuffer 通常用 NULL 初始化
RxBuffer = {'\0', '\0', '\0', '\0', ... '\0'}
(25 字节空)
2 -> 收到第一个数据后,它变成这样
RxBufer = "xc32 CMD1 400 200 50"
(总共 20 个字节,最后 5 个字节仍然为 NULL)
RxBuffer = {'x', 'c', '3', '2', ' ', 'C' ... '\0', '\0', '\0'}
memset(...)
3 -> 然后我使用函数清除缓冲区内容。
RxBuffer = {'\0', '\0', '\0', '\0', ... '\0'}
(再次为 25 字节 NULL)
4 -> 在接收到另一个数据后,如“xc32 CMD2”:
RxBuffer = {'C', 'M', 'D', '2', '\0', '\0', '\0' ... 'x', 'c', '3', '2', ' '}
(仍然是 25 个字节的数据,但 UART 开始写入上次中断的字节数据,它变成了一些移位的狗屎..)
它的行为就像一个环形缓冲区。如何正确执行此接收过程以使其每次接收都开始缓冲区的第 0 个索引?
c - STM32F103 HAL_CAN_RxFifo0MsgPendingCallback 无法工作
我正在为 stm32f103 编码。我想读取 CAN-BUS,但中断不起作用。我会写,但我不会读!!!
这是编写和阅读代码。
定义:
hcan 初始化:
编写代码:
读取中断代码:
我的错误在哪里?
stm32 - STM32F1 基尔 HAL
我正在尝试将 HAL 库添加到 Keil,但我遇到了问题。安装包 Keil.STM32F1xx_DFP.2.3.0 后,我在设备下拉菜单中看不到 HAL。有 StdPeriph,但没有 HAL。我为 STM32F4 安装了 DFP 只是为了检查那是我还是 Keil,而对于 STM32F4,在选择软件包时有 HAL 选项。有没有办法手动添加这个包?