OpenEdv-开源电子网

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

求助 STM32H743 ov7725串口显示问题

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-2-20
在线时间
8 小时
发表于 2020-4-8 19:18:39 | 显示全部楼层 |阅读模式
6金钱
用的STM32H743,串口显示图片出现以下问题,求助
双缓存,代码如下:
#define jpeg_buf_size 31*1024                          //定义JPEG数据缓存jpeg_buf的大小(*4字节)



/*用做DMA的双缓冲 buf*/
#define RGB_buf_SIZE  1024
__align(4) u32 RGB_buf1[RGB_buf_SIZE];
__align(4) u32 RGB_buf2[RGB_buf_SIZE];
__align(4) u32 RGB_BUF[jpeg_buf_size];//JPEG数据缓存buf,定义在LCD帧缓存之后

volatile u32 ImageDateLenght=0;/*图像数据大小  单位u32*/
volatile u8  buf_sta=0;   /*0 图像还没有采集完成,1 采集完成  2 处理完成*/


#define  OV7725_WINDOW_WIDTH                120 // <=320
#define  OV7725_WINDOW_HEIGHT                120 // <=240


#define Buf7725_Size OV7725_WINDOW_WIDTH*OV7725_WINDOW_HEIGHT*2                                                //一帧传输的数据长度大小
//处理JPEG数据
//当采集完一帧JPEG数据后,调用此函数,切换JPEG BUF.开始下一帧采集.
void jpeg_data_process(void)
{
        u16 i;
        u16 rlen;                        //剩余数据长度
        u32 *pbuf;
if(buf_sta==0)        //jpeg数据还未采集完?
{
//                __HAL_DMA_DISABLE(&DMADMCI_Handler);//关闭DMA
          DMA1_Stream1->CR&=~(1<<0);                //停止当前传输
    while(DMA1_Stream1->CR&0X01);        //等待DMA2_Stream1可配置
//                rlen=jpeg_line_size-__HAL_DMA_GET_COUNTER(&DMADMCI_Handler);//得到剩余数据长度
                rlen=RGB_buf_SIZE-DMA1_Stream1->NDTR;//得到剩余数据长度                 
                pbuf=RGB_BUF+ImageDateLenght;//偏移到有效数据末尾,继续添加
                if(DMA1_Stream1->CR&(1<<19))for(i=0;i<rlen;i++)pbuf[i]=RGB_buf2[i];//读取buf1里面的剩余数据
                else for(i=0;i<rlen;i++)pbuf[i]=RGB_buf1[i];//读取buf0里面的剩余数据
                ImageDateLenght+=rlen;                        //加上剩余长度
                buf_sta=1;                                 //标记JPEG数据采集完按成,等待其他函数处理
        }
        if(buf_sta==2)        //上一次的jpeg数据已经被处理了
   {
        DMA1_Stream1->NDTR=RGB_buf_SIZE;//传输长度为jpeg_buf_size*4字节
        DMA1_Stream1->CR|=1<<0;                        //重新传输
        buf_sta=0;                                        //标记数据未采集
        ImageDateLenght=0;                                //数据重新开始
    }
//        }
}

void RGB_dcmi_rx_callback(void)
{
        u16 i;
        u32 *pbuf;
        pbuf=RGB_BUF+ImageDateLenght;//偏移到有效数据末尾
        if(DMA1_Stream1->CR&(1<<19))//buf0已满,正常处理buf1
        {
                for(i=0;i<RGB_buf_SIZE;i++)pbuf[i]=RGB_buf1[i];//读取buf1里面的数据
                ImageDateLenght+=RGB_buf_SIZE;//偏移
        }else //buf1已满,正常处理buf0
        {
                for(i=0;i<RGB_buf_SIZE;i++)pbuf[i]=RGB_buf2[i];//读取buf2里面的数据
                ImageDateLenght+=RGB_buf_SIZE;//偏移
        }           
  SCB_CleanInvalidateDCache();        //清除无效化DCache
}

/**
  * @brief  OV7725相机拍摄设置,尺寸:120,120,黑白特效
  * @param  无
  * @retval 无
  */
void OV7725_Test(void)
{
        u32 i = 0;
        u8 *p;
        OV7725_Contrast(3);  //对比度设置
        OV7725_Color_Saturation(3);//色彩饱和度0
        OV7725_Special_Effects(0);
        OV7725_Light_Mode(0);       
        dcmi_rx_callback=RGB_dcmi_rx_callback;//RGB屏接收数据回调函数
        DCMI_Init();                        //DCMI配置
        DCMI_DMA_Init((u32)RGB_buf1,(u32)RGB_buf2,RGB_buf_SIZE,DMA_MDATAALIGN_WORD,DMA_MINC_ENABLE);
       
        OV7725_Window_Set(OV7725_WINDOW_WIDTH,OV7725_WINDOW_HEIGHT,0);//QVGA模式输出       
        DCMI_Start();                 //启动传输
        delay_ms(10);
        while(1){
       
                        if(buf_sta == 1)        //已经采集完一帧图像了
                 {
                         p=(u8*)RGB_BUF;
                                USART1->TDR=0x01;  
                                while((USART1->ISR&0X40)==0);        //循环发送,直到发送完毕                          
                                USART1->TDR=0XFE;  
                                while((USART1->ISR&0X40)==0);        //循环发送,直到发送完毕   
                                for(i=0;i< Buf7725_Size; i++)        //发送图像
                                {
                                        USART1->TDR=p[i];  
                                        while((USART1->ISR&0X40)==0);        //循环发送,直到发送完毕   
                                }  
                                USART1->TDR=0xFE;  
                                while((USART1->ISR&0X40)==0);        //循环发送,直到发送完毕                          
                                USART1->TDR=0X01;  
                                while((USART1->ISR&0X40)==0);        //循环发送,直到发送完毕  
                                buf_sta=2;        //标记jpeg数据处理完了,可以让DMA去采集下一帧了.
                 }
        }       
}

int main(void)
{
        Cache_Enable();                                        //打开L1-Cache
        MPU_Memory_Protection();                                //保护相关存储区域
        HAL_Init();                                                        //初始化HAL库
        Stm32_Clock_Init(160,5,2,4);                      //设置时钟,400Mhz
        delay_init(400);                                                //延时初始化
        uart_init(256000);                                                //串口初始化
        usart2_init(256000);                            //初始化USART2
        usmart_dev.init(200);                                     //初始化USMART       
        LED_Init();                                                                //初始化LED
        KEY_Init();                                                                //初始化按键
        SDRAM_Init();                                   //初始化SDRAM
        TIM3_Init(10000-1,20000-1);                     //10Khz计数,1秒钟中断一次

        if(!OV7725_Init())//OV7725初始化成功
        {
                printf("OV7725_Init success\n");
                OV7725_Test();
        }       
        while(1)
        {


        }   

阿里旺旺图片20200408191558.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-4-9 00:55:30 | 显示全部楼层
回复

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2020-1-23
在线时间
14 小时
发表于 2020-4-19 10:16:05 | 显示全部楼层
帮顶~~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-2 07:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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