Keil环境下开发STM32问题

对FMSC的NAND数据读操作时用data=*(u32*)(Bank_NAND_ADDR|DATA_AREA);或data=*(u8*)(Bank_NAND_ADDR|D... 对FMSC的NAND数据读操作时



data=*(u32*)(Bank_NAND_ADDR|DATA_AREA);


data=*(u8*)(Bank_NAND_ADDR|DATA_AREA);
如何才能在STM32内部读数据时指明是读8位还是16位的呢?
补充一下:如果FSMC的bank2接了一片8位的NAND,当要读一个32位的数据时,AHB总线是如何告之FSMC我要的是32位数据而不是8位数据?
展开
 我来答
追悔七年
2013-11-06 · TA获得超过587个赞
知道小有建树答主
回答量:251
采纳率:66%
帮助的人:266万
展开全部

如果你用的是STM32的库函数,那么在初始化的时候就指定了,给你看看我的初始化

    /*-- FSMC Configuration ----------------------------------------------------*/
    cst.FSMC_SetupTime = 1;         //数据建立时间
    cst.FSMC_WaitSetupTime = 4;     //数据保持时间
    cst.FSMC_HoldSetupTime = 1;     //CE保持时间
    cst.FSMC_HiZSetupTime = 0;      //数据总线高阻时间

    ast = cst;

    FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND; //使用FSMC BANK2
#ifdef NAND_USE_INTERRUPT
    FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Disable; //禁止FSMC的等待功能
#else
    FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Enable; //使能FSMC的等待功能
#endif // NAND_USE_INTERRUPT
    FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; //NAND Flash的数据宽度为8位
    FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable;                  //使能ECC特性
    FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_512Bytes; //ECC页大小512
    FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 1;             
    FSMC_NANDInitStructure.FSMC_TARSetupTime = 1;
    FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &cst;
    ast.FSMC_HoldSetupTime = 15;     //属性空间CE保持时间
    FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = *

    FSMC_NANDInit(&FSMC_NANDInitStructure);

其中“FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; //NAND Flash的数据宽度为8位 ”这句就是指定位宽

更多追问追答
追问
谢谢,你可能没有理解我意思,我想知道内核是如何通知FSMC模块我要的是32位数据还是8位数据,或则data=*(u32*)(Bank_NAND_ADDR|DATA_AREA);
这条指令被KEIL汇编成了四条指令?我想知道的是为什么通过一条C语言指令就能控制FSMC来输出32为的数据。其实还是对STM32内部电路的理解。
追答
首先你要知道,FSMC被映射到一段内存地址上,你可以直接把NAND认为是内存,data=*(u32*)(Bank_NAND_ADDR|DATA_AREA)这句话,是把Bank_NAND_ADDR|DATA_AREA这个地址强制转换为32为的指针,就相当于是在内存中读一个32位整数一样。
浙江启扬智能科技有限公司
2023-06-12 广告
Linux 嵌入式系统中,USB 启动模式能够烧写 ARM 的 uboot 的原因主要有以下几个方面:1. USB 启动模式相对于传统的 BIOS 启动模式来说,具有更高的兼容性和灵活性,可以支持更多的硬件设备和操作系统。2. USB 启动... 点击进入详情页
本回答由浙江启扬智能科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式