小编Gui*_*ean的帖子

关于STM32 HAL的质量和性能

我即将开始一个基于经典STM32L4的产品的新项目.我在ARM开发方面有很好的经验,但在STM32中则没有.我想知道STM32提供的STM32 HAL和低级驱动程序的质量和性能是什么(在STM32Cube包中).我想收集有关该主题的开发人员经验和反馈.基本上我想知道你是否对这段代码感到满意,或者相反如果你遇到一些问题,如果有些人因为某些原因开发了自己的驱动程序等等......谢谢!

arm stm32

8
推荐指数
3
解决办法
4365
查看次数

C99 中与调整参数相关的未定义行为

我不明白 C99 标准中的以下未定义行为:

函数定义中的调整参数类型不是对象类型 (6.9.1)

从标准来看,函数的参数需要在两种情况下进行调整:

  • 一个数组被调整为一个指针,
  • 并且将函数调整为指向函数的指针。

在第二种情况下,函数的调整参数确实不是对象(据我所知,标准区分了对象和函数):

标识符可以表示一个对象;一个函数;一个标签或一个结构的成员,联合...

您能否澄清这一点并提供此类 UB 的示例?

c c99 undefined-behavior language-lawyer implicit-conversion

7
推荐指数
1
解决办法
130
查看次数

在 Nucleo STM32 板上设置 SWV printf

我正在使用 Atollic Truestudio IDE(基本上是 Eclipse)在各种 STM32L4 Nucleo 板上开发固件。到目前为止,我一直通过 UART 使用 printf,这要归功于虚拟 COM 端口。

我想使用 STM32 ITM 迁移到 printf。

更准确地说,我致力于 Nucleo-L4A6ZG。调试是通过 gdb 服务器进行的。

在 Atollic 上,我修改了调试配置以启用核心时钟为 80MHz 的 SWV。我按照 STM32L4 参考手册中的描述修改了启动脚本,如下所示。我不确定这是必要的,因为 TrueStudio/Eclipse 允许从 GUI 设置 SWV,但这种方式似乎更容易:

# Set character encoding
set host-charset CP1252
set target-charset CP1252

# Reset to known state
monitor reset

# Load the program executable
load        

# Reset the chip to get to a known state. Remove "monitor reset" command 
#  if the code is not located at …
Run Code Online (Sandbox Code Playgroud)

debugging arm stm32 nucleo

5
推荐指数
1
解决办法
8770
查看次数

清除STM32上中断标志的正确方法

我正在STM32L4上开发裸机项目,并且从现有代码库开始。

ISR已通过以下方式实现:

  1. 读取外设中的中断状态,以了解引起中断的事件
  2. 做点什么
  3. 清除开始时已读取的标志。

是清除标志的正确方法吗?不应该在ISR的一开始就清除标志吗?我的理解是,如果在步骤2中第二次发生相同的外围事件,它将不会引发第二个IRQ,因此它将丢失。另一方面,如果您尽快清除该标志,则第二个事件将使该中断产生脉冲,该中断的CPU状态将变为“待处理且活动”:将发生第二个IRQ。

PS:从《 STM32处理器编程手册》中,我读到:“ STM32中断既对电平敏感又对脉冲敏感”。

arm interrupt stm32 isr

3
推荐指数
1
解决办法
1474
查看次数

GNU LD 链接器脚本 - 堆栈放置

这是我的 STM32L476 链接器脚本:

/* Generate a link error if heap and stack don't fit into RAM */
__heap_size = 0x200;;      /* required amount of heap  */
__stack_size = 0x800;; /* required amount of stack */

/* Specify the memory areas */
MEMORY
{
    FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K
    RAM (rwx)  : ORIGIN = 0x20000000, LENGTH = 96K
}

/* Define output sections */
SECTIONS
{
  /* The startup code goes first into FLASH */
  .default_exceptions : …
Run Code Online (Sandbox Code Playgroud)

gcc arm gnu stm32 ld

2
推荐指数
1
解决办法
6502
查看次数

STM32 上 AES 密钥派生和存储的良好实践

我正在 STM32L4x6 上开发一个设备。它通过 BLE 连接到智能手机并与其交换加密数据。

加密是 AES-GCM,我使用的是 STMicro 提供的参考实现。

我在 Curve25519 上使用 Diffie-Hellman 协议实现了共享秘密交换机制。现在我直接使用这个共享密钥作为 AES 密钥。

然而我对两点感到困惑:

  • 我想我必须从共享密钥中派生出会话密钥,但我不太明白如何实现。
  • 关于STM32上的密钥存储,常见/最佳实践是什么?将密钥存储在闪存中并将闪存设置为读保护级别 1 是否足够?

谢谢

cryptography aes stm32

2
推荐指数
1
解决办法
3221
查看次数

在C中对无符号强制转换是否更改位值

我做了一些快速测试,一个signed intunsigned int用C投不改变位值(上的在线调试器)。

我想知道的是它是由C标准保证还是仅由普通(但不是100%肯定)行为保证?

c integer casting

2
推荐指数
1
解决办法
73
查看次数