最近做的一個(gè)項(xiàng)目需要對攝像頭采集到的數(shù)據(jù)進(jìn)行簡單的處理,我們用的MCU是Cortex-M4 F407系列的。關(guān)于STM32F4xx的視頻處理,ST的官方給的例程是在顯示屏上直接顯示攝像頭采集到的數(shù)據(jù)。經(jīng)過了一番探索……根據(jù)官方的英文手冊、網(wǎng)友們的無私分享和對各個(gè)例程的研究。今天終于搞定了將數(shù)據(jù)采集下來。
官方給的例程中,是通過DMA將數(shù)據(jù)直接輸入到屏幕中的。DMA簡單地說就是各個(gè)設(shè)備間自動倒騰內(nèi)存的東西,轉(zhuǎn)移數(shù)據(jù)的時(shí)候并不需要CPU干涉,減少了CPU的負(fù)擔(dān)。由于所有的數(shù)據(jù)都不經(jīng)過CPU進(jìn)行干涉,如何獲取其中的數(shù)據(jù)也是倒騰了一陣子。下面講講主要代碼的配置:
在攝像頭DCMI的配置中首先根據(jù)攝像頭將各個(gè)管腳設(shè)置成需要的,這個(gè)例程里都有,不貼了。
要一幀一幀處理數(shù)據(jù)完了再獲取數(shù)據(jù),攝像頭配置中DCMI_CaptureMode要配置成快照模式:DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_SnapShot,這樣每完成一幀圖像的獲取,攝像頭就停止捕獲數(shù)據(jù)了,要想它再次捕獲數(shù)據(jù)只需要執(zhí)行DCMI_CaptureCmd(ENABLE)就可以了。
然后是攝像頭的中斷配置(DCMI_ITConfig),在中斷配置中,官方的例程是配置的垂直同步DCMI_ITConfig(DCMI_IT_VSYNC, ENABLE),通過垂直同步進(jìn)行的中斷中,獲得的數(shù)據(jù)是整幀畫面的數(shù)據(jù),我們的板子的RAM就只有192k,呵呵,一幀圖像放不進(jìn)去,所以沒有使用垂直同步中斷,用的是列數(shù)據(jù)中斷DCMI_ITConfig(DCMI_IT_LINE, ENABLE)。列數(shù)據(jù)中斷,也就是說攝像頭每采集到一列數(shù)據(jù),就在它的列中斷位(DCMI_IT_LINE位)上置1。我們這個(gè)攝像頭采集的數(shù)據(jù)是240*320像素的16位色圖像。也就是說每次攝像頭產(chǎn)生列中斷的時(shí)候都會采集到320個(gè)16位的數(shù)據(jù)。在每次列中斷發(fā)生時(shí)都在列中斷的中斷服務(wù)中對數(shù)據(jù)進(jìn)行處理就ok啦。
在官方給的例程文件中stm32f4xx_it.c是用來放各個(gè)中斷服務(wù)的文件。攝像頭的中斷服務(wù)在void DCMI_IRQHandler(void)函數(shù)里面,我們這用到的列中斷,所以對其中的if (DCMI_GetITStatus(DCMI_IT_LINE) != RESET) 進(jìn)行添加代碼即可,最后不要忘了清除攝像頭的列中斷標(biāo)志DCMI_ClearITPendingBit(DCMI_IT_LINE)。
為了能夠更有效的利用CPU的資源,當(dāng)然不要丟了DMA這神器。下面進(jìn)行DMA的配置。官方例程中需要改的的地方是DMA_InitStructure.DMA_Memory0BaseAddr = FSMC_LCD_ADDRESS這個(gè)地方,F(xiàn)SMC_LCD_ADDRESS是LCD屏幕的地址,我們這里要把數(shù)據(jù)取下來,得弄個(gè)數(shù)組存放數(shù)據(jù)。這里我弄了個(gè)全局的數(shù)組變量uint16_t fps[320],每個(gè)像素16位數(shù)據(jù)RGB--5:6:5,每列320個(gè)數(shù)據(jù)。所以DMA_Memory0BaseAddr參數(shù)就是這么配置DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)fps。DMA_MemoryInc要設(shè)置成DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable。這是目的地址寫入后自增指針的配置。這樣數(shù)據(jù)才能往fps數(shù)組里排著寫入。
設(shè)置的理論基本說完了。下面上代碼
DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_SnapShot;//快照模式
DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;//硬件時(shí)鐘
DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Falling;//下降沿
DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_High;//垂直極性
DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_High;//水平極性
DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame;//捕獲率
DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;//8位數(shù)據(jù)模式
DCMI_Init(&DCMI_InitStructure);//初始化上面的攝像頭配置
DCMI_ITConfig(DCMI_IT_LINE, ENABLE);//列中斷
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//中斷搶占組1
NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;//攝像頭中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//先占優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//從優(yōu)先級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//開啟中斷控制通道
NVIC_Init(&NVIC_InitStructure);//初始化上面的中斷配置
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);//使能DMA2時(shí)鐘
DMA_DeInit(DMA2_Stream1);//復(fù)位DMA2_Stream1數(shù)據(jù)流的配置
DMA_InitStructure.DMA_Channel = DMA_Channel_1;//DMA流通道
DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;//外設(shè)內(nèi)存地址
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)fps;//內(nèi)存地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//數(shù)據(jù)方向從外設(shè)到內(nèi)存
DMA_InitStructure.DMA_BufferSize = 320;//每次轉(zhuǎn)移320數(shù)據(jù),每個(gè)數(shù)據(jù)的位數(shù)根據(jù)目的地設(shè)置定
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外設(shè)地址不改變
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//內(nèi)存地址在每次寫入后自增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//外設(shè)每單位長度_Word是32位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//內(nèi)存每單位長度_HalfWord是16位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//運(yùn)行模式,循環(huán)
DMA_InitStructure.DMA_Priority = DMA_Priority_High;//優(yōu)先模式,高
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;//開啟先入先出模式
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;//FIFO水平閾值
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//內(nèi)存單通道
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外設(shè)單通道
DMA_Init(DMA2_Stream1, &DMA_InitStructure);//初始化上面的DMA配置
void DCMI_IRQHandler(void)//攝像頭的中斷服務(wù)
{
if (DCMI_GetITStatus(DCMI_IT_VSYNC) != RESET)//垂直中斷的配置 需要DCMI_ITConfig(DCMI_IT_VSYNC, ENABLE);
{
DCMI_ClearITPendingBit(DCMI_IT_VSYNC);
}
if (DCMI_GetITStatus(DCMI_IT_LINE) != RESET)//列中斷的配置 需要DCMI_ITConfig(DCMI_IT_LINE, ENABLE);
{
DCMI_ClearITPendingBit(DCMI_IT_LINE);
}
if (DCMI_GetITStatus(DCMI_IT_FRAME) != RESET)//幀中斷的配置 需要DCMI_ITConfig(DCMI_IT_FRAME, ENABLE);
{
DCMI_ClearITPendingBit(DCMI_IT_FRAME);
}
if (DCMI_GetITStatus(DCMI_IT_ERR) != RESET)//錯誤中斷的配置 需要DCMI_ITConfig(DCMI_IT_ERR, ENABLE);
{
DCMI_ClearITPendingBit(DCMI_IT_ERR);
}
}
上一篇:STM32啟動模式及IAP
下一篇:stm32f407之MyDebugger(操作寄存器)
推薦閱讀
史海拾趣
在電子行業(yè),技術(shù)創(chuàng)新是企業(yè)持續(xù)發(fā)展的關(guān)鍵。為了保持競爭力,ELMEC不斷投入研發(fā)資金,引進(jìn)高端人才,加強(qiáng)技術(shù)創(chuàng)新。他們與多所知名大學(xué)和研究機(jī)構(gòu)建立合作關(guān)系,共同開展前沿技術(shù)研究。這些努力使得ELMEC在人工智能、物聯(lián)網(wǎng)等新興領(lǐng)域取得了多項(xiàng)重要突破,為公司的發(fā)展注入了新的活力。
港源公司在國內(nèi)外市場的拓展上取得了顯著成就。公司在全國設(shè)有多個(gè)銷售公司和分支機(jī)構(gòu),并在國外如日本、韓國、馬來西亞、巴西等地設(shè)立了分公司和銷售總代理,形成了完善的銷售網(wǎng)絡(luò)。這種全球化布局不僅使港源公司能夠更好地服務(wù)全球客戶,還為公司帶來了更多的國際合作機(jī)會和市場資源。通過參加國際展覽會等方式,港源公司全方位地展示了自身的研發(fā)、制造、銷售和服務(wù)實(shí)力,進(jìn)一步提升了品牌知名度和市場影響力。
埃派克森微電子的創(chuàng)立可追溯到2002年,由高勇回國并帶領(lǐng)一支團(tuán)隊(duì)創(chuàng)立。作為一家初創(chuàng)公司,埃派克森在創(chuàng)立初期就明確了以模擬系統(tǒng)級芯片為突破口的發(fā)展戰(zhàn)略。通過不斷的研發(fā)和創(chuàng)新,埃派克森成功開發(fā)了多款具有競爭力的芯片產(chǎn)品,逐漸在亞太與國際市場嶄露頭角。這一階段,公司的創(chuàng)新精神和堅(jiān)持不懈的努力為后來的發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。
自2002財(cái)年以來,埃派克森微電子的業(yè)績呈現(xiàn)出連續(xù)增長的態(tài)勢。公司憑借出色的產(chǎn)品性能和市場競爭力,成功打入多家國內(nèi)外知名企業(yè),逐漸在目標(biāo)市場占據(jù)了一席之地。經(jīng)過數(shù)年的發(fā)展,埃派克森在全球模擬芯片供應(yīng)商中已占據(jù)重要地位,其產(chǎn)品在通訊核心芯片、多媒體電子、消費(fèi)電子、汽車電子等領(lǐng)域均有著廣泛的應(yīng)用。
作為一家具有社會責(zé)任感的企業(yè),埃派克森微電子在發(fā)展過程中始終關(guān)注社會公益事業(yè)。在四川汶川地震發(fā)生后,公司積極發(fā)起救援捐贈活動,通過中國扶貧基金會為災(zāi)區(qū)捐款10萬元,幫助受災(zāi)民眾度過難關(guān)。這一行動體現(xiàn)了埃派克森的社會責(zé)任感和人文關(guān)懷精神,也為公司在社會中樹立了良好的形象。
這五個(gè)故事展示了埃派克森微電子在電子行業(yè)中的發(fā)展歷程和取得的成就。從創(chuàng)新起步到專利技術(shù)的突破與商用,再到業(yè)績的連續(xù)增長和國際化步伐的加快,以及積極履行社會責(zé)任的公益行動,都充分展現(xiàn)了埃派克森微電子的實(shí)力和擔(dān)當(dāng)。未來,隨著科技的不斷進(jìn)步和市場需求的不斷變化,埃派克森微電子將繼續(xù)保持創(chuàng)新精神,不斷提升產(chǎn)品性能和市場競爭力,為電子行業(yè)的發(fā)展做出更大的貢獻(xiàn)。
在埃派克森微電子的發(fā)展過程中,著名投資機(jī)構(gòu)多爾基金和華登國際的風(fēng)險(xiǎn)投資起到了重要的推動作用。這些投資不僅為公司提供了資金支持,還帶來了寶貴的市場資源和管理經(jīng)驗(yàn)。借助這些資源,埃派克森加快了國際化步伐,積極拓展海外市場,與全球范圍內(nèi)的客戶和合作伙伴建立了緊密的合作關(guān)系。
單片機(jī)音樂程序的設(shè)計(jì)與實(shí)驗(yàn) 利用單片機(jī)(或單板機(jī))奏樂大概是無線電愛好者感興趣的問題之一。本文從單片機(jī)的基本發(fā)間實(shí)驗(yàn)出發(fā),談?wù)勔魳烦绦虻脑O(shè)計(jì)原理,并給出具體實(shí)例,以供參考。 1.單片機(jī)的基本發(fā)音實(shí)驗(yàn) 我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來 ...… 查看全部問答∨ |
請教一下,PCB中的焊盤跟過孔在應(yīng)用上有什么區(qū)別???焊盤的中間必須有一個(gè)過孔嗎?畫PCB圖自制元件時(shí)要加貼片的焊盤用工具欄里的焊盤把中間的過孔去掉呢還是自己隨便畫個(gè)方形呢?請高手指點(diǎn)一下啊!謝謝了!… 查看全部問答∨ |
各位大哥,請幫我看看這個(gè) IC 卡(SLE4442卡)問題???謝謝 1: 向 IC 卡里寫數(shù)據(jù) 是不是必須通過效驗(yàn)了才能寫啊? 2: 效驗(yàn) 到底是效驗(yàn)什么東西? 是密碼,還是? 3: 假設(shè)有人自己做個(gè)寫卡器, 想卡里寫個(gè)很大的數(shù)據(jù), 然后做到您的讀卡器里讀 這樣,就不行了 怎么防止這樣的情況啊 是不是在卡里 ...… 查看全部問答∨ |
|
繼續(xù)上一個(gè)帖子的內(nèi)容。主要講基于MSP430構(gòu)建觸摸按鍵的方式。大家有什么建議意見都可以說,純交流學(xué)習(xí)… 查看全部問答∨ |
|
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌穩(wěn)居微控制器領(lǐng)域榜首,鞏固其在全球車用半導(dǎo)體市場的領(lǐng)導(dǎo)地位
- 迅為imx6ull開發(fā)板使用c語言調(diào)用shell命令控制led燈
- 迅為IMX8MM開發(fā)板Android編譯環(huán)境搭建
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的使用
- 迅為ITOP4412開發(fā)板Qt界面添加圖片
- 迅為IMX6開發(fā)板OTA遠(yuǎn)程升級-SWUpdata概述和使用
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的搭建
- 迅為IMX6開發(fā)板Buildroot文件系統(tǒng)4G撥號上網(wǎng)工具測試
- 實(shí)驗(yàn)分享丨迅為IMX6ULL開發(fā)板點(diǎn)亮第一個(gè)led燈
- TDK推出第一款嵌入式柵極驅(qū)動器- 加強(qiáng)EV熱系統(tǒng)效率
- LAB后輪轉(zhuǎn)向排行榜:從高端到普及,后輪轉(zhuǎn)向也要白菜化了
- 子彈都不怕的動力電池,為何碰撞還起火?
- 從18650到21700再到大圓柱電池 新電池帶來什么好處?
- 國外機(jī)器人選手Apptronik:無縫接入“人類工人崗位”
- 孚能科技/清陶能源等企業(yè)固態(tài)電池專利“曝光”!
- 固態(tài)電池目前的消費(fèi)者是股民,你要的量產(chǎn)車還早
- 重磅!全固態(tài)電池國家戰(zhàn)略全面啟動
- 方案解讀 | X9SP 單芯片艙泊一體
- 用于車身控制模塊中 22 路多開關(guān)檢測接口(MSDI)芯片 SGMCD1020Q
- OPPO一次推兩款藍(lán)牙耳機(jī),計(jì)劃4月13日開售
- 三星SK中國半導(dǎo)體工廠“無異?!?免遭中美貿(mào)易戰(zhàn)打擊
- 官宣7款機(jī)型已開啟EMUI10.1公測
- 并購狂人趙偉國辭職 “芯片帝國”夢醒一場空?
- 英特爾:制程回歸兩年更新周期,20年實(shí)現(xiàn)7nm產(chǎn)品首發(fā)
- 臺積電與三星的下一個(gè)賽點(diǎn):3nm技術(shù)
- 車用芯片迎來缺貨危機(jī),但尚未影響整體車市
- SIA評中國半導(dǎo)體發(fā)展態(tài)勢:銷量很大,但終端需求不足
- 四大新變化,回顧我國無人機(jī)的2020
- 中國在5G、AI等領(lǐng)域?qū)γ绹o追不舍,但設(shè)備工藝依舊落后