问题标签 [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.
assembly - 如何在 STM32L152 上配置 GPIO 引脚?
我有一个 STM32L 发现板,其中包含一个 stm32l152rb 微处理器。我尝试在没有任何库的情况下在汇编中对该板进行编程。到目前为止,我成功地编写了链接器脚本和一个将 .data 部分复制到 RAM 并将 bss 部分清零的基本例程。但除此之外,我有点失落。
作为一个了解如何配置 GPIO 工作原理的小型实验,我想为板子制作一个程序,点亮连接到 GPIO 端口 B 引脚 7 的绿色 LED。阅读数据表,我得出结论,我需要做以下两件事:
- 将 GPIO 端口 B,引脚 7 配置为输出引脚
- 将所述引脚设置为高
但在这个地方,我比喻只见树木不见森林。我不确定我应该选择多种 IO 模式中的哪一种,所有这些首字母缩略词都让我感到困惑。我真的很感谢有人给我详细的信息、说明和可能的示例组装如何做到这一点。
stm32l152 - 坚持使用 STM32L-Discovery 的基本编程
我有一个 STM32L-Discovery Board,它有一个 STM32L152R8 微处理器。我很难让基本的事情发挥作用。
我看过 ST 给出的例子(电流消耗触摸传感器和温度传感器),我认为它们对用户不友好,有这么多的库、子进程和中断,这使得代码真的很难理解。
我试图打开蓝色 LED (GPIO PB6),但我无法做到。
我的代码编译正确,但对电路板没有任何作用。这是“main.c”的代码。
我错过了什么吗?我能在某处找到真正基本的例子吗?
提前致谢!
microcontroller - 如何在STM32L系列微控制器上覆盖闪存
我正在尝试在已写入的闪存之上编写一个已知模式(即 0xFFFFFFFF 或 0x00000000),以使原始文件系统的部分无效。但它在 STM32L 系列上对我不起作用,就像在 STM32F 系列上一样。
我习惯了 STM32F 系列微控制器,其中闪存被擦除为 0xFFFFFFFF 并用 0 写入。你可以写任何你想擦除记忆的东西,即
你可以在任何东西上写 0x00000000 (全零)
我现在用的是STM32L家族(低功耗),闪存完全不一样。它被擦除为 0x00000000,并用 1 写入。但是,我不知道如何可靠地编写所有的。例如,如果我擦除,我可以这样做
但如果我尝试
请注意,最终答案中有一个B。这不是全部。事实上,如果我将字节 0x00 到 0xFF 写入一个新擦除的内存页,然后在整个内存页上写入 0xFFFFFFFFFF,我会得到非常错误的结果:
这是我正在使用的伪代码(FlashWrite 是 STM std periph 库的包装器)。我尝试编写 8 次写入的模式,每次移位 <<1,这实际上给了我想要的(全部),但我不确定这是否可靠。
memory-management - stm32 cortex-m3 内存重映射
我现在正在研究 stm32l152。
我的启动向量表位于 flash 上0x0800 0000
,其中有一个有效的复位处理程序向量和堆栈指针。其余的异常/中断向量只是无限循环。然后我在 ram 中设置另一个向量表,从0x2000 0000
. 该向量表将包含所有必要的向量。
我的问题是,在进行内存重新映射以映射0x0000 0000
到0x2000 0000
之后,当我的中断触发时,似乎 mcu 仍在寻找0x0800 0000
. 我已经通过将闪存表中的相关向量更改为 ram 表中的相关向量来确认这一点。如果闪存表相关向量指向无限循环,我的程序将无限循环。另外,我通过写/读回一些内存位置来确认我的内存重映射是正确的0x0000 0000
, 0x0800 0000
, 0x2000 0000
.
接下来,我使用另一种方法更改 mcu 中的 VTOR 以将向量表偏移0x2000 0000
. 现在,它可以工作了,MCU 将在 ram 中找到向量。请注意,在此方法中,我没有进行任何上述内存重新映射。
我的问题是:我可以使用内存重映射来重新定位我的向量表(不更改 VTOR)吗?
内存重映射还有哪些其他用途?
我可以在运行时写入0x0000 0000
(映射到0x0800 0000
闪存)和修改闪存吗?
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)。
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 的相关文档,但我似乎找不到与两种不同芯片的默认状态相关的任何具体内容。我猜它与基地址有关,但是数据表显示这是正确的地址。
谁能帮我解决这个问题?
谢谢!
embedded - 在重置皮质 m3 上保留一些 RAM 值
单击板上或 Kiel 上的重置按钮后,有什么方法可以保留一些 ram 值或全局变量
我正在使用 STM32L152ZE
stm32 - PLL 时钟配置
我正在使用 STM32L152RB 板,我正在尝试将系统时钟配置为使用 PLL 时钟,但 RCC_FLAG_PLLRDY 标志正在设置,因此程序卡在 while 循环中。请让我做错了什么
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:如果这对某人有帮助,则板已被退回,我得到的信息表明它实际上已损坏并且我有新的。新的按预期完美运行。
stm32 - STM32L151 - 调试器在错误的地址启动..有时
我刚开始研究 STM32L151 微控制器。我已经将调试器设置为在第一条指令(不是主指令)处中断,但是当我开始调试时,程序计数器停止在 0x1ff00b84 处,这甚至不是闪存的一部分(从 0x8000000 -> 0x8010000 开始)。
它变得很奇怪,因为当我尝试重置调试会话(无需再次下载程序)时,它最终在我的启动文件(startup_stm32l1xx_md.s)中的第一条指令处停止并且一切运行顺利,直到下一次我需要对设备进行编程并再次启动调试器。
我将 CoIDE 与编译器“GNU Tools ARM Embedded 4.8 2014q2”一起使用。我在一些刚到货的定制硬件上运行。我使用 STM32 Discovery Board 的 SWD 对芯片进行编程。
希望有人有想法?