问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Qemu-STM32(三):STM32F407加入系统配置控制器(SYSCFG)

创作时间:
作者:
@小白创作中心

Qemu-STM32(三):STM32F407加入系统配置控制器(SYSCFG)

引用
CSDN
1.
https://m.blog.csdn.net/yanl1229/article/details/145625386

本文详细描述了如何在Qemu中为STM32F407添加System Configuration Controller控制器的模拟代码。通过具体的步骤和代码示例,帮助开发者完成这一技术实现。

概述

本文主要描述了Qemu中,如何在STM32F407中添加System Configuration Controller控制器模拟代码。

板子截图:

参考资料

STM32F4XX TRM手册,手册编号:RM0090

添加步骤

1、在hw/arm/Kconfig文件中添加STM32F4XX_SYSCFG,如下所示:

config STM32F407_SOC
    bool
    select ARM_V7M
    select OR_IRQ
    select STM32F4XX_SYSCFG  

2、在include/hw/arm/stm32f407_soc.h文件中

a.包含实现头文件

#include "hw/misc/stm32f4xx_syscfg.h"  

b. 设置syscfg控制器的地址空间和中断号

#define SYSCFG_BASE_ADDRESS 0x40013800
#define SYSCFG_IRQ  71  

c. 在struct STM32F407State结构体中添加syscfg

STM32F4xxSyscfgState syscfg;  

3、在hw/arm/stm32f407_soc.c文件中添加如下代码片段

a. 在stm32f407_soc_initfn函数中,初始化syscfg控制器

    sysbus_init_child_obj(obj, "syscfg", &s->syscfg, sizeof(s->syscfg),
                          TYPE_STM32F4XX_SYSCFG);  

b. 在stm32f407_soc_realize函数中,初始化syscfg控制器的地址空间和中断号

    /* System configuration controller */
    dev = DEVICE(&s->syscfg);
    object_property_set_bool(OBJECT(&s->syscfg), true, "realized", &err);
    if (err != NULL) {
        error_propagate(errp, err);
        return;
    }
    busdev = SYS_BUS_DEVICE(dev);
    sysbus_mmio_map(busdev, 0, SYSCFG_BASE_ADDRESS);
    sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, SYSCFG_IRQ));  

总结

1、本文描述了如何在qemu中, 在stm32f407平台上添加System Configuration Controller控制器实现;

2、因为qemu的源码库已经加入了syscfg的实现代码,因为这里只描述了添加步骤

3、完整的提交记录,请查看代码库链接

链接:

1、qemu代码库链接

yanl1229/qemu-5.0

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号