问题标签 [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 投票
0 回答
168 浏览

stm32f1 - 无法测量太阳能发电系统的电池电压

我想通过 STM32F103C8T6 的 ADC 使用电阻分压器测量电池电压。系统启动时,STM32 的值为 6.35V,但当电池电压达到 6.45V 时,STM32 的值不变。我不知道那件事。请帮我。太感谢了。

在此处输入图像描述

0 投票
1 回答
1287 浏览

arm - IAR Embedded Workbench for ARM - 如何定义中断服务程序?

我试图为 Timer2 溢出中断创建一个中断服务程序,如下所示:

我正在使用 IAR Embedded Workbench for ARM v8.22.2(最新版本)。但是 TIM2_IRQHandler 永远不会被调用——它甚至可以从 C 编译器中得到优化(所以在 dissasembly 中不再有 TIM2_IRQHandler 了)。

那么如何在 IAR Workbench 中正确定义 ISR?

0 投票
1 回答
1647 浏览

assembly - 从 Flash 启动时的 STM32 HardFault

我有一个简单的 STM32F103 ARM 芯片裸机程序(我使用 GNU 工具链和 openocd 调试器)。

当我从 RAM 运行它时,它工作正常。当我使用预装的引导加载程序引导芯片并直接跳转到Reset_Handler闪存中的位置时,它也可以工作。但是当我尝试从 Flash 启动时,处理器进入 HardFault 模式。

处理器复位后,pc寄存器立即指向该Reset_Handler位置。当我迈出一步时,如果陷入Hardfault_Handler.

为什么会这样?我怀疑这是一个糟糕的内存访问,但一切似乎都是对齐的。

汇编代码:

RAM 链接描述文件:

Flash 链接描述文件:

部分拆卸.text

部分拆卸.isr_vector(部分):

0 投票
2 回答
1163 浏览

spi - stm32F1 dma关于spi循环模式传输数据量

我目前正在使用循环模式的 DMA 和 SPI 学习 STM32F1xx。我的目标是让 STM32F1 重复发送相同的数据。

我正在使用 cubeMX 生成的代码,使用循环模式设置 SPI-DMA 并使用HAL_SPI_Transmit_DMA()来激活 DMA 传输。

我有一个像这里的数据缓冲区:

当我使用HAL_SPI_Transmit_DMA(&hspi1,dataBuf,10) 时;它工作正常。STM32F1通过SPI重复发送字符,我可以使用HAL_SPI_DMAStop(&hspi1); 阻止它。

但是如果我只想重复发送 5 个字节的dataBuf,使用HAL_SPI_Transmit_DMA(&hspi1,dataBuf,5),STM32 无法对此做出反应。它只是挂在某个地方,什么也没做。

我想知道为什么会这样。数据量是否需要与声明的缓冲区数组大小相同(实际上,这对我来说没有意义)?如何使用循环模式发送所需的数据量?

更新1

我应该附上我的 SPI 和 DMA 设置,在这里。

SPI设置:

DMA设置:

更新2

这是我的代码测试设置:

和逻辑输出:当我设置 10 个字节发送时,它工作正常,STM32 重复发送 abc.. 并按预期暂停。逻辑捕获请看下面的图片。

发送 10 个字节 - 概述

发送 10 个字节 - 结果

但是当我发送 5 个字节时,它似乎无法停止。逻辑捕获请参见以下图像。

发送 5 个字节 - 概述,无法停止

发送 5 个字节 - 结果,但它确实重复发送了 5 个字节

我的问题仍然存在,为什么当我设置 5 个字节发送时无法停止 DMA?

我确实测试了其他字节数。10、9、8 字节有效。但是 7, 6, 5, 4, 3 ,2 ,1 字节不起作用。SPI DMA 是那些无法停止的情况。

如果需要提供更多信息,请告诉我。

谢谢。

此致。

0 投票
2 回答
904 浏览

stm32 - mbedTLS 是否适用于 STM32 F1?

堆栈mbedTLSSTfor its提供,STM32 F7 microcontrollers但不是 for STM32 F1

所以我想知道是否有原因,是否有可能mbedTLSSTM32 F1.

谢谢你。

0 投票
4 回答
5149 浏览

gcc - STM32代码上传成功但不运行

我是 STM32 的新手,我按照此处的说明在 Ubuntu 中编程我的第一个 stm32f103c8t6 板。

这是我添加到源代码中的代码:

当然,我已经将PA0端口设置GPIO_outputSTM32CubeMX. 这是函数的输出MX_GPIO_Init

代码成功构建并上传到开发板。以下是用于重建构建和上传代码的代码的输出:

但是,LED 没有按预期开始闪烁。当我将它连接到 5 伏时,LED 工作正常。我用 AVO 表检查了电路板的引脚,它们都连接到微控制器。

经过一些研究,我认为它必须与Boot0和引脚有关,所以我从这里Boot1尝试了不同的选项,但没有一个有效。

这是我的董事会的形象:

我该如何解决?

0 投票
3 回答
2057 浏览

stm32 - STM32 SPI数据反向发送

我一直在尝试使用 SPI 写入外部EEPROM,但我取得了好坏参半。数据确实以相反的方式移出。EEPROM 需要一个起始位,然后是一个操作码,该操作码本质上是用于读取、写入和擦除的 2 位代码。本质上,起始位和操作码组合成一个字节。我正在创建一个 32 位无符号整数,然后将值移位到其中。当我传输这些时,我看到首先看到的是实际数据,然后是 SB+操作码,然后是内存地址。我如何反转这个以首先查看操作码,然后是内存地址,然后是实际数据。如下图所示,数据为BCDE,SB+opcode为07,内存地址为3F。正确的顺序应该是 07、3F 和 BCDE(我认为!)。

在此处输入图像描述

这是代码:

0 投票
1 回答
1266 浏览

stm32 - 无法使用 STM32F103C8 从外部 EEPROM 读取

我正在尝试从外部EEPROM写入和读取。有一个起始位 (SB),后跟一个操作码,然后是一个 6 位地址,然后是实际数据。我已将 SB 和操作码组合成一个字节,我可以将其作为开始条件发送。我能够启用、擦除然后写入 EEPROM。我假设这是有效的,因为 HAL 函数返回 HAL_OK 并且我可以在示波器上看到有效波形。

我似乎无法做的是读回数据。对于 READ 操作,我在示波器上看不到任何波形。所需的时钟周期数是奇数,而不是 8 的倍数。我不知道如何发送奇数时钟周期,因为所有数据都是 8、16 或 32 位。在需要 25 或 29 个时钟周期的地方,我似乎发送 32 个,而在所需周期为 9 个的地方,我似乎发送 16 个。我真的希望避免按照该线程中的建议进行位碰撞。

这是主要代码:

SPI 初始化为处理 16 位数据值

这些是 EEPROM 功能

编辑:我在这里也附上了波形。

使能够

使能够

擦除

擦除

在此处输入图像描述

0 投票
0 回答
2335 浏览

arm - stm32f103:强制 DMA 传输完成中断

我正在尝试使用 FreeRTOS(互斥体和流缓冲区)、DMA 和 USART3 实现 stm32f103 和 SIM900A 之间的通信。

我已启用 USART_IT_IDLE USART3 中断,以便能够检测 SIM900 传输结束并强制触发 DMA 传输完成中断以将数据从内存复制到 FreeRtos 的流缓冲区。

这篇文章说这是可能的。

但我的调试器说:不

这是我的代码:

为什么我不能强制 DMA1_IT_TC3 中断?还是可以强制在STM32F103上?

0 投票
1 回答
2371 浏览

c - STM32 µC:SysTick 延迟在中断处理程序中不起作用

所以我用 C 语言为微控制器编写了一个程序STM32F103C8T6,使用 RTC(实时时钟)和一个显示模块。

RTC 和显示器都工作正常,但是当我尝试从 RTC 中断处理程序内部更新显示器时,它不起作用。

当我从 中向显示器写入内容时main(),它工作得很好。

中断处理程序也可以正常工作,所以我认为问题出在写入显示器的函数中。

此函数使用小的延迟来对与显示控制器的通信进行位爆炸。

我以前使用SysTick来生成这样的延迟:

但不知何故,在 RTC 的中断处理程序内部它不起作用。所以我用这个替换了我的延迟函数,而不是使用 SysTick:

现在一切正常。

我试图理解,为什么SysTick在 RTC 中断处理程序中显然不起作用。

我认为这可能是由中断优先级引起的,但根据数据表,默认情况下SysTick Interrupt' 的优先级高于 RTC 中断优先级。

也许有人可以解释,为什么会这样?

EDIT1:好的,所以我已经阅读了更多关于中断优先级的内容,看来我需要正确配置 NVIC_IRQChannelPreemptionPriority 。我会尽快尝试这个...

关于中断内部的延迟,我知道这不是正确的做法,但我仍然想了解程序的行为

EDIT2:我只是尝试通过以下方式更改中断优先级:

现在 SysTick 延迟在 RTC 中断处理程序中起作用。