完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我手上有一块 32L4R9IDISCOVERY
然后,我在DEMO程序STM32Cube_FW_L4_V1.14.0Projects32L4R9IDISCOVERYExamplesDSIDSI_CmdMode_SingleBuffer基础上,添加了PSRAM初始化。PSRAM工作正常,并可以作为堆使用。 但当我把显存设置到PSRAM上的时候。 发现系统会进入到LTDC Error中断 LTDC_ER_IRQHandler 请问大大有测试过类似的问题吗? 谢谢 附:代码 显存配置 //__attribute__((section(".FrameBufferSection"))) __attribute__((section(".XRAMSection"))) __align(16) uint32_t PhysFrameBuffer[91260]; // 5 char buffer, 5*16 = 80 pixer PSRAM初始化 /* PSRAM device configuration */ /* Timing configuration derived from system clock (up to 120Mhz) for 60Mhz as PSRAM clock frequency */ Timing.AddressSetupTime = 4; Timing.AddressHoldTime = 2; Timing.DataSetupTime = 6; Timing.BusTurnAroundDuration = 1; Timing.CLKDivision = 2; Timing.DataLatency = 2; Timing.AccessMode = FMC_ACCESS_MODE_A; //FMC_ACCESS_MODE_A; psramHandle.Init.NSBank = FMC_NORSRAM_BANK1; psramHandle.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; psramHandle.Init.MemoryType = FMC_MEMORY_TYPE_PSRAM; psramHandle.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16; psramHandle.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; psramHandle.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_HIGH; psramHandle.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; psramHandle.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; psramHandle.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE; psramHandle.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; psramHandle.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; psramHandle.Init.WriteBurst = FMC_WRITE_BURST_DISABLE; psramHandle.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ASYNC; psramHandle.Init.WriteFifo = FMC_WRITE_FIFO_DISABLE; psramHandle.Init.NBLSetupTime = 0; psramHandle.Init.PageSize = FMC_PAGE_SIZE_NONE; psramHandle.Instance = FMC_NORSRAM_DEVICE; psramHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE; |
|
相关推荐
1个回答
|
|
首先,我们需要确保PSRAM已经正确初始化并可以正常工作。从您的描述来看,PSRAM已经可以作为堆使用,这意味着PSRAM的初始化应该是正确的。接下来,我们将按照以下步骤尝试解决LTDC Error中断的问题:
1. 检查LTDC配置:确保LTDC的配置参数(如时钟、分辨率、颜色格式等)与您的显示设备和PSRAM兼容。您可以在LTDC初始化代码中检查这些参数。 2. 检查显存地址:确保显存地址已经正确设置为PSRAM的地址。您可以在LTDC配置结构体中设置这个地址。 3. 检查显存大小:确保显存大小足够大,可以容纳您的显示内容。您已经定义了一个91260个uint32_t的数组,这应该是足够的。 4. 检查中断配置:确保LTDC Error中断已经正确配置。您可以在NVIC配置代码中检查这一点。 5. 检查错误处理:在LTDC_ER_IRQHandler中断处理函数中,检查错误原因并采取相应的措施。例如,如果错误是由于显存地址不匹配导致的,您可能需要重新配置显存地址。 6. 调试:使用调试工具(如ST-Link)逐步执行代码,观察LTDC配置和中断处理过程中的变量值,以便找到问题所在。 以下是一个简化的示例,展示如何在STM32Cube_FW_L4_V1.14.0项目中配置LTDC和PSRAM: ```c #include "stm32l4xx_hal.h" #include "stm32l4r9i_discovery.h" #include "stm32l4r9i_discovery_lcd.h" // PSRAM初始化代码 void PSRAM_Init(void) { // 省略PSRAM初始化代码 } // LTDC配置结构体 LTDC_HandleTypeDef hltdc; // 显存配置 __attribute__((section(".FrameBufferSection"))) __attribute__((section(".XRAMSection"))) __align(16) uint32_t PhysFrameBuffer[91260]; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DMA_Init(); MX_LTDC_Init(); PSRAM_Init(); // 配置LTDC hltdc.Instance = LTDC; hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; hltdc.Init.HorizontalSync = 9; hltdc.Init.VerticalSync = 1; hltdc.Init.AccumulatedHBP = 29; hltdc.Init.AccumulatedVBP = 3; hltdc.Init.AccumulatedActiveW = 800; hltdc.Init.AccumulatedActiveH = 480; hltdc.Init.TotalHeigh = 525; hltdc.Init.TotalWidth = 840; // 配置LTDC层 LTDC_LayerCfgTypeDef sLayerCfg; sLayerCfg.WindowX0 = 0; sLayerCfg.WindowX1 = 800; sLayerCfg.WindowY0 = 0; sLayerCfg.WindowY1 = 480; sLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; sLayerCfg.Alpha = 255; sLayerCfg.Alpha0 = 0; sLayerCfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; sLayerCfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; sLayerCfg.FBStartAdress = (uint32_t)PhysFrameBuffer; sLayerCfg.ImageWidth = 800; sLayerCfg.ImageHeight = 480; sLayerCfg.Backcolor.Blue = 0; sLayerCfg.Backcolor.Green = 0; sLayerCfg.Backcolor.Red = 0; HAL_LTDC_ConfigLayer(&hltdc, &sLayerCfg, 0); // 启动LTDC HAL_LTDC_Start(&hltdc); while (1) { // 省略其他代码 } } ``` 希望这些信息对您有所帮助。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1932 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1705 浏览 1 评论
1185 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
785 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1750 浏览 2 评论
1992浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
827浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
279浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
637浏览 3评论
643浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 11:42 , Processed in 0.860046 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号