用STM32mini板做OV7670的扩展实验为什么串口收不到数据

2019-08-18 19:51发布

请问原子哥,最近在做用STM32mini板和OV7670摄像头的串口实验,把RGB值通过串口传给电脑,参考了下http://www.openedv.com/posts/list/12583.htm帖子,有些收获,但是为什么串口收不到得到的RGB值呢?换了个例程测试了下串口可以收到数据,但为什么不能接收到RGB值呢?
下面是修改后的源码,大多数参考上面那个帖子:
[mw_shl_code=c,true]void camera_refresh(void) { u32 j,i; u16 color,color1,color2; u16 r,g,b; if(ov_sta==2) { LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右 LCD_SetCursor(0x00,0x0000); //设置光标位置 LCD_WriteRAM_Prepare(); //开始写入GRAM OV7670_RRST=0; //开始复位读指针 OV7670_RCK_L; OV7670_RCK_H; OV7670_RCK_L; OV7670_RRST=1; //复位读指针结束 OV7670_RCK_H; for(j=0;j<76800;j++) { OV7670_RCK_L; color = GPIOC->IDR&0XFF; //读数据 OV7670_RCK_H; color=color1; color<<=8; OV7670_RCK_L; color = GPIOC->IDR&0XFF; //读数据 OV7670_RCK_H; color|=color2; LCD->LCD_RAM=color; // printf("%d,",color1); // printf("%d ",color2); r= color1 & 0xF8; g=((color1 &0x07 )<<3 | (color2 & 0xe0 ) >>5 ) << 2; b=(color2 & 0x1f )<<3; printf(",%d,%d,%d, ",r,g,b); } } EXTI->R=1<<8; //清除LINE8上的中断标志位 ov_sta=0; //开始下一次采集 ov_frame++; // LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向 } int main(void) { u8 lightmode=0,saturation=2,brightness=2,contrast=2; u8 effect=0; u8 len; u8 t; usmart_dev.init(72); //初始化 OV7670_Init(); delay_ms(1500); OV7670_Light_Mode(lightmode); OV7670_Color_Saturation(saturation); OV7670_Brightness(brightness); OV7670_Contrast(contrast); OV7670_Special_Effects(effect); TIM6_Int_Init(10000,7199); //10Khz计数频率,1秒钟中断 EXTI8_Init(); //使能定时器捕获 OV7670_Window_Set(10,174,240,320); //设置窗口 OV7670_CS=0; delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3f;//得到此次接收到的数据长度 printf(" 您发送的消息为: "); for(t=0;t<len;t++) { USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束 } camera_refresh(); delay_ms(10); }else { printf("请输入数据,以回车键结束 "); delay_ms(10); } } } [/mw_shl_code]

多谢原子哥了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。