请问原子哥,最近在做用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]
多谢原子哥了!
一周热门 更多>