学习D15

装饰器

讲装饰器前 先说引用

函数作为参数和返回值不用加 括号,加了括号就是函数的调用

闭包函数

就是在函数的内部 定义了一个函数 并且这个函数用到了外面这个函数的变量

那么这个函数以及用到的一些变量称之为闭包

例子:

def hi():
    return "hi yasoob!"
 
def doSomethingBeforeHi(func):
    print("I am doing some boring work before executing hi()")
    print(func())
 
doSomethingBeforeHi(hi)
#outputs:I am doing some boring work before executing hi()
#        hi yasoob!
代码来源:https://www.runoob.com/w3cnote/python-func-decorators.html

nonlocal 声明局部变量

LEGB原则

L = local 本地作用域 就是局部变量

E = Enclosure 闭包所在作用域

G = Global 全局变量

B = built-in 内置

开放封闭原则,

已经实现的原则不允许被修改,可以被扩展

装饰器的使用:

def wrapper(func):
    print('进入装饰器')
    def inner():
        print('真正执行装饰')
        func()
    print('装饰已经完成')
    return inner

@wrapper
def info():
    print('这是被装饰的函数')

print('#######通过装饰器调用#########')
info()
###########去掉@wrapper进行装饰#############
# ret = wrapper(info)
# ret()
<think>好的,用户的问题是关于STM32的FSMC模块中D0-D15数据线的使用方法和引脚定义。我需要根据提供的引用资料来整理回答。 首先,查看引用资料,特别是引用[1]提到FSMC驱动外部SRAM时使用了数据线D0-D15,以及控制信号如读、写、片选等。引用[3]也提到FSMC外设支持模式A来控制SRAM,这可能涉及数据线的配置。 接下来,用户需要知道D0-D15的引脚定义。STM32的FSMC数据线通常对应到特定的GPIO端口,比如D0-D15可能分布在不同的GPIO组上,例如PD、PE等。需要指出具体的引脚对应关系,可能需要查阅数据手册,但根据常见配置,给出例子,如D0对应PD14等。 然后是关于使用方法,包括硬件连接和软件配置。硬件部分需要连接SRAM或其他存储器的数据线到对应的D0-D15,并注意电源和地线。软件配置方面,需要初始化GPIO为复用推挽输出,配置FSMC的时序参数,如地址建立时间、数据建立时间等,如引用[2]中的结构体所示,以及设置访问模式为模式A(引用[3])。 另外,可能需要注意数据宽度,例如16位模式下使用D0-D15,而8位可能只用D0-D7。还要考虑字节控制信号UB/LB的使用(引用[1])。 最后,生成相关问题,涵盖FSMC的其他模式、时序优化、地址线扩展、与外部SRAM的差异等,帮助用户进一步学习。</think>### FSMC D0-D15 数据线使用方法与引脚定义 #### 1. **功能定义** FSMC(Flexible Static Memory Controller)的 D0-D15 是 16 位数据总线,用于在 STM32 微控制器与外部存储器(如 SRAM、NOR FLASH)之间传输数据。 - **数据宽度**:支持 8 位或 16 位模式。例如,16 位模式下使用 D0-D15,8 位模式下仅需 D0-D7[^1]。 - **双向传输**:支持读写操作,由 FSMC 的 `WE`(写使能)和 `RD`(读使能)信号控制方向。 #### 2. **引脚定义** D0-D15 对应 STM32 的特定 GPIO 引脚,具体分配取决于芯片型号和封装。以 STM32F4 系列为例: - **D0**: PD14 - **D1**: PD15 - **D2**: PD0 - **D3**: PD1 - **D4**: PE7 - **D5**: PE8 - **D6**: PE9 - **D7**: PE10 - **D8**: PE11 - **D9**: PE12 - **D10**: PE13 - **D11**: PE14 - **D12**: PE15 - **D13**: PD8 - **D14**: PD9 - **D15**: PD10 具体需参考芯片数据手册确认引脚映射。 #### 3. **使用方法** **硬件连接**: - 将外部存储器的数据线(如 SRAM 的 D0-D15)与 STM32 的 D0-D15 引脚一一对应连接。 - 确保 `WE`(写信号)、`RD`(读信号)、`CS`(片选信号)等控制线正确连接。 **软件配置**: 1. **GPIO 初始化**: 将相关 GPIO 设置为复用推挽输出模式(AF_PP),复用功能选择 FSMC。 ```c GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); // 初始化 D0-D15 对应的 GPIO ``` 2. **FSMC 时序配置**: 根据外部存储器时序要求设置 FSMC 参数(模式 A 用于 SRAM)[^3]: ```c FSMC_NORSRAMTimingInitTypeDef Timing; Timing.FSMC_AddressSetupTime = 1; // 地址建立时间(HCLK周期) Timing.FSMC_DataSetupTime = 2; // 数据建立时间 Timing.FSMC_AccessMode = FSMC_AccessMode_A; // 模式 A FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &Timing; ``` 3. **数据读写示例**: ```c // 写入数据到 SRAM 地址 0x60000000 *(__IO uint16_t*)0x60000000 = 0x1234; // 从 SRAM 读取数据 uint16_t data = *(__IO uint16_t*)0x60000000; ``` #### 4. **注意事项** - **数据对齐**:16 位模式下,访问地址需按 2 字节对齐。 - **字节控制**:若使用 8 位模式,需通过 `UB/LB` 信号控制高/低字节[^1]。 - **时序匹配**:需根据存储器手册调整 `FSMC_DataSetupTime` 等参数[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值