ST意法半导体
直播中

xymbmcu

13年用户 1124经验值
擅长:可编程逻辑
私信 关注
[问答]

请问STM32G473是否支持硬件AES?

STM32G473参考手册及数据手册中含有硬件AES相关内容及寄存器相关描述。但STM32G473xx.h中并无AES相关寄存器,pack版本已更新为最新。以地址方式直接赋值,Keil debug过程中查看AES外设赋值失败。STM32G473是否支持硬件AES?

回帖(2)

黎蔼焱

2025-3-12 15:15:27
应该可以确认STM32G473不支持硬件AES,STM32G483支持。
举报

倪山骋

2025-3-13 17:14:40

根据STM32G473的参考手册和数据手册,STM32G473确实支持硬件AES(高级加密标准)。硬件AES模块是STM32G4系列微控制器的一个特性,用于加速加密和解密操作。


关于你提到的在STM32G473xx.h头文件中没有找到AES相关寄存器的问题,可能是由于以下原因:




  1. 头文件版本问题:尽管你提到Pack版本已更新为最新,但有时头文件可能没有包含所有外设的寄存器定义。你可以检查头文件版本是否与最新的参考手册一致。




  2. 寄存器定义缺失:有时候,某些外设的寄存器定义可能没有被包含在标准头文件中。你可以尝试手动定义这些寄存器,或者检查是否有其他相关的头文件包含这些定义。




  3. 调试环境问题:在Keil调试过程中,直接通过地址方式赋值可能会遇到问题,尤其是在外设寄存器访问时。你可以尝试使用STM32CubeMX生成的代码来初始化AES外设,或者使用STM32 HAL库来访问AES寄存器。




  4. 硬件问题:确保你的硬件确实支持AES模块,并且没有硬件故障。




以下是一个简单的示例,展示如何通过地址方式访问AES寄存器:


#define AES_CR      (*(volatile uint32_t *)0x50060000)  // AES控制寄存器
#define AES_SR      (*(volatile uint32_t *)0x50060004)  // AES状态寄存器
#define AES_DINR    (*(volatile uint32_t *)0x50060008)  // AES数据输入寄存器
#define AES_DOUTR   (*(volatile uint32_t *)0x5006000C)  // AES数据输出寄存器

void AES_Init(void) {
    // 初始化AES模块
    AES_CR |= 0x00000001;  // 使能AES模块
}

void AES_Encrypt(uint32_t *data, uint32_t *result) {
    // 写入输入数据
    AES_DINR = data[0];
    AES_DINR = data[1];
    AES_DINR = data[2];
    AES_DINR = data[3];

    // 启动加密过程
    AES_CR |= 0x00000002;

    // 等待加密完成
    while (!(AES_SR & 0x00000001));

    // 读取输出数据
    result[0] = AES_DOUTR;
    result[1] = AES_DOUTR;
    result[2] = AES_DOUTR;
    result[3] = AES_DOUTR;
}

如果你仍然无法访问AES寄存器,建议你:



  • 检查STM32CubeMX生成的代码,看看是否有AES相关的初始化代码。

  • 使用STM32 HAL库来访问AES外设,这样可以避免直接操作寄存器带来的问题。

  • 确认你的硬件和软件环境都正确配置,并且没有其他潜在的问题。


如果问题依然存在,建议联系STMicroelectronics的技术支持,以获取进一步的帮助。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分