|
全功能智能车之CCD初步实现并发送数据到上位机
这其中的上位机是PC端的上位机程序,用的是红树伟业的电脑上位机软件
代码说明:
CCD初始化
void CCD_init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
GPIOA->CRL&=0XFFF00FF; //PA2 CLK PA3 SI
GPIOA->CRL|=0XFFF33FF; //PA2 CLK PA3 SI
GPIOE->ODR|=3<<2; //PE.5输出高
Adc_Init(); //ADC初始化 PA1 anolog输入
}
注意这里一定要初始化端口为输出模式
CCD采集数据:
void ImageCapture(unsigned short * ImageData) {
unsigned char i;
CCD_SI=1; /* SI = 1 */
SamplingDelay();
CCD_CLK=1; /* CLK = 1 */
SamplingDelay();
CCD_SI=0; /* SI = 0 */
SamplingDelay();
//Delay 10us for sample the first pixel
delay_us(10);
//Sampling Pixel 1
*ImageData=Get_Adc(ADC_CH1);
//*ImageData = ad_once(ADC1, AD6b, ADC_8bit);
ImageData ++ ;
CCD_CLK=0; /* CLK = 0 */
for(i=0; i<127; i++) {
SamplingDelay();
SamplingDelay();
CCD_CLK=1; /* CLK = 1 */
SamplingDelay();
SamplingDelay();
//Sampling Pixel 2~128
*ImageData=Get_Adc(ADC_CH1);
ImageData ++ ;
CCD_CLK=0; /* CLK = 0 */
}
SamplingDelay();
SamplingDelay();
CCD_CLK=1; /* CLK = 1 */
SamplingDelay();
SamplingDelay();
CCD_CLK=0; /* CLK = 0 */
}
发送CCD数据:
void SendImageData(unsigned char * ImageData) {
unsigned char i;
/* Send Data */
for(i=0; i<129; i++) {
uart_putchar(USART1,*ImageData++);
}
}
格式说明:
每个像素为用一个字节表示,0x00最示最暗,0xfe最示最亮。每一帧为129字节,并以 0xFF 代表结束,格式如下:
01 02 AB.......................... FF
每一帧由的前128字节为像素值,最后以0xFF 代表结束。前128字节中不允许出现0xff,如果下位机采集到了值为 0xFF 的点,为了防止与结束字节混淆,务必将该值改为0xFE 。
整体程序:
int main(void)
{
u16 i,cnt;
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
usmart_dev.init(72); //初始化USMART
CCD_init(); //初始化CCD
//初始化数据
for(i=0; i<128; i++) {
Pixel=0;
Pixelu8=0;
}
Pixelu8[128]=0xff;
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"ADC TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2012/9/7");
while(1)
{
//0x00代表最暗,0xfe代表最亮
delay_ms(20);
ImageCapture(Pixel);
if(++cnt >= 5) {
cnt = 0;
for(i=0; i<128; i++) {
Pixelu8 = (u8)(Pixel>>4);
if(Pixelu8==0xff) Pixelu8=0xfe;
}
Pixelu8[128]=0xff;
SendImageData(Pixelu8);
}
LED0=!LED0;
delay_ms(500);
}
}在这里补充数据帧
实验图片:
程序源码如下:
http://download.csdn.net/detail/chengdong1314/9307399
|
|