程序是使用原子哥的摄像头例程,为了每次只发一张所以只把void jpeg_test(void)里面的while(1)改成了以下内容
key=KEY_Scan(0);
switch(key)
{
case KEY0_PRES:
if(jpeg_data_ok==1) //ÒѾ­²É¼¯Íêһ֡ͼÏñÁË
{
p=(u8*)jpeg_buf;
LCD_ShowString(30,210,210,16,16,"Sending JPEG data..."); //ÌáʾÕýÔÚ´«ÊäÊý¾Ý
for(i=0;i<jpeg_data_len*4;i++) //dma´«Êä1´ÎµÈÓÚ4×Ö½Ú,ËùÒÔ³ËÒÔ4.
{
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
USART_SendData(USART2,p[i]);
}
LCD_ShowString(30,210,210,16,16,"Send data complete!!");//Ìáʾ´«Êä½áÊøÉèÖÃ
jpeg_data_ok=2; //±ê¼ÇjpegÊý¾Ý´¦ÀíÍêÁË,¿ÉÒÔÈÃDMAÈ¥²É¼¯ÏÂÒ»Ö¡ÁË.
}
}
非常奇怪的是,C#的上位机在接收单片机重启后的第一张图片可以显示,后面的一律都是参数无效。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
暂时问题的解决办法。第一次发送完成后,将
OV2640_JPEG_Mode();
My_DCMI_Init();
DCMI_DMA_Init((u32)&jpeg_buf,jpeg_buf_size,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);
OV2640_OutSize_Set(jpeg_img_size_tbl[size][0],jpeg_img_size_tbl[size][1]);
DCMI_Start();
重新初始化。
并让jpeg_data_ok一直在0和1.不进入if(jpeg_data_ok==2) {
DMA2_Stream1->NDTR=jpeg_buf_size;
DMA_SetCurrDataCounter(DMA2_Stream1,jpeg_buf_size);//´«Ê䳤¶ÈΪjpeg_buf_size*4×Ö½Ú
DMA_Cmd(DMA2_Stream1, ENABLE); //ÖØд«Êä
jpeg_data_ok=0; //±ê¼ÇÊý¾Ýδ²É¼¯
}
暂时可以行。希望大神讲解一番。这样解决问题也不是办法
一周热门 更多>