现象:
stm32f103zet6 使用hal库开发,普中玄武的板子
本来用画点的方法没有问题,但是刷新太慢,于是尝试用DMA传输,就遇到了这个问题。
lv_port_disp.c
static void disp_init(void)
{
/*You code here*/
TFTLCD_Init();
HAL_DMA_RegisterCallback(
&hdma_memtomem_dma1_channel1,
HAL_DMA_XFER_CPLT_CB_ID,
LVGL_LCD_FSMC_DMA_pCallback);//注册LVGL_LCD_FSMC_DMA_pCallback函数,用于通知DMA传输完成
}
static void disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)
{
if (disp_flush_enabled)
{
LCD_Address_Set(area->x1, area->y1, area->x2, area->y2);
HAL_DMA_Start_IT(&hdma_memtomem_dma1_channel1, (uint32_t)color_p, (uint32_t)&(TFTLCD->LCD_DATA),
((area->x2 + 1) - area->x1) * ((area->y2 + 1) - area->y1));
}
}
void LVGL_LCD_FSMC_DMA_pCallback(DMA_HandleTypeDef *_hdma)
{
lv_disp_flush_ready(&disp_drv);
}
//TFT_LCD定义
typedef struct
{
uint16_t LCD_CMD;
uint16_t LCD_DATA;
} TFTLCD_TypeDef;
// 使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A10作为数据命令区分线
// 注意设置16位总线时STM32内部会右移一位对齐!
#define TFTLCD_BASE ((uint32_t)(0x6C000000 | 0x000007FE))
#define TFTLCD ((TFTLCD_TypeDef *)TFTLCD_BASE)
cubemx配置:
Data Width都试过了,按理说应该配置为Half word,但是显示却是这样的:
我放了一个方形的按钮部件在中间,设置为Byte勉强能看出来有个完整的按钮,设置为half word按钮直接裂开了(字面意思),如果改成word就什么都不显示了,我经过调试,y1,y2有在正常增加,没有跳过,也没看出来是不是DMA的问题,实在解决不了。