OpenEdv-开源电子网

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

OV7725 DCMI+DMA+双缓冲,使用原子兄的例程显示出错,原子兄帮我看看!

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
发表于 2017-12-20 20:58:49 | 显示全部楼层 |阅读模式
1金钱
OV7725 DCMI+DMA+双缓冲,使用原子兄的例程显示出错,原子兄帮我看看!

//获取图像,帧中断
void Data_process(void)
{        
    OV7725_Line_Number = OV7725_Line_Cont;
    OV7725_Data_Len = OV7725.Frame_Data_Len;
    OV7725.Frame_Data_Len = 0;  //帧数据长度
    OV7725_Line_Cont = 0;
//*       
        __HAL_DMA_DISABLE(&DMADMCI_Handler);//关闭DMA
        YUV_data_len = __HAL_DMA_GET_COUNTER(&DMADMCI_Handler);  //得到数据长度       

    __HAL_DMA_SET_COUNTER(&DMADMCI_Handler, Window_W_Word);        //传输数据长度
        __HAL_DMA_ENABLE(&DMADMCI_Handler); //打开DMA   */

    OV7725.Data_OK = 1;
    OV7725.Frame_Cont ++;       //帧计数
}

//OV7725数据接收回调函数,行中断,采用乒乓模式
void OV7725_dcmi_rx_callback(void)
{  
        u16 i;
        u8 *pbuf_out;

    pbuf_out = Img_buf + OV7725.Frame_Data_Len;//偏移到有效数据末尾

        if (DMA2_Stream1->CR & (1<<19))   //DMA使用buf1,读取buf0
        {
                for(i = 0; i < Window_W_Word; i ++)
               {
                      *(pbuf_out++) = OV7725_Line_Data_Buf[0][i];      //读取buf0里面的数据
                      *(pbuf_out++) = OV7725_Line_Data_Buf[0][i] >> 16;//读取buf0里面的数据
               }
        }
    else                                    //DMA使用buf0,读取buf1
        {
                for(i = 0; i < Window_W_Word; i ++)
                {
                         *(pbuf_out++) = OV7725_Line_Data_Buf[1][i];      //读取buf1里面的数据
                        *(pbuf_out++) = OV7725_Line_Data_Buf[1][i] >> 16;//读取buf1里面的数据
               }
        }
    SCB_CleanInvalidateDCache();        //清除无效化DCache

    OV7725.Frame_Data_Len += Debug_Window_W;//偏移   
    OV7725_Line_Cont ++;
}

1.采用上面的函数可以显示图像,但是行中断数量比设置的数量少,而且图像会左右不断移动。

2.将第一个函数的
/*
      __HAL_DMA_DISABLE(&DMADMCI_Handler);//关闭DMA
        YUV_data_len = __HAL_DMA_GET_COUNTER(&DMADMCI_Handler);  //得到数据长度       

      __HAL_DMA_SET_COUNTER(&DMADMCI_Handler, Window_W_Word);        //传输数据长度
        __HAL_DMA_ENABLE(&DMADMCI_Handler); //打开DMA   */
和第二个函数的
//SCB_CleanInvalidateDCache();        //清除无效化DCache

注释掉,行数量和图片数据量就都对,但是图片显示一片乱码!

DCMI的设置是使用的原子兄的例程。

希望原子兄百忙之中,抽空帮我解答一下!





最佳答案

查看完整内容[请看2#楼]

哎!自己解决了!SCCB的接口原因。多谢原子兄回复!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
 楼主| 发表于 2017-12-20 20:58:50 | 显示全部楼层
哎!自己解决了!SCCB的接口原因。多谢原子兄回复!
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
 楼主| 发表于 2017-12-20 23:00:36 | 显示全部楼层
主程序初始化
int main(void)
{            
    Cache_Enable();                 //打开L1-Cache
    //MPU_Memory_Protection();        //保护相关存储区域
    HAL_Init();                                        //初始化HAL库
    Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
    delay_init(216);                //延时初始化
    Printf_UART7_init(115200);                //信息打印串口初始化       
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
 楼主| 发表于 2017-12-21 13:58:15 | 显示全部楼层
自己顶一下!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-12-21 22:28:05 | 显示全部楼层
我们例程在我们开发板上运行良好啊,你接我们开发板试过么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
 楼主| 发表于 2017-12-22 00:02:04 | 显示全部楼层
我在阿波罗F7开发板上试了,就是不出图像
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
 楼主| 发表于 2017-12-22 09:52:26 来自手机 | 显示全部楼层
用LED测试了一下,行中断和帧中断都进入正常,就是在行中断读取不到数据!
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
 楼主| 发表于 2017-12-22 09:54:09 来自手机 | 显示全部楼层
本帖最后由 denglu 于 2017-12-22 10:01 编辑

如果有哪位大神可以解决,愿付500大洋,用支付宝转账!联系方式QQ291837351
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2014-12-28
在线时间
37 小时
 楼主| 发表于 2017-12-22 13:50:30 | 显示全部楼层
哎!自己解决了!SCCB的接口原因。多谢原子兄回复!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-12-23 01:11:12 | 显示全部楼层
denglu 发表于 2017-12-22 09:54
如果有哪位大神可以解决,愿付500大洋,用支付宝转账!联系方式QQ291837351

下拉大血本啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-19 17:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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