OpenEdv-开源电子网

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

stm32h750 摄像头gc0308+fifo+lcd屏

[复制链接]

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
发表于 2020-12-25 08:44:12 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 wangertan 于 2021-1-4 09:11 编辑

首先lcd(rgb接口 ltdc)可以显示正常图片 320x240
gc0308配置完之后有数据传输给lcd,但是我配置的参数是rgb565,为何显示出来时黑白的一样,好像还不如黑白的,有大致的轮廓,但是不清晰。引脚连接与原子哥的mini版几乎一模一样。
有哥哥用过吗?他的寄存器配置是怎样的呢?
求支援 大家有啥都可以说 欢迎回帖啊 小弟不行了
2020 12 28  11:20  尝试根据手册修改配置 但是有些地方手册根本没有讲如何配置,只有一个描述。我将得到的数据的高位和地位互换不行。得到的数据根据rgb模式取出rgb分量之后再次组合,还是效果不明显。我在想是不是哪里少了配置。但是公司之前的用这个就可以使用。我的天。
  配置按照手册基本都走了一遍 还是不太行。图像的大致轮廓是对的,但是整体的颜色偏灰,而且似乎把别的颜色都识别为白黑,颜色不对。
       12:29  17:12 数据还是这样,不知道咋调试了。不晓得是不是摄像头硬件的问题,换了一个还是不清晰,难道gc0308就这像素了?就跟看视频时候的流畅一样(但是我想要高清的结果)。继续糊
  2021/1/4  老大来指点了下 结帖了。开始干红外模组
我的寄存器配置如下:
{   
/*以下为OV7670 QVGA RGB565参数  */
    {0xfe, 0x80},   //软件复位
    {0xfe, 0x00},   //页0
    {0x1a, 0x16},   //电源
    {0x25, 0x0f},   //引脚输出允许0f            //ff
    {0x14, 0x01},   //翻转镜像10               //01
    {0x28, 0x11},   //不分频11                 //
    {0x1d, 0x08},   //使用内部DA250 08         //
    {0x29, 0xa3},   //By pass模式RawRGB a3      //
    {0x26, 0x76},   //同步信号极性控制 高有效 下降沿04    //06 可以  //76不花

    {0x05, ((60)>>8)},       //0
    {0x06, ((60)&0xFF)}, //Row行开始 0-120左右可调 默认在中间  // 0011 1100  60
    {0x07, ((140)>>8)},      //0
    {0x08, ((140)&0xFF)}, //Column列开始 0-280左右可调 默认在中间 //1000 1100   140
    {0x09, ((CAMA_XPIX+8)>>8)},                                   //0000 0000 0001
    {0x0a, ((CAMA_XPIX+8)&0xFF)},   //height高 648              // 72
    {0x0b, ((CAMA_YPIX+8)>>8)},                                  //0
    {0x0c, ((CAMA_YPIX+8)&0xFF)},  //width宽  488 搞不懂这个为什么   //248  
    //输出模式
    {0x24, 0xa6},   //RGB565
    {0xd2, 0x90},  //打开AEC 90
    {0xfe, 0x01},

最佳答案

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

配置的问题 我好菜 主要修改以下两个配置 然后读的时候高低字节换一下(显示的时候) 老大nb 我是彩笔 {0x14, 0x01}, {0x26, 0x76}, 读数据的时候: FIFO_RCLK(0); color1=GPIOI->IDR&0XFF; //读数据 高? FIFO_RCLK(1); FIFO_RCLK(0); color2=GPIOI->IDR&0XFF; //读数据 低? FIFO_RCLK(1); color=(color2
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
 楼主| 发表于 2021-11-6 15:45:03 | 显示全部楼层
wangertan 发表于 2021-11-6 15:39
是关于gc0308部分的吗?

#include "gc0308.h"
#include "IIC3.h"
#include "string.h"
#include "main.h"
uint8_t ov_sta=0;  //帧数

// 初始化序列参数
const uint8_t ov7670_init_reg_[][2]=
  {   
        /*以下为OV7670 QVGA RGB565参数  */
    {0xfe, 0x80},          //软件复位
    {0xfe, 0x00},          //页0

    {0x1a, 0x16},          //电源
    {0x25, 0x0f},          //引脚输出允许0f            //ff
    {0x14, 0x11},          //翻转镜像10               //01
    {0x28, 0x11},          //不分频11                 //

    {0x1d, 0x08},          //使用内部DA250 08         //
    {0x29, 0xa3},          //By pass模式RawRGB a3      //
    {0x26, 0x02},          //同步信号极性控制 高有效 下降沿 哎 就在这出的问题               
               
    //Window模式 Windowing配出窗口0x05~0x0C 先设成640x480 再抽取1/2
{0x24, 0xa6},                 //输出格式RGB565 a6   //86 c6 e6ok
{0xd2, 0x94},         //打开AEC 90

{0xfe, 0x01},          //页1
{0x53,0x82},                        
{0x54, 0x22},
{0x55, 0x00},

{0x56, 0x00},

{0x57, 0x00},

{0x58, 0x00},

{0x59, 0x00},
///////////////////////////////////////////////////////////////////////       
};

uint8_t Camera_Init(void)
{        
        uint16_t i=0,len=0;
        uint8_t temp=0;
//        FIFO_OE(0);       //camera 片选
  if(IIC3_WR_Reg(0xfe,0x80))  //复位SCCB       
          return 1;             
        HAL_Delay(50);  
        //读取产品型号
        temp=IIC3_RD_Reg(0x00);   //读设备id  正确应答0x9b
        if(temp!=0x9b)
                return 2;  
        //初始化序列       
  len=sizeof(ov7670_init_reg_)/sizeof(ov7670_init_reg_[0]);         //二维数组的长度
        for(i=0;i<len;i++)
        {
                   IIC3_WR_Reg(ov7670_init_reg_[0],ov7670_init_reg_[1]);  //初始化0308 写入参数

  }
        OV_VSYNC_exit_line8_config();
        return 0x00;         //ok

}





void Camera_refresh(void)
{
        uint16_t j=0, i;
        uint16_t color=0, color2=0, color1=0;               
        if(g_sysSetting.mixLevel == 4)
        {
                ov_sta=0;
                return;
        }
       
        if(ov_sta>=2)     //有帧中断更新?
        {   
                FIFO_OE(0);       //camera 片选
                FIFO_WEN(0);
       
                FIFO_RRST(0);                                //开始复位读指针
                FIFO_RCLK(0);
                FIFO_RCLK(1);
                FIFO_RCLK(0);
                FIFO_RRST(1);                                //复位读指针结束
                FIFO_RCLK(1);
    //原0 du 1
                for(i = 0; i < CAMA_YPIX; i ++)        //240
                {
                        for(j=0;j<CAMA_XPIX;j++)        //320
                        {                                 
                                 FIFO_RCLK(0);
                                 color1=GPIOI->IDR&0XFF;           //读数据        高?
                                 FIFO_RCLK(1);

                                 FIFO_RCLK(0);          
                                 color2=GPIOI->IDR&0XFF;         //读数据   低?
                                 FIFO_RCLK(1);  
                               
                                 color=(color2<<8)|(color1);
                                 //picSrcBuf[j/240][j%240] = color;
                        //        cameraBuf[j/240][j%240] = color;
                                // videoBuf[320-j/240][j%240] = color;
                                //videoBuf[j/320][j%320] = color;
                                videoBuf[j] = color;
                                //picSrcBuf[j] = color;
                        }  
                }       
                        FIFO_OE(1);       //camera 片选
                  ov_sta=0;                      //清零帧中断标记
        }
}       



void OV_VSYNC_exit_line8_config(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
       
        GPIO_InitTypeDef GPIO_InitStructure;
  __HAL_RCC_GPIOI_CLK_ENABLE();
  GPIO_InitStruct.Pin = OV_VSYNC_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(OV_VSYNC_GPIO_Port, &GPIO_InitStruct);
       
}

////////////////////////////////
#include "IIC3.h"

#define IIC_SPEED        1
//IIC3起始信号
//当时钟为高的时候,数据线的高到低,为IIC3起始信号
//在激活状态下,SDA和SCL均为低电平
void IIC3_Start(void)
{
          SDA_OUT;         //输出模式
    IIC3_SDA(1);     //数据线高电平          
    IIC3_CLK(1);            //在时钟线高的时候数据线由高至低
    HAL_Delay(IIC_SPEED);    //50MS
    IIC3_SDA(0);
    HAL_Delay(IIC_SPEED);         
          IIC3_CLK(0);            // 钳住iic总线 准备发送或接受数据           数据线恢复低电平,单操作函数必要          
          HAL_Delay(IIC_SPEED);         
}

//IIC3停止信号
//当时钟为高的时候,数据线的低到高,为IIC3停止信号
//空闲状况下,SDA,SCL均为高电平
void IIC3_Stop(void)
{
          SDA_OUT;         //输出模式
    IIC3_SDA(0);
    HAL_Delay(IIC_SPEED);       
          IIC3_CLK(1);       
    HAL_Delay(IIC_SPEED);
    IIC3_SDA(1);
    HAL_Delay(IIC_SPEED);
}

//产生NA信号
void ICC_No_Ack(void)
{
        HAL_Delay(IIC_SPEED);
        IIC3_SDA(1);
        IIC3_CLK(1);       
        HAL_Delay(IIC_SPEED);
        IIC3_CLK(0);       
        HAL_Delay(IIC_SPEED);
        IIC3_SDA(0);
        HAL_Delay(IIC_SPEED);
}
//IIC3,写入一个字节
//返回值:0,成功;1,失败.
//0100 0010
uint8_t IIC3_WR_Byte(uint8_t dat)
{
        uint8_t j,res;       
        SDA_OUT;
        for(j=0;j<8;j++) //循环8次发送数据
        {
                if(dat&0x80)
                        IIC3_SDA(1);       
                else
                        IIC3_SDA(0);
                dat<<=1;
                HAL_Delay(IIC_SPEED);
                IIC3_CLK(1);       
                HAL_Delay(IIC_SPEED);
                IIC3_CLK(0);         
                HAL_Delay(IIC_SPEED);                        
        }                         
        SDA_IN;                        //设置SDA为输入
        HAL_Delay(IIC_SPEED);

        IIC3_CLK(1);                        //接收第九位,以判断是否发送成功
        HAL_Delay(IIC_SPEED);

        if(HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_8))     //出错
                res=1;  //SDA=1发送失败,返回1
        else
                res=0;         //SDA=0发送成功,返回0
        IIC3_CLK(0);                 
        SDA_OUT;         //设置SDA为输出   
        HAL_Delay(IIC_SPEED);         
        return res;  
}         
//IIC3 读取一个字节
//在SCL的上升沿,数据锁存
//返回值:读到的数据
uint8_t IIC3_RD_Byte(void)
{
        uint8_t temp=0,j;   
        SDA_IN;                          //设置SDA为输入  
        for(j=8;j>0;j--)           //循环8次接收数据
        {                               
                HAL_Delay(IIC_SPEED);

                IIC3_CLK(1);
                temp=temp<<1;
                if(HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_8))
                        temp++;   
                HAL_Delay(IIC_SPEED);

                IIC3_CLK(0);
                HAL_Delay(IIC_SPEED);         
        }       
        SDA_OUT;                      //设置SDA为输出   
        return temp;
}                                                             
//写寄存器
//返回值:0,成功;1,失败.
uint8_t IIC3_WR_Reg(uint8_t reg,uint8_t data)
{
        uint8_t res=0;
        IIC3_Start();                                         //启动IIC3传输
        if(IIC3_WR_Byte(IIC3_ID))
                res=1;        //写器件ID          
        HAL_Delay(IIC_SPEED);
          if(IIC3_WR_Byte(reg))
                        res=1;                //写寄存器地址          
          HAL_Delay(IIC_SPEED);
          if(IIC3_WR_Byte(data))
                        res=1;         //写数据         
          IIC3_Stop();          
          return        res;
}                                                              
//读寄存器
//返回值:读到的寄存器值
uint8_t IIC3_RD_Reg(uint8_t reg)
{
        uint8_t val=0;
        IIC3_Start();                                     //启动IIC3传输
        IIC3_WR_Byte(IIC3_ID);                //写器件ID          
        HAL_Delay(IIC_SPEED);         

  IIC3_WR_Byte(reg);                        //写寄存器地址          
        HAL_Delay(IIC_SPEED);       
  
        IIC3_Stop();   
        HAL_Delay(IIC_SPEED);       
       
        //设置寄存器地址后,才是读
        IIC3_Start();
        IIC3_WR_Byte(IIC3_ID|0X01);        //发送读命令          
        HAL_Delay(4*IIC_SPEED);

          val=IIC3_RD_Byte();                         //读取数据
          ICC_No_Ack();
          IIC3_Stop();
          return val;
}

// SDA 输出模式
void IIC3_SDA_OUT_Mode(void)
{       
                GPIO_InitTypeDef GPIO_InitStruct = {0};               
                GPIO_InitStruct.Pin = GPIO_PIN_8;
                GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
                GPIO_InitStruct.Pull = GPIO_PULLUP;
                GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
//                GPIO_InitStruct.Alternate = GPIO_AF4_I2C3;
                HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
}
// SDA 输入模式
void IIC3_SDA_IN_Mode(void)
{       
                GPIO_InitTypeDef GPIO_InitStruct = {0};               
                GPIO_InitStruct.Pin = GPIO_PIN_8;
                GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
                GPIO_InitStruct.Pull = GPIO_PULLUP;
                GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
//                GPIO_InitStruct.Alternate = GPIO_AF4_I2C3;
                HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
}
void delay_nop(unsigned int time)
{
//        int p=200;
        while(time--)
                 {
               
        __nop();
                 }
}
///////////////////////////////////

void EXTI9_5_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI9_5_IRQn 0 */

  /* USER CODE END EXTI9_5_IRQn 0 */
  /* USER CODE BEGIN EXTI9_5_IRQn 1 */

  /* USER CODE END EXTI9_5_IRQn 1 */
        {

                __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_8);    //??3y?D???à¨o??
                if(ov_sta<2)
                {
                         if(ov_sta==0)           //|ì¨2¨°????¨a?2??ê??a¨o????¨o?¨°???¨oy?Y
                         {
                                 FIFO_OE(0);       //camera 片选
                                 FIFO_WRST(0);       //?′??D′????
                                 FIFO_WRST(1);
                                 FIFO_WEN(1);        //高电平有效
                                 
                         }
                         else if(ov_sta==1)
                         {
                                 FIFO_WEN(0);      //???1D??¨¨?fifo
                                 FIFO_WRST(0);     //?????D??????
//                                 FIFO_WRST(1);


                         }
                         ov_sta++;

                }
               
        }
}




回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
 楼主| 发表于 2020-12-25 08:44:13 | 显示全部楼层
配置的问题 我好菜  主要修改以下两个配置 然后读的时候高低字节换一下(显示的时候)
老大nb 我是彩笔
{0x14, 0x01},
{0x26, 0x76},
读数据的时候:

FIFO_RCLK(0);
                         color1=GPIOI->IDR&0XFF;           //读数据        高?
                         FIFO_RCLK(1);

             FIFO_RCLK(0);          
                         color2=GPIOI->IDR&0XFF;         //读数据   低?
                         FIFO_RCLK(1);  
color=(color2<<8)|(color1);
buf[j]=color;
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2020-12-26 00:53:50 | 显示全部楼层
帮顶
回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
 楼主| 发表于 2020-12-29 17:14:36 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2019-11-23
在线时间
4 小时
发表于 2021-1-28 16:15:05 | 显示全部楼层
感谢LZ分享66666
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2014-1-13
在线时间
47 小时
发表于 2021-11-4 14:30:46 | 显示全部楼层
有源码能参考一下吗  万分感激
回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
 楼主| 发表于 2021-11-6 15:39:48 | 显示全部楼层
fengxiaoyu 发表于 2021-11-4 14:30
有源码能参考一下吗  万分感激

是关于gc0308部分的吗?
回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
 楼主| 发表于 2021-11-6 15:47:36 | 显示全部楼层
fengxiaoyu 发表于 2021-11-4 14:30
有源码能参考一下吗  万分感激

放到置顶了 iic gc0308 中断 有点乱,全部差不多就这么多了。希望对你有参考价值
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2014-1-13
在线时间
47 小时
发表于 2021-11-6 16:15:20 | 显示全部楼层
wangertan 发表于 2021-11-6 15:47
放到置顶了 iic gc0308 中断 有点乱,全部差不多就这么多了。希望对你有参考价值

感谢,我已经搞定了,感谢
回复

使用道具 举报

0

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
344
金钱
344
注册时间
2018-3-20
在线时间
74 小时
发表于 2022-7-3 11:21:19 | 显示全部楼层
感谢大佬         
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 15:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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