完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我目前正在使用带有STM32h743 MCU Nucleo板的外部16位SRAM芯片,使用FMC对外部SRAM进行内存操作。在表 154(NOR/PSRAM 外部存储器地址,第 806 页)和随附的脚注中,指出发布到外部存储器的地址将向右移动一位。我在一些与外部 SRAM 访问相关的论坛帖子中也看到了这一点。但是,通过尝试一些操作,我可以确认这似乎不是真的。
的 请参阅下面的代码: ``` uint32_t 数据 = 0x45674567; *(uint32_t *) (MRAM_BANK_ADDR | 0x10<<1) = 数据; HAL_延迟(1000); printf("前 2 个字节:0x%4xn", *(uint16_t *) (MRAM_BANK_ADDR | 0x10<<1)); printf("最后 2 个字节:0x%4xn", *(uint16_t *) (MRAM_BANK_ADDR | 0x10 <<1 | 0x02)); printf("带位移的最后 2 个字节:0x%4xn", *(uint16_t *) (MRAM_BANK_ADDR | 0x12 <<1)); printf("整个读取:0x%8lxn", *(uint32_t *) (MRAM_BANK_ADDR | 0x10<<1)); 数据 = 0x78907890; *(uint32_t *) (MRAM_BANK_ADDR | 0x10<<1 | 0x04) = 数据; printf("前 2 个字节:0x%4xn", *(uint16_t *) (MRAM_BANK_ADDR | 0x10 <<1 | 0x04)); printf("最后 2 个字节:0x%4xn", *(uint16_t *) (MRAM_BANK_ADDR | 0x10 <<1 | 0x06)); ``` 的 输出: ``` 前 2 个字节:0x4567 最后 2 个字节:0x4567 带位移的最后 2 个字节:0x7890 整个读取:0x45674567 前 2 个字节:0x7890 最后 2 个字节:0x7890 ``` 的 当应用手册中描述的移位时,输出不正确。事实上,访问第二组 2 个字节不需要移位。这似乎也适用于写作。 这是手册中的错误,还是我误解了所写的内容? 的 的 |
|
相关推荐
1个回答
|
|
> 是的,脚注指出内存芯片上的 A0 应该始终连接到 MCU FMC_A0,对吗?
是的。 > 然而,我的问题是表本身表示用于访问内存的内存地址在实际访问内存之前向右移动了 1 位。 是的,这就是硬件为您所做的。 > IE 如果我写入最后一个字节为:0000 0000 0000 0001 的地址,它实际上会访问内存 0x0 地址,因为 1 被移出,不是吗? 在 16 位内存的情况下,它将地址位 1..N 输出到引脚 A0..N-1,它将地址位 0 解码为字节通道信号。因此,在这种特殊情况下,所有地址引脚都将为 0,NBL0=1 和 NBL1=0(请注意字节通道信号为低电平有效,这就是它们的标记以 N 开头的原因)。 阅读内存的数据表。字节通道信号可以称为/UB/LB 或类似名称。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2649 浏览 1 评论
3213 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1787 浏览 1 评论
3617 浏览 6 评论
5996 浏览 21 评论
944浏览 4评论
1318浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
589浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1307浏览 3评论
1367浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 00:40 , Processed in 1.183675 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号