找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4685|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

死磕到底—STM32F103驅(qū)動無FIFO無時鐘ov7670

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:716413 發(fā)表于 2020-6-21 15:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、攝像頭一定要提供時鐘,我用定時器產(chǎn)生兩個頻率的時鐘
      1、18M供初始化用,我反復(fù)試驗我的這個攝像頭,12M不能工作,18M到24M都行。
void XCLK_Output_ON(void
{
   // 利用TIM3_CH2在PA7上為攝像頭XCLK提供18MHz的時鐘        12M不行
        
  RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
  //AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_1;  //設(shè)置TIM3_CH2部分重映射到PB5上不映射就在PA7。
  //GPIOB->CRL = (GPIOB->CRL & 0xff0fffff) | 0xb00000; // PB5設(shè)為復(fù)用推挽輸出
  GPIOA->CRL = (GPIOA->CRL & 0x0fffffff) | 0xb0000000; // PA7設(shè)為復(fù)用推挽輸出
        
  TIM3->ARR = 3; // 72MHz/(3+1)=18MHz (5+1=12M)
  TIM3->PSC = 0; // 不分頻
  TIM3->EGR = TIM_EGR_UG;

  TIM3->CCR2 = 1; // 決定占空比
  TIM3->CCMR1 = TIM_CCMR1_OC2M; // PWM2模式
  TIM3->CCER = TIM_CCER_CC2E; // 打開輸出比較
  TIM3->CR1 = TIM_CR1_CEN; // 打開定時器
}        

   2、攝像頭工作用時鐘,當(dāng)然低點(diǎn)好,但是72M/26=2.76M不穩(wěn)定,再低就不能工作,用72M/25=2.88M
void XCLK_Output_ON8(void) // 關(guān)定時器
{        
   // 利用TIM3_CH2在PA7上為攝像頭XCLK提供2.88MHz的時鐘        取數(shù)用
                TIM3->CR1 = TIM_CR1_UDIS ; // 關(guān)定時器
        
  RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
  //AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_1;  //設(shè)置TIM3_CH2部分重映射到PB5上不映射就在PA7。
  //GPIOB->CRL = (GPIOB->CRL & 0xff0fffff) | 0xb00000; // PB5設(shè)為復(fù)用推挽輸出
  GPIOA->CRL = (GPIOA->CRL & 0x0fffffff) | 0xb0000000; // PA7設(shè)為復(fù)用推挽輸出
        
  TIM3->ARR = 24; // 72MHz/(24+1) =
  TIM3->PSC = 0; // 分頻(72/9/8)=1
  TIM3->EGR = TIM_EGR_UG;

  TIM3->CCR2 = 1; // 決定占空比
  TIM3->CCMR1 = TIM_CCMR1_OC2M; // PWM2模式
  TIM3->CCER = TIM_CCER_CC2E; // 打開輸出比較
  TIM3->CR1 = TIM_CR1_CEN; // 打開定時器
}


二、攝像頭取數(shù)據(jù)是關(guān)鍵,越快越好,我把無關(guān)的都減掉,可移動的語句移到前邊去,
      本來要取連續(xù)的兩個數(shù),我也只取一個,只能得到一個紅色的圖像。

while(1){
                while(OV7670_VSYNC==0);//
                while(OV7670_VSYNC==1);//                只有在VSYNC為低時,才傳輸數(shù)據(jù)
                          GPIOB->CRL=0X88888888; //上拉下拉輸入        GPIOB
        
                for(i=0;i<240;i++)               
                {
                        while(OV7670_HREF==0);
                        for(j=0;j<320;j++)
                        {                                 
                          // GPIOB->CRL=0X88888888; //上拉下拉輸入
                                while(OV7670_PCLK==0);                        
                                color=OV7670_DATA;                //讀數(shù)據(jù)
                                //while(OV7670_PCLK==1);
                                color<<=8;
                                color &=0xf800;
                           //while(OV7670_PCLK==0);   
                          //color|=OV7670_DATA;                //讀數(shù)據(jù)               
                           //while(OV7670_PCLK==1);
                                // GPIOB->CRL=0X33333333;                //推挽輸出50M                                          
                        LCD_WriteData_Color(color);
                         }         
                 }                                          
  }

     這部分在MAIN文件中,這個文件二級優(yōu)化,可以加快速度。我的開發(fā)板顯示二級優(yōu)化會出問題,所以只優(yōu)化這個文件。
     我也是在優(yōu)化后才建立的信心。
    編譯,運(yùn)行,圖像出來了,紅色的,數(shù)據(jù)還有些錯誤,大概是個影子吧。
   貼上整個項目,歡迎大家交流!
pzOV7670.7z (534.39 KB, 下載次數(shù): 128)




評分

參與人數(shù) 2黑幣 +80 收起 理由
殘...月 + 30 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:716413 發(fā)表于 2020-6-21 17:45 | 只看該作者
攝像頭設(shè)置為2分頻,就容易處理了
回復(fù)

使用道具 舉報

板凳
ID:970326 發(fā)表于 2021-10-9 17:31 | 只看該作者
目前還沒學(xué)到這么高級的呢,等能力再提升提升再來看。
回復(fù)

使用道具 舉報

地板
ID:970600 發(fā)表于 2021-10-10 18:23 | 只看該作者
請問怎么把數(shù)據(jù)傳到PC端
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表