本文闡述一種基于STM32F407的圖像遠(yuǎn)程采集終端,分別從終端采集硬件設(shè)計(jì)和終端采集軟件設(shè)計(jì)兩方面進(jìn)行論述,并借助實(shí)驗(yàn)驗(yàn)證該采集終端的有效性和合理性。
1、終端采集硬件設(shè)計(jì)
系統(tǒng)的主體框圖如圖1所示,它主要由STM32F407芯片、OV7670CMOS圖像傳感器和上位機(jī)軟件等幾個(gè)重要部分組成。STM32F407是整個(gè)遠(yuǎn)程采集終端的核心,起到了承上啟下的關(guān)鍵作用,一方面它將完成底層信號(hào)的獲取和預(yù)處理,另一方面它將通過(guò)網(wǎng)絡(luò)將采集到的彩色圖像數(shù)據(jù)實(shí)時(shí)傳送到上位機(jī),本文將重點(diǎn)介紹這兩部分的內(nèi)容。
圖1 ?系統(tǒng)主體框圖
1.1、STM32F407與OV7670的硬件連接
在圖2中,利用STM32F407的PH9~PH12、PH14,PI4、PI6、PI7接口接收OV7670經(jīng)DCMI接口輸出的8位圖像數(shù)據(jù)。OV7670的SIO_C和SIO_D接口分別與STM32F407PF8、PF9引腳相連,通過(guò)該接口實(shí)現(xiàn)對(duì)攝像頭的初始化配置。OV7670CMOS攝像頭配置COM7寄存器實(shí)現(xiàn)采集到的是RGB565的16位圖像數(shù)據(jù),通過(guò)DMA將數(shù)據(jù)傳輸?shù)綀D像數(shù)據(jù)緩沖區(qū),當(dāng)垂直同步中斷到來(lái)時(shí)表示緩沖區(qū)中已存滿一幀圖像數(shù)據(jù),控制器取出圖像數(shù)據(jù)緩沖去的數(shù)據(jù)進(jìn)行后續(xù)的處理,然后傳輸?shù)缴衔粰C(jī)。攝像頭與STM32F407的連接圖如圖2所示:
圖2 ?OV7670與STM32F407連接電路圖
1.2、STM32F407以太網(wǎng)通信接口電路
以太網(wǎng)通信接口模塊是由CPU所內(nèi)置的以太網(wǎng)MAC、專用10/100MPHYLAN8720A、HR11105A以及RJ45網(wǎng)口組成。以太網(wǎng)物理層器件LAN8720A作為TCP/IP協(xié)議的物理層器件。HR911105A為RJ45網(wǎng)絡(luò)接口器件。當(dāng)上位機(jī)PC有數(shù)據(jù)要求時(shí),數(shù)據(jù)請(qǐng)求指令首先通過(guò)雙絞線、HR911105A和STM32F407的以太網(wǎng)模塊進(jìn)入控制器,指令數(shù)據(jù)在其內(nèi)部進(jìn)行格式轉(zhuǎn)換至SPI格式,然后通過(guò)SPI總線送至STM32F407,在STM32F407內(nèi)實(shí)現(xiàn)SPI格式數(shù)據(jù)到以太網(wǎng)數(shù)據(jù)的轉(zhuǎn)換。完成IP封裝后的數(shù)據(jù)經(jīng)過(guò)STM32F407的以太網(wǎng)模塊、LAN8720A及HR911105A接口和雙絞線傳送至上位機(jī)。芯片引腳連接圖如圖3。
圖3 ?LAN8720A與STM32F407硬件連接電路示意圖
2、終端采集軟件設(shè)計(jì)
軟件設(shè)計(jì)主要包括在STM32F407上實(shí)現(xiàn)TCP/IP協(xié)議并與上位機(jī)通信,控制OV7670CMOS圖像傳感器實(shí)現(xiàn)圖像數(shù)據(jù)的采集和傳輸?shù)裙ぷ?。STM32F407程序設(shè)計(jì)在KeiluVision4環(huán)境下實(shí)現(xiàn),主要包括以下兩部分:一是OV7670完成模擬信號(hào)的采集;二是遠(yuǎn)程傳輸數(shù)據(jù)的實(shí)現(xiàn)。本文主要介紹STM32F407程序的實(shí)現(xiàn)方法。
2.1、OV7670完成模擬信號(hào)的采集
在圖像采集軟件設(shè)計(jì)中,對(duì)系統(tǒng)各個(gè)部分的初始化是最為關(guān)鍵的一步,只有對(duì)各部分初始化成功以后,才能實(shí)現(xiàn)圖像采集功能。圖像采集初始化程序主要包括對(duì)系統(tǒng)時(shí)鐘、SCCB接口、DMA、DCMI接口、OV7670攝像頭等的初始化。在系統(tǒng)初始化設(shè)置成功以后,微控制器不斷監(jiān)測(cè)VSYNC信號(hào)電平變化,根據(jù)VSYNC產(chǎn)生的中斷情況,控制對(duì)數(shù)據(jù)的讀取。終端圖像采集程序流程圖如圖4所示:
圖4 ?圖像采集程序流程圖
(1)設(shè)置SCCB的相關(guān)參數(shù)
由于對(duì)攝像頭工作參數(shù)的配置主要通過(guò)SCCB來(lái)實(shí)現(xiàn),因此,在系統(tǒng)進(jìn)行軟件設(shè)計(jì)時(shí),首先設(shè)計(jì)SCCB相關(guān)程序,進(jìn)而通過(guò)SCCB設(shè)置攝像頭的相關(guān)參數(shù)。SCCB設(shè)計(jì)的重要函數(shù)如下。
voidsccb_bus_init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;//結(jié)構(gòu)體初始化
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//使能GPIOF時(shí)鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//SCCB_SIC:PE2、SCCB_SID:PE3
GPIO_InitStructure.GPIO_M(jìn)ode=GPIO_M(jìn)ode_OUT;//設(shè)置為輸出
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//設(shè)置為推免模式
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//懸浮模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz時(shí)鐘頻率
GPIO_Init(GPIOF,&GPIO_InitStructure);}
(2)OV7670的寄存器的配置
在完成SCCB初始化、起始與停止等相關(guān)程序后,配置OV7670寄存器完成工作參數(shù)的設(shè)置,包括顯示模式、輸出格式、增益控制等。OV7670的寄存器配置如下:
constuint8_tOV7670_reg[OV7670_REG_NUM][2]={
{0x12,0x14};//設(shè)為VGA顯示模式
{0x40,0xd0};//RGB565輸出格式
{0x3e,0x00};//PCLK不分頻
{0x71,0x00};//非測(cè)試模式
/*圖像分辨率的配置*/
{0x32,0x80},
{0x17,0x16},
{0x18,0x04},
{0x19,0x02},
{0x1a,0x7a},
{0x03,0x03},......}
(3)DCMI接口及DMA部分配置
DCMI接口及DMA部分配置主要體現(xiàn)在DCMI接口、DMA控制器以及圖像傳感器用到的其他I/O端口所在時(shí)鐘總線使能方面;由于篇幅所限,現(xiàn)將一些重要的配置,僅供參考。
DCMI_InitStructure.DCMI_CaptureMode=DCMI_CaptureMode_Continuous;//連續(xù)模式
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_VSYNC,ENABLE);//垂直同步中斷
DMA_InitStructure.DMA_PeripheralBaseAddr=DCMI_DR_ADDRESS;//外設(shè)內(nèi)存地址
DMA_InitStructure.DMA_M(jìn)emory0BaseAddr=(uint32_t)DataBuf;//內(nèi)存地址
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralToMemory;//數(shù)據(jù)方向從外設(shè)到內(nèi)存
DMA_InitStructure.DMA_BufferSize=19200;//每次轉(zhuǎn)移一幀數(shù)據(jù)
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外設(shè)地址不改變
DMA_InitStructure.DMA_M(jìn)emoryInc=DMA_M(jìn)emoryInc_Enable;//內(nèi)存地址在每次寫入后自增
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word;//外設(shè)每單位長(zhǎng)度DMA_InitStructure.DMA_M(jìn)emoryDataSize
=DMA_M(jìn)emoryDataSize_HalfWord;//內(nèi)存沒(méi)單位長(zhǎng)度
DMA_InitStructure.DMA_M(jìn)ode=DMA_M(jìn)ode_Circular;//運(yùn)行模式,循環(huán)
DMA_InitStructure.DMA_Priority=DMA_Priority_High;//優(yōu)先模式,高
DMA_InitStructure.DMA_FIFOMode=DMA_FIFOMode_Enable;//開(kāi)啟先入先出模式
DMA_InitStructure.DMA_FIFOThreshold=DMA_FIFOThreshold_Full;//FIFO水平閾值
DMA_InitStructure.DMA_M(jìn)emoryBurst=DMA_M(jìn)emoryBurst_Single;//內(nèi)存單通道
DMA_InitStructure.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;//外設(shè)單通道
DMA_Init(DMA2_Stream1,&DMA_InitStructure);//初始化上面的
DMA配置
DMA_ITConfig(DMA2_Stream1,DMA_IT_TC,ENABLE);//中斷開(kāi)啟
系統(tǒng)啟動(dòng)后,首先利用各部分初始化函數(shù)對(duì)系統(tǒng)進(jìn)行初始化,在整個(gè)系統(tǒng)初始化成功后,打開(kāi)系統(tǒng)中斷,準(zhǔn)備進(jìn)行圖像采集。當(dāng)垂直同步中斷產(chǎn)生時(shí),DCMI_IT_VSYNC置1,表示一幀圖像數(shù)據(jù)采集完畢,微處理器通過(guò)控制DMA將數(shù)據(jù)傳輸?shù)綌?shù)據(jù)緩沖區(qū)中,等待數(shù)據(jù)的發(fā)送。
2.2、圖像數(shù)據(jù)的遠(yuǎn)程傳輸
圖像數(shù)據(jù)的遠(yuǎn)程傳輸,最關(guān)鍵的部分是對(duì)網(wǎng)絡(luò)硬件的初始化以及對(duì)Lwip的初始化,遠(yuǎn)程傳輸程序首先是完成對(duì)Lwip協(xié)議棧的移植,然后設(shè)置好服務(wù)器端的IP地址和端口,綁定socket套接字到服務(wù)器地址,然后對(duì)客戶端進(jìn)行監(jiān)聽(tīng),當(dāng)與客戶端連接成功后,接收來(lái)自客戶端的發(fā)送數(shù)據(jù)命令,接收到發(fā)送數(shù)據(jù)命令后,及時(shí)將緩沖區(qū)存放的圖像數(shù)據(jù)通過(guò)TCP/IP協(xié)議發(fā)送到客戶端。遠(yuǎn)程傳輸程序?qū)崿F(xiàn)流程圖如圖5所示。
圖5 遠(yuǎn)程傳輸程序?qū)崿F(xiàn)流程圖
3、測(cè)試結(jié)果
?
圖6 ?遠(yuǎn)程采集終端實(shí)物圖
?
圖7 ?上位機(jī)測(cè)試結(jié)果圖
按照上述終端采集硬件和終端采集軟件的設(shè)計(jì),通過(guò)軟件調(diào)試成功后,并對(duì)軟硬件進(jìn)行實(shí)驗(yàn)驗(yàn)證,圖6表示本遠(yuǎn)程采集終端的實(shí)物圖,中間部分為信號(hào)采集處理板,它采集現(xiàn)場(chǎng)的圖像信息,并通過(guò)以太網(wǎng)的方式發(fā)送給上位機(jī),上位機(jī)通過(guò)顯示采集到的圖片,讓遠(yuǎn)程操作者實(shí)時(shí)的知道現(xiàn)場(chǎng)的情況。圖7表示上位機(jī)的測(cè)試結(jié)果。
評(píng)論
查看更多