piaoran1314 发表于 2018-5-12 12:13:26

全功能智能车之CCD初步实现并发送数据到上位机(第十二篇)

全功能智能车之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 */
}
http://img.blog.csdn.net/20151128120015776?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

http://img.blog.csdn.net/20151128114342681?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
发送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=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=0xff;
            SendImageData(Pixelu8);
      }

      LED0=!LED0;
      delay_ms(500);   
    }
}在这里补充数据帧
实验图片:
http://img.blog.csdn.net/20151128120511516?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20151128122040153?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20151128122046382?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20151128122052099?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Centerhttp://img.blog.csdn.net/20151128122058278?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center


程序源码如下:
http://download.csdn.net/detail/chengdong1314/9307399


页: [1]
查看完整版本: 全功能智能车之CCD初步实现并发送数据到上位机(第十二篇)