问题标签 [stm32l152]

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

assembly - 如何在 STM32L152 上配置 GPIO 引脚?

我有一个 STM32L 发现板,其中包含一个 stm32l152rb 微处理器。我尝试在没有任何库的情况下在汇编中对该板进行编程。到目前为止,我成功地编写了链接器脚本和一个将 .data 部分复制到 RAM 并将 bss 部分清零的基本例程。但除此之外,我有点失落。

作为一个了解如何配置 GPIO 工作原理的小型实验,我想为板子制作一个程序,点亮连接到 GPIO 端口 B 引脚 7 的绿色 LED。阅读数据表,我得出结论,我需要做以下两件事:

  1. 将 GPIO 端口 B,引脚 7 配置为输出引脚
  2. 将所述引脚设置为高

但在这个地方,我比喻只见树木不见森林。我不确定我应该选择多种 IO 模式中的哪一种,所有这些首字母缩略词都让我感到困惑。我真的很感谢有人给我详细的信息、说明和可能的示例组装如何做到这一点。

0 投票
2 回答
1045 浏览

stm32l152 - 坚持使用 STM32L-Discovery 的基本编程

我有一个 STM32L-Discovery Board,它有一个 STM32L152R8 微处理器。我很难让基本的事情发挥作用。

我看过 ST 给出的例子(电流消耗触摸传感器和温度传感器),我认为它们对用户不友好,有这么多的库、子进程和中断,这使得代码真的很难理解。

我试图打开蓝色 LED (GPIO PB6),但我无法做到。

我的代码编译正确,但对电路板没有任何作用。这是“main.c”的代码。

我错过了什么吗?我能在某处找到真正基本的例子吗?

提前致谢!

0 投票
0 回答
1888 浏览

microcontroller - 如何在STM32L系列微控制器上覆盖闪存

我正在尝试在已写入的闪存之上编写一个已知模式(即 0xFFFFFFFF 或 0x00000000),以使原始文件系统的部分无效。但它在 STM32L 系列上对我不起作用,就像在 STM32F 系列上一样。

我习惯了 STM32F 系列微控制器,其中闪存被擦除为 0xFFFFFFFF 并用 0 写入。你可以写任何你想擦除记忆的东西,即

你可以在任何东西上写 0x00000000 (全零)

我现在用的是STM32L家族(低功耗),闪存完全不一样。它被擦除为 0x00000000,并用 1 写入。但是,我不知道如何可靠地编写所有的。例如,如果我擦除,我可以这样做

但如果我尝试

请注意,最终答案中有一个B。这不是全部。事实上,如果我将字节 0x00 到 0xFF 写入一个新擦除的内存页,然后在整个内存页上写入 0xFFFFFFFFFF,我会得到非常错误的结果:

这是我正在使用的伪代码(FlashWrite 是 STM std periph 库的包装器)。我尝试编写 8 次写入的模式,每次移位 <<1,这实际上给了我想要的(全部),但我不确定这是否可靠。

0 投票
1 回答
1401 浏览

memory-management - stm32 cortex-m3 内存重映射

我现在正在研究 stm32l152。

我的启动向量表位于 flash 上0x0800 0000,其中有一个有效的复位处理程序向量和堆栈指针。其余的异常/中断向量只是无限循环。然后我在 ram 中设置另一个向量表,从0x2000 0000. 该向量表将包含所有必要的向量。

我的问题是,在进行内存重新映射以映射0x0000 00000x2000 0000之后,当我的中断触发时,似乎 mcu 仍在寻找0x0800 0000. 我已经通过将闪存表中的相关向量更改为 ram 表中的相关向量来确认这一点。如果闪存表相关向量指向无限循环,我的程序将无限循环。另外,我通过写/读回一些内存位置来确认我的内存重映射是正确的0x0000 0000, 0x0800 0000, 0x2000 0000.

接下来,我使用另一种方法更改 mcu 中的 VTOR 以将向量表偏移0x2000 0000. 现在,它可以工作了,MCU 将在 ram 中找到向量。请注意,在此方法中,我没有进行任何上述内存重新映射。

我的问题是:我可以使用内存重映射来重新定位我的向量表(不更改 VTOR)吗?

内存重映射还有哪些其他用途?

我可以在运行时写入0x0000 0000(映射到0x0800 0000闪存)和修改闪存吗?

0 投票
1 回答
12447 浏览

stm32 - 为 I2C 配置 STM32 输出端口

我目前正在尝试让一对 stm32l152(发现套件)通过 I2C 进行通信。(我没有使用 STM 提供的标准外设库,因为我想尝试自己实现 i2c..)

我的配置如下:

  • 7位寻址模式(无双地址,只有OAR1)

  • 100khz 速度

  • 启用 ACK(在从机上)

  • ACK 禁用(在主机上,因为任何时候在主机/从机之间只传输 1 个字节)

  • 在主/从机上,使用 GPIOB (PB10) 作为 SCL 和 GPIOB (PB11) 作为 SDA

这是奇怪的部分:当我将 2 个 GPIOB 引脚配置为推挽式(无上拉/下拉)时,我可以看到我的主机在示波器上发出起始位、地址字节。

但是我的奴隶没有发回确认。我肯定知道这一点,因为主机没有在 SR1 中断言 ADDR 位,我在示波器上没有看到 ack,而且从机也没有进入中断(我在从机上启用了 I2C 事件中断)。

仔细观察示波器上的波形,我意识到信号(SCL、SDA)没有完全达到逻辑低电平的 0 伏,而是 1 伏。我猜这可能是为什么从机无法从主机读取地址字节,因此没有发回 ack。

所以我将 2 个 GPIO 引脚配置为漏极开路(无上拉/下拉)..但现在我的主控无法发送起始位..我单步执行代码并看到当我设置了 SR1 中主控的 SB 位设置开始位..但我没有看到示波器上的 SDA 和 SCL 信号有任何响应(两者都在 3V 时为高电平)。

(我在每条线上使用 10kohms 将 SCL 和 SDA 都拉到 3v)。

0 投票
0 回答
213 浏览

c - USB 中断屏蔽未加载 STM32L151CC

我目前遇到 STM USB 库的一个奇怪问题。我能够成功地将固件加载到 STM32L152D-EVAL 板(使用 STM32L152ZD)上,但是,我无法修改相同的代码以在使用上述 STM32L151CC 的外形板上工作。

在使用调试器(一个 ULINK2,使用 KEIL uVision4 IDE)单步执行代码后,我注意到在函数中设置中断掩码时代码会崩溃USB_SIL_Init()

更具体地说,_SetCNTR(wInterrupt_Mask);是什么给了我错误。我没有改变IMR_MSK两个板之间的值。它的值被给出为

#define IMR_MSK (CNTR_CTRM | CNTR_WKUPM | CNTR_SUSPM | CNTR_ERRM | CNTR_SOFM \ | CNTR_ESOFM | CNTR_RESETM )

这是0xBF00

_SetCNTR定义如下

随着CNTR被定义为

并且RegBase

我目前正在查看 STM 的相关文档,但我似乎找不到与两种不同芯片的默认状态相关的任何具体内容。我猜它与基地址有关,但是数据表显示这是正确的地址。

谁能帮我解决这个问题?

谢谢!

0 投票
3 回答
5737 浏览

embedded - 在重置皮质 m3 上保留一些 RAM 值

单击板上或 Kiel 上的重置按钮后,有什么方法可以保留一些 ram 值或全局变量

我正在使用 STM32L152ZE

0 投票
1 回答
5841 浏览

stm32 - PLL 时钟配置

我正在使用 STM32L152RB 板,我正在尝试将系统时钟配置为使用 PLL 时钟,但 RCC_FLAG_PLLRDY 标志正在设置,因此程序卡在 while 循环中。请让我做错了什么

0 投票
1 回答
2135 浏览

stm32 - 无法运行 STM32 L1 Discovery 板

我有新鲜的STM32 L1发现板,它似乎坏了。但我不完全确定。

当通过 USB 将开发板连接到 Linux 机器时,开发板完全正常启动,并且演示工作与供应商描述的一样。

但我无法真正连接到这块板。

电路板似乎已连接,用于在 ST-LINK 和 DISCOVERY 之间切换的大跳线 (CN3) 设置为 DISCOVERY。但是当我尝试使用我收到的 st-link 实用程序时。

OpenOCD 也无法与董事会对话。

板载芯片为STM32L152RCT6。我之前使用过 STM32F0..4 并且从未遇到过这样的问题,但是我之前没有使用过 L 系列,所以我不确定这是电路板问题还是我在这里跳过了一些重要的问题。

编辑:使用 OpenOCD 我发现不是预期的行为。在第一次运行时,我收到错误:

在第二次运行:

然后设备从系统中消失,dmesg留下消息:

我认为适配器速度可能存在问题,但我现在不确定。

EDIT2:我尝试使用 Windows ST Link Utility,但无法连接到电路板,电路板导致“检测错误”或“连接错误”,软件建议更改 SWD 频率或模式。我厌倦了几乎所有的组合,但没有一个有效。

EDIT3:如果这对某人有帮助,则板已被退回,我得到的信息表明它实际上已损坏并且我有新的。新的按预期完美运行。

0 投票
1 回答
375 浏览

stm32 - STM32L151 - 调试器在错误的地址启动..有时

我刚开始研究 STM32L151 微控制器。我已经将调试器设置为在第一条指令(不是主指令)处中断,但是当我开始调试时,程序计数器停止在 0x1ff00b84 处,这甚至不是闪存的一部分(从 0x8000000 -> 0x8010000 开始)。

它变得很奇怪,因为当我尝试重置调试会话(无需再次下载程序)时,它最终在我的启动文件(startup_stm32l1xx_md.s)中的第一条指令处停止并且一切运行顺利,直到下一次我需要对设备进行编程并再次启动调试器。

我将 CoIDE 与编译器“GNU Tools ARM Embedded 4.8 2014q2”一起使用。我在一些刚到货的定制硬件上运行。我使用 STM32 Discovery Board 的 SWD 对芯片进行编程。

希望有人有想法?