采用的是RGB565格式,通过STM32采集像素点,每个像素点是16位,设置了一个外部SRAM的60K左右的数据,将每个像素点以16位的格式存储进该数组,然后当每存储完一帧图像就通过串口1传向上位机,但发现,上位机显示的图片是黑白的,可我发送的是RGB565格式像素点,请问是否不能设置RGB565发送,还是我的程序上的问题,如下为部分程序:
#define Color_Space 70*1024
u16 Picture_Color[Color_Space] __attribute__((at(0X68000000)));
void Send_0ne_Buf(USART_TypeDef* USARTx,u8 c)//·???????×?·??¨8???©
{
assert_param(IS_USART_ALL_PERIPH(USARTx));
USART_SendData(USARTx, c);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)!=SET);//??????·?·????ê????
}
void Send_Picture(USART_TypeDef* USARTx,uint16_t *c)//·??????????????ú
{
u32 i;
u16 *p;
p=c;
assert_param(IS_USART_ALL_PERIPH(USARTx));
Send_0ne_Buf(USARTx,0x01);//?????ú??é
while(*p!='\0')
{
USART_SendData(USARTx, *p);//?®??·???????
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)!=SET);//??????·?·????ê????
p++;
}
Send_0ne_Buf(USARTx,0x01);
}
//?ü??LCD????
//?????????????·???éFIFO????????????????????LCD????
void camera_refresh(void)
{
u32 j;//?è???????????????????è????????
u16 color;//??·????????????é??????????????16????????×é????
// u16 *Picture_Color;
//  icture_Color=(u16*)mymalloc(SRAMEX,20*1024);//?ê??150K????
// while(Picture_Color==NULL)
// {
// LCD_ShowString(60,170,200,16,16,"mymalloc=NULL");
// return;
// }
if(ov_sta==2)//OV_STA=2?????÷????????????????ê±???????????????????
{
LCD_Scan_Dir(U2D_L2R); //????????,??×ó????
LCD_SetCursor(0x00,0x0000); //?è????±ê????
LCD_WriteRAM_Prepare(); //????????GRAM
OV7670_RRST=0; //??????????????,??????????
OV7670_RCK=0;
OV7670_RCK=1; ////???????±??
OV7670_RCK=0;
OV7670_RRST=1; //???????????á??,????????????????×?×?±?
OV7670_RCK=1; //?è?????±?ò??±à??
for(j=0;j<76800;j++)//QVGA,??????240*320=76800?????????ò???è????·76800????°??ù????????????,?è??????????????J????·??????
{
OV7670_RCK=0; //OV7670_RCK:???????±??,??FIFO???????±??
color=GPIOC->IDR&0XFF; //??????????°???
OV7670_RCK=1; //
color<<=8;
OV7670_RCK=0; //??FIFO???????®??
color|=GPIOC->IDR&0XFF; //??????,?÷??????????????16????????
OV7670_RCK=1;
LCD->LCD_RAM=color;//°???????LCD??????
  icture_Color[j]=color;
}
  icture_Color[j]='\0';
Send_Picture(USART1,Picture_Color);//·????????????????ú
// myfree(SRAMEX,& icture_Color[0]);//??·???????
EXTI_ClearITPendingBit(EXTI_Line8); //????LINE8????????±ê????
ov_sta=0; //??????????????
ov_frame++; //??????????????????????????í?????????¨?±?÷???????á·?????????????PC???í???á??0
LCD_Scan_Dir(DFT_SCAN_DIR); //?????????¨?è·??ò
}
}
上位机采集的图像如下:
请问是否传送像素点的过程错误了,还是采集的16位像素错了。图案是依稀可见,但不知道显示的是黑白的,而且不清晰,OV7670的寄存器,我没修改,采用的战舰板提供的配置,320*240,RGB565格式。麻烦各位大神帮忙解决解决,谢谢。
|