OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5221|回复: 6

求助,HAL库STM32F429 FSMC + DMA ->LCD 问题

[复制链接]

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-9-9
在线时间
20 小时
发表于 2021-10-12 21:17:11 | 显示全部楼层 |阅读模式
10金钱
在用HAL库STM32F4阿波罗开发板写LVGL框架,用的是FMC总线,发现界面刷新就和PPT似的,网上查了很多FSMC+DMA的范例,都是标准库的。用HAL库按标准库移植了一份,DMA一直跑不起来,进中断后就没然后了,贴驱动代码希望大家帮忙看看哪里有问题LCD代码是原子哥的F429HAL库触摸屏驱动。

typedef struct
{
        vu16 LCD_REG;
        vu16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A18作为数据命令区分线
//注意设置时STM32内部会右移一位对其!                              
#define LCD_BASE        ((u32)(0x60000000 | 0x0007FFFE))
#define LCD             ((LCD_TypeDef *) LCD_BASE)




DMA_HandleTypeDef     DMA_HandlerStructure;
void DMA_fsmc_Init()
{  
        __HAL_RCC_DMA2_CLK_ENABLE();       

//        HAL_DMA_DeInit(&DMA_HandlerStructure);
        DMA_HandlerStructure.Instance = DMA2_Stream3;                   //数据流
        DMA_HandlerStructure.Init.Channel = DMA_CHANNEL_0 ;   //通道0
        DMA_HandlerStructure.Init.Direction = DMA_MEMORY_TO_MEMORY; //存储器到存储器

        DMA_HandlerStructure.Instance->AR = 0;                                //DMA_PeripheralBaseAddr
        DMA_HandlerStructure.Instance->M0AR = (u32)&LCD->LCD_RAM;        //DMA_Memory0BaseAddr
        DMA_HandlerStructure.Init.PeriphInc = DMA_PINC_DISABLE;            //外设是否递增
        DMA_HandlerStructure.Init.MemInc         = DMA_MINC_ENABLE;      //内存是否递增
        DMA_HandlerStructure.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;     //半字 16位
        DMA_HandlerStructure.Init.PeriphDataAlignment = DMA_MDATAALIGN_HALFWORD;  //半字 16位
        DMA_HandlerStructure.Init.Priority = DMA_PRIORITY_HIGH;       //设置优先级 高
        DMA_HandlerStructure.Init.Mode = DMA_NORMAL;    //        循环模式先测试

        HAL_DMA_Init(&DMA_HandlerStructure);  //进行初始化

       
}

void DMA_Fill_Color(u16 X0, u16 Y0, u16 X1, u16 Y1, u16 *color)
{
    int Point_Num = (X1-X0+1)*(Y1-Y0+1);    //要填充的点数
    u16 i=0;

    LCD_Set_Window(X0,Y0,X1,Y1);
//        HAL_DMA_Abort(&DMA_HandlerStructure);  
        while(HAL_DMA_GetState(&DMA_HandlerStructure) != HAL_DMA_STATE_RESET)
        HAL_DMA_Start(&DMA_HandlerStructure,(u32)(color),(u32)&LCD->LCD_RAM , Point_Num);  //开启DMA传输

}

void DMA2_Stream3_IRQHandler(void)
{
        u8  u8DMA_FLAG = 0;

        u8DMA_FLAG = __HAL_DMA_GET_FLAG(&DMA_HandlerStructure,DMA_FLAG_TCIF0_4);       
        if(u8DMA_FLAG != 0)
        {
                __HAL_DMA_CLEAR_FLAG(&DMA_HandlerStructure,DMA_FLAG_TCIF0_4);
        }
}







5934353972a55d6a5e24b36e05c937a.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4309
金钱
4309
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-10-13 10:15:39 | 显示全部楼层
回复

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2021-10-13 16:06:30 | 显示全部楼层
帮顶帮顶
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2021-10-14 00:52:46 | 显示全部楼层
你仿真看你的DMA是不是在运行?
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-9-9
在线时间
20 小时
 楼主| 发表于 2021-10-14 19:00:13 | 显示全部楼层
正点原子 发表于 2021-10-14 00:52
你仿真看你的DMA是不是在运行?

原子哥,DMA能进中断。可是中断一直等不到结束信号,说明数据压根没传输,或者传别的地方去了。。
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2019-9-9
在线时间
20 小时
 楼主| 发表于 2021-10-14 19:20:22 | 显示全部楼层
Heart丶 发表于 2021-10-14 19:00
原子哥,DMA能进中断。可是中断一直等不到结束信号,说明数据压根没传输,或者传别的地方去了。。

这里DMA其实不能进中断,断点打的有问题,数据确实没传输,现在是一直卡在了
        while(HAL_DMA_GetState(&DMA_HandlerStructure) != HAL_DMA_STATE_RESET)
判断DMA状态
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2021-10-15 02:03:01 | 显示全部楼层
Heart丶 发表于 2021-10-14 19:20
这里DMA其实不能进中断,断点打的有问题,数据确实没传输,现在是一直卡在了
        while(HAL_DMA_GetState(& ...

那就继续查配置,说明你根本没启动DMA传输
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 20:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表