主控为
STM32F429BI,外挂32位SDRAM,请教一下:当移植了FreeRTOS和ucGUI后,在SDRAM中开辟一片存储区域作为显存,FreeRTOS的显示任务不断往SDRAM写入数据,而STM32的LTDC模块从SDRAM读出数据并传输到LCD上显示,这之间是不是有冲突呢?因为现在LCD屏幕有跳动现象,我是这么想的,显示任务不断的往SDRAM写入数据,必然触发SDRAM的写入时序,而LTDC在从SDRAM读取数据时必然触发读出时序,这两者之间如果没有互斥信号量处理的话,应该会导致时序异常。没有这方面的经验,不知道我的想法是否正确,还请过往的大侠指点迷津,从整体的概念上指点一下就行,谢谢了!
把ReadBurst配置为FMC_SDRAM_RBURST_ENABLE就解决了。(以下是我用的是ST32Cube生成的代码)
hsdram1.Init.SDBank = FMC_SDRAM_BANK2;
hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_3;
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
别外,LTDC需要实时的从SDRAM读取显存数据发送到RGB接口,以800*600的16位 {MOD}屏为例,每秒读取的数据量高达28MB,读取间隔远小于1us,所以用信号量互斥是不实现的。
一周热门 更多>