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位数据? 展开
用
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位数据? 展开
1个回答
展开全部
如果你用的是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 广告
2023-06-12 广告
Linux 嵌入式系统中,USB 启动模式能够烧写 ARM 的 uboot 的原因主要有以下几个方面:1. USB 启动模式相对于传统的 BIOS 启动模式来说,具有更高的兼容性和灵活性,可以支持更多的硬件设备和操作系统。2. USB 启动...
点击进入详情页
本回答由浙江启扬智能科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询