完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F407VET6 FSMC接口驱动 DM9000的问题,PD7 接做为片选,PD11做为指令与数据的
代码如下: #define DM9000_DATA *(vu16*)((u32)0x60000000) #define DM9000_CMD *(vu16*)((u32)0x60020000) /******************************************************************************* * 函数名: DM9000AE_CtrlLinesConfig * 参 数: 无 * 返 回: 无 * 功 能: 配置DM9000AE控制口线,FSMC管脚设置为复用功能 */ static void DM9K_CtrlLinesConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure; /* FSMC GPIO configure */ RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); /* Enable GPIOs clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF, ENABLE); /* Enable FSMC clock */ /* GPIOD configuration */ GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC); // D2 GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC); // D3 GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC); // NOE GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC); // WE GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC); // D13 GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC); // D14 GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC); // D15 GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC); // D0 GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC); // D1 /* GPIOE configuration */ GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC); /* GPIOF configuration */ GPIO_PinAFConfig(GPIOD, GPIO_PinSource7 , GPIO_AF_FSMC); // CS---DM9000_CS GPIO_PinAFConfig(GPIOD, GPIO_PinSource11 , GPIO_AF_FSMC); // A16---CMD GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init(GPIOD, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init(GPIOE, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_11; GPIO_Init(GPIOD, GPIO_InitStructure); } /******************************************************************************* * 函数名: DM9K_FSMCConfig * 参 数: 无 * 返 回: 无 * 功 能: 配置FSMC并口访问时序 */ static void DM9K_FSMCConfig(void) { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructure; /*-- FSMC Configuration ------------------------------------------------------*/ /*----------------------- SRAM Bank 2 ----------------------------------------*/ /* FSMC_Bank1_NORSRAM4 configuration */ FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 15; FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 10; FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 50; FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 10; FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0; FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0; FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; /* Color LCD configuration ------------------------------------ LCD configured as follow: - Data/Address MUX = Disable - Memory Type = SRAM - Data Width = 16bit - Write Operation = Enable - Extended Mode = Enable - Asynchronous Wait = Disable */ FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = FSMC_NORSRAMTimingInitStructure; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = FSMC_NORSRAMTimingInitStructure; FSMC_NORSRAMInit( FSMC_NORSRAMInitStructure); /* - BANK 2 (of NOR/SRAM Bank 0~3) is enabled */ FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE); } 注意红色部分,如果是PD7,应该选择FSMC_Bank1_NORSRAM1而不是FSMC_Bank1_NORSRAM2,但是为FSMC_Bank1_NORSRAM1 的时候,就会死在 //Hard Fault exception handler void HardFault_Handler(void) { while (1) { } }这里面,改为FSMC_Bank1_NORSRAM2就正常了,请是怎么一回事呢? 有遇到这个情况 的朋友吗? |
|
相关推荐
1个回答
|
|
根据您提供的信息,您正在尝试使用STM32F407VET6的FSMC接口驱动DM9000芯片。您已经定义了两个宏,分别用于访问DM9000的数据端口和命令端口。以下是您提供的代码:
```c #define DM9000_DATA *(vu16*)((u32)0x60000000) #define DM9000_CMD *(vu16*)((u32)0x60020000) /******************************************************************************** 函数名: DM9000AE_CtrlLinesConfig 参 数: 无 返 回: 无 功 能: 配置DM9000AE控制口线,FSMC管脚设置为复用功能 */ static void DM9K_CtrlLinesConfig(void) { // 这里需要添加FSMC管脚配置代码 } ``` 为了完成FSMC的配置,您需要在`DM9K_CtrlLinesConfig`函数中添加相应的代码。以下是一些建议的步骤: 1. 配置FSMC的时钟:确保FSMC时钟已经启用。 2. 配置GPIO:将PD7和PD11配置为复用功能,以便它们可以作为FSMC的片选和命令/数据线使用。 3. 配置FSMC的寄存器:设置FSMC的控制寄存器,包括地址设置、数据宽度、时序等。 4. 配置FSMC的命令寄存器:设置FSMC的命令寄存器,以便可以发送命令和接收数据。 以下是一个简化的示例,展示了如何配置FSMC: ```c static void DM9K_CtrlLinesConfig(void) { // 1. 配置FSMC时钟 // ... // 2. 配置GPIO // ... // 3. 配置FSMC的寄存器 FSMC_Bank1->BTCR[0] = 0x00001091; // 假设这是正确的寄存器值,根据您的需求进行调整 FSMC_Bank1->BTCR[1] = 0x001B0D9B; // 同上 // 4. 配置FSMC的命令寄存器 // ... } ``` 请注意,这只是一个示例,您需要根据您的具体需求和硬件配置来调整寄存器的值。建议您查阅STM32F407VET6的数据手册和DM9000的手册,以获取更详细的配置信息。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1909 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1678 浏览 1 评论
1172 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
771 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1732 浏览 2 评论
1970浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
807浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
255浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
624浏览 3评论
634浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 08:36 , Processed in 1.480144 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号