问题标签 [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.
stm32 - 在应用程序编程问题中
我正在研究 STM32L152RCT6 上的项目,我必须建立一种机制来从新的门控文件(HEX 文件)中自我更新代码。为此,我已经实现了诸如引导加载程序之类的机制,它在其中检查新固件是否必须交叉验证,如果发现有效,则必须存储在“应用程序位置”上。
我正在采取以下步骤。
- 引导加载程序地址 = 0x08000000
- 应用地址 = 0x08008000
- 在指定位置的某个地方,它必须通过引导加载程序检查新文件。
- 如果发现有效,则必须在位置复制所有十六进制(根据指南)。
- 比通过在该位置跳转来运行应用程序代码。
现在问题来自第 5 步,我已经完成的所有上述步骤,甚至数据的存储都已正确完成(在 STM32 实用程序中验证),但是当我跳转到应用程序代码时它不会工作。
有我必须交叉检查或我遗漏的东西吗?
stm32 - 备份或读取核板 stm32 的设置
我想知道是否可以备份或读取核板 stm32 的设置。它被设置为 P-NUCLEO-LRWAN1 Nucleo 包。它使用 LoRaWAN 将数据发送到网关,并且运行良好。我现在想知道是否可以更改配置(例如 lora 设置、数据格式等)。
我已经尝试过使用 stm32 st-link 实用程序和 Keil IDE。但他们只会刷写或擦除电路板。我不知道怎么读。
我没有这方面的任何背景,所以细节会很棒。如果我用了错误的词来描述事物,我深表歉意。谢谢!
stm32 - STM32L0xx:获取时钟速度
对于我的一生,我找不到在 libopencm3 中获得 STM32L0 芯片时钟速度的方法。总有办法吧?
- 在 STM32Cube 中,有
SystemCoreClock
变量。 - 在 ChibiOs 中,存在
STM32_SYSCLK
变量。
在 libopencm3 中是否没有变量或函数可以获取此值?
makefile - 如何使用llvm生成的汇编语言打开stm32板上的LED?
我的英语水平很差,因为我不是以英语为母语的人。敬请谅解。
我用 LLVM infra 编译了一些在 IAR 中运行良好的测试代码,但生成的代码没有在我的测试板上运行。详情如下。
测试目标
我想看看使用 LLVM 生成的汇编代码的操作。
测试环境
- 单片机:STM32L152VD(Cortex M3)
- IDE:IAR 8.2
- 调试器:Segger JLink
- LLVM 网站:http ://ellcc.org/demo/index.cgi
测试步骤(总结)
- 创建在 IAR 中可以正常运行的测试代码。
- 将测试代码移至http://ellcc.org/demo/index.cgi并选择 Target 后编译。
- 使用生成的汇编代码创建 test.s 文件。
- 创建 makefile 生成 bin 文件并使用 make 程序执行 makefile。
- 使用 JLink 程序将 bin 文件加载到目标板。
第1步
我编写了没有库的简单代码,如下所示。此代码简单地打开 LED。
上面的代码在 IAR 中是正确的。
第2步
我将创建的测试代码移至http://ellcc.org/demo/index.cgi并在选择选项后按下编译按钮,如下所示。
第 3 步
我使用在站点中生成的汇编代码创建了 test.s 文件,如下所示。
第4步
我创建了makefile来生成bin文件,如下所示。这是makefile的内容。
我用make程序执行了上面的makefile,我得到了一个test.o、test.elf、test.bin文件。
第 5 步
我用 JLink.exe (seggar) 加载了 bin 文件并使用 go 命令执行,但注意到发生在船上。(我在加载 bin 文件时使用的命令是“loadbin C:\backend\files\test.bin, 0x08000000”)
结论
到这里就是我所做的一切。我按照上面的方法做了,但是 LLVM infra 生成的汇编代码与 IAR 生成的代码不同。我想知道我做错了什么以及如何解决以实现目标。任何帮助将不胜感激。
谢谢。
添加信息
船上没有像 RTOS 这样的软件。下图是我用来测试的整个结构。 只有 main.cpp 文件是源代码。其他文件由 EWARM IDE 生成。
地图文件的内容如下。
icf文件的内容如下。
在 EWARM 工具中,我使用 JLink 调试器上传了上述源代码。JLink 调试器和我的板子的连接如图。
我还尝试手动上传由 EWARM 工具生成的 bin 文件(不使用 EWARM 功能),如下所示。
以下方法与 LLVM 生成的上传 bin 文件的方法相同。结果,EWARM bin 文件是 LED 亮起,但 llvm 文件不是。
我在上传 EWARM bin 文件和上传 LLVM bin 文件时检查了不同的寄存器值。(PC、SP、MSP)
以下是上传 EWARM bin 文件后起始点的寄存器值。(这是操作)
以下是上传 LLVM bin 文件后起始点的寄存器值。(这个不操作)
我认为这个问题的原因是程序计数器(主)堆栈指针的值不正确。如果这个推断是对的,那么如何配置第一次的寄存器值呢?
如果需要其他信息,请告诉我。我要认真解决这个问题。
c - 如何使用 stm32l1 CRC 单元计算 1 字节的 CRC
我正在尝试使用 stm32l152 的 CRC 计算单元计算一字节数据输入的 CRC。
CRC 单元仅接受 32 位输入。我能够让它计算 32 位数据输入的 CRC,但现在我正在努力让它为字节数据输入工作。
我的测试输入数据是0x20
,我期望输出0xD62B0954
CRC 参数:多项式0x04C11DB7
,init-val:0xFFFFFFFF
我该如何解决这个问题,我的想法不多了?
32位数据的示例代码:
我还找到了这个代码片段,用于按字节计算 CRC,但输出不同。
我使用上面的代码和提供的 crc 得到以下输出0xFFFFFFFF
:0xC491DF37
我不太了解该crc32_step
功能的作用,但我什至不确定这是否是正确的方向。我将不胜感激任何提示或想法。
rust - 为 STM32 微控制器板使用 Rust crates
我目前正在尝试学习 Rust(专门用于嵌入式),来自嵌入式系统的 C 和 Python 的背景。到目前为止,我一直在阅读Rust Programming Language和Rust for Embedded,并阅读了网络上的一些博客文章。
我希望我的第一个项目是一个简单的“Blinky”,其中 LED 无限闪烁。我有一个 STM32L152CDISCOVERY 板,里面有一个 STM32L152 芯片(基本上与 STM32L151 相同),它是一个 Cortex M3。
我不想从头开始实现所有东西,而是想利用现有的 crate 和 HAL。我发现了两个看起来很有希望的:stm32l1和stm32l1xx-hal。我已经尝试阅读它们中的每一个的文档以及部分源代码,但我仍然无法弄清楚如何正确使用它们。
有几个关于 Rust 和 crates 的问题:
我看到它
stm32l1xx-hal
依赖于stm32l1
. 我是否需要将两者都添加为我的Cargo.toml
文件中的依赖项?还是会产生与所有权相关的问题?这是添加它们的正确方法吗?为什么第二个是这样添加的
[dependencies.stm32l1]
?要使 LD4(连接到
PB4PB6)闪烁,我必须启用 RCC 寄存器中的 GPIOB,然后将引脚配置为推挽输出。通过检查 的文档stm32l1xx-hal
,我看到有一个RCC 结构和一个PB4 结构与方法into_push_pull_output
。但是,我仍然不明白如何使用这些结构:如何导入它们或如何获取它们的实例。
我看过代码示例,stm32l1
但没有stm32l1xx-hal
。我知道我可以这样做:
但是在我的源代码中stm32l1xx-hal
我看到 RCC 部分已经完成impl GpioExt for $GPIOX
,但我不知道如何获得这个“部件”功能。
任何为我指明正确方向的帮助表示赞赏。
arrays - 将数组写入 uint16_t 的闪存。我正在使用 STM32L053 核。,得到一个硬故障错误。如何将 uint16_t 数组转换为写入闪存?
这就是我尝试写入闪存的方式
基本上我将我的 uint16_t 数组传递给一个名为 FLASH_WriteA 的函数,该函数接受数组、目标数组或位置和长度