我即将开始一个基于经典STM32L4的产品的新项目.我在ARM开发方面有很好的经验,但在STM32中则没有.我想知道STM32提供的STM32 HAL和低级驱动程序的质量和性能是什么(在STM32Cube包中).我想收集有关该主题的开发人员经验和反馈.基本上我想知道你是否对这段代码感到满意,或者相反如果你遇到一些问题,如果有些人因为某些原因开发了自己的驱动程序等等......谢谢!
我不明白 C99 标准中的以下未定义行为:
函数定义中的调整参数类型不是对象类型 (6.9.1)
从标准来看,函数的参数需要在两种情况下进行调整:
在第二种情况下,函数的调整参数确实不是对象(据我所知,标准区分了对象和函数):
标识符可以表示一个对象;一个函数;一个标签或一个结构的成员,联合...
您能否澄清这一点并提供此类 UB 的示例?
c c99 undefined-behavior language-lawyer implicit-conversion
我正在使用 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) 我正在STM32L4上开发裸机项目,并且从现有代码库开始。
ISR已通过以下方式实现:
是清除标志的正确方法吗?不应该在ISR的一开始就清除标志吗?我的理解是,如果在步骤2中第二次发生相同的外围事件,它将不会引发第二个IRQ,因此它将丢失。另一方面,如果您尽快清除该标志,则第二个事件将使该中断产生脉冲,该中断的CPU状态将变为“待处理且活动”:将发生第二个IRQ。
PS:从《 STM32处理器编程手册》中,我读到:“ STM32中断既对电平敏感又对脉冲敏感”。
这是我的 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) 我正在 STM32L4x6 上开发一个设备。它通过 BLE 连接到智能手机并与其交换加密数据。
加密是 AES-GCM,我使用的是 STMicro 提供的参考实现。
我在 Curve25519 上使用 Diffie-Hellman 协议实现了共享秘密交换机制。现在我直接使用这个共享密钥作为 AES 密钥。
然而我对两点感到困惑:
谢谢
我做了一些快速测试,一个signed int以unsigned int用C投不改变位值(上的在线调试器)。
我想知道的是它是由C标准保证还是仅由普通(但不是100%肯定)行为保证?