Technorati Tags: stm32 模块资料
对于线性CCD而言,开发着更多的是基于飞思卡尔系列单片机进行开发,前几天在做项目的时候需要用到该传感器,故使用了蓝宙CCD的驱动历程,然后对蓝宙的驱动历程进行修改,移植到了stm32F103的平台下。先将.c和.h分享如下:
.c文件源码如下:本次移植是基于HAL库进行的移植,如果使用其他的库,只需要相应的修改一下CCDInitConfiguration和ADC_Configuration这两个函数的初始化内容即可。

#include "TSL1401.h"

void CCDInitConfiguration(void)

{
     GPIO_InitTypeDef GPIO_InitStructure;
    
     GPIO_InitStructure.GPIO_Pin=SI_Pin;
     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    
     GPIO_Init(SI_Port,&GPIO_InitStructure);
    
     GPIO_InitStructure.GPIO_Pin=CLK_Pin;
    
     GPIO_Init(CLK_Port,&GPIO_InitStructure);
    
     GPIO_InitStructure.GPIO_Pin=AO_Pin;
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
     GPIO_Init(AO_Port,&GPIO_InitStructure);
     ADC_Configuration();

}

void ADC_Configuration(void)

{
     ADC_InitTypeDef    ADC_InitStructure;
    
     ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC2/ADC2工作在独立模式
     ADC_InitStructure.ADC_ScanConvMode=DISABLE;//工作在单通道模式下
     ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//工作在连续模式下
     ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//转换由软件触发
     ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//右对齐模式
     ADC_InitStructure.ADC_NbrOfChannel=1;//顺序进行规则转换的 ADC 通道的数目
     ADC_Init(ADC2,&ADC_InitStructure);
     ADC_RegularChannelConfig(ADC2,A0_ADCChannel,1,ADC_SampleTime_239Cycles5);
     ADC_Cmd(ADC2,ENABLE);
    
     ADC_ResetCalibration(ADC2);//重新指定ADC的校准寄存器
     while(ADC_GetResetCalibrationStatus(ADC2));//获取ADC重置校准寄存器的状态

ADC_StartCalibration(ADC2);//开始指定 ADC 的校准状态
     while(ADC_GetCalibrationStatus(ADC2));//获取指定 ADC 的校准程序

ADC_SoftwareStartConvCmd(ADC2,ENABLE);//使能或者失能指定的 ADC 的软件转换启动功能

}

void StartIntergration(void)

{
     unsigned char i;
     SI_SetVal;
     SamplingDelay();
     CLK_SetVal;
     SamplingDelay();
     SI_ClrVal;
     SamplingDelay();
     CLK_ClrVal;
     for(i=0; i<127; i++)
     {
         SamplingDelay();
         SamplingDelay();
         CLK_SetVal;
         SamplingDelay();
         SamplingDelay();
         CLK_ClrVal;
     }
     SamplingDelay();
     SamplingDelay();
    
     CLK_SetVal;
     SamplingDelay();
     SamplingDelay();
     CLK_ClrVal;

}

void ImageCapture(unsigned char * ImageData)

{
     unsigned char i;
   extern u8 AtemP ;
     SI_SetVal;
     SamplingDelay();
     CLK_SetVal;
     SamplingDelay();
     SI_ClrVal;
     SamplingDelay();
     for(i=0;i<255;i++)
     {
         SamplingDelay();
     }
     ADC_SoftwareStartConvCmd(ADC2,ENABLE);
     while(!ADC_GetFlagStatus(ADC2,ADC_FLAG_EOC));
     *ImageData=ADC_GetConversionValue(ADC2)>>4;
     ImageData++;
     CLK_ClrVal;
     for(i=0;i<127;i++)
     {
         SamplingDelay();
         SamplingDelay();
        
         CLK_SetVal;
         SamplingDelay();
         SamplingDelay();
        
         ADC_SoftwareStartConvCmd(ADC2,ENABLE);
         while(!ADC_GetFlagStatus(ADC2,ADC_FLAG_EOC));
         *ImageData=ADC_GetConversionValue(ADC2)>>4;
         ImageData++;
         CLK_ClrVal;
     }
     SamplingDelay();
     SamplingDelay();
     CLK_SetVal;
     SamplingDelay();
     SamplingDelay();
     CLK_ClrVal;

}



void SamplingDelay(void)

{
    volatile uint8_t i ;
    for(i=0;i<1;i++)
     {
     __NOP();
     __NOP();
     }
   

}

.h文件源码如下:

#ifndef _TSL1401_H_

#define _TSL1401_H_

#include "stm32f10x_gpio.h"

#include "stm32f10x_adc.h"

//可以根据自己的需要修改响应的引脚

#define SI_Pin GPIO_Pin_0

#define SI_Port GPIOC

#define CLK_Pin GPIO_Pin_1

#define CLK_Port GPIOC

#define AO_Pin GPIO_Pin_2

#define AO_Port    GPIOC

#define A0_ADCChannel ADC_Channel_12

#define SI_SetVal   GPIO_SetBits(SI_Port,SI_Pin)

#define SI_ClrVal   GPIO_ResetBits(SI_Port,SI_Pin)

#define CLK_SetVal  GPIO_SetBits(CLK_Port,CLK_Pin)

#define CLK_ClrVal  GPIO_ResetBits(CLK_Port,CLK_Pin)

void CCDInitConfiguration(void);

void StartIntergration(void);

void ADC_Configuration(void);

void ImageCapture(unsigned char * ImageData) ;

void SendImageData(unsigned char * ImageData);

void SamplingDelay(void);

#endif

使用过程中有任何问题可以一起交流学习。

声明:本次分享源代码来源于蓝宙电子的源驱动代码,只用作交流学习,不用做商业用途。

TSL1401线性CCD TM32F103开发平台移植源代码的更多相关文章

  1. 只能用Android studio做平台移植了! 在Windows10下, 开发Android。

    安装好IDE后, 会一直显示同步失败, 看看如下步骤: 需要注意的是: -> 安装NDK      自带的NDK版本有问题    自己去下一个15版本的 -> 按照系统提示一步一步安装其他 ...

  2. minicom移植到ARM开发平台

    minicom需要ncurses库的支持.arm-linux-gcc中并没有此库故需要交叉编译ncurses,否则出现很多头文件.库函数找不到. 软件环境: ncurses-6.0 下载网址:http ...

  3. JeeSite 企业信息化快速开发平台

    平台简介 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. JeeSite本身是以Spring Framework为核心容器,Spri ...

  4. 企业信息化快速开发平台--JeeSite

    JeeSite是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Eh ...

  5. .NET:持续进化的统一开发平台

    阅读文本大概需要 8 分钟. 标题使用的是进化这个词语,是因为 .NET 在不断的努力,也在不断的重构. 这篇文章的更多目的和意义在于科普,俗称"传教". # 持续进化的 .NET ...

  6. JeeSite信息化快速开发平台

     平台简介 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. JeeSite是您快速完成项目的最佳基础平台解决方案,JeeSite是您 ...

  7. 4款java快速开发平台推荐

    JBoss Seam JBoss Seam,算得上是Java开源框架里面最优秀的快速开发框架之一. Seam框架非常出色,尤其是他的组件机制设计的很有匠心,真不愧是Gavin King精心打造的框架了 ...

  8. 搭建基于 STM32 和 rt-thread 的开发平台

    我们需要平台 如果说,SharePoint 的价值之一在于提供了几乎开箱即用的 innovation 环境,那么,智能设备的开发平台也一样.不必每次都从头开始,所以需要固定的工作室和开发平台作为创新的 ...

  9. SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性

    SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客户端.产品基于统一的架构体系,面向Web端和移动端提供了多种类型的SDK开发包,帮助 ...

随机推荐

  1. MongoDB 3.0新增特性一览

    转自:http://blog.sina.com.cn/s/blog_48c95a190102vedr.html 引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoD ...

  2. lpad函数

    函数介绍 lpad函数是Oracle数据库函数,lpad函数从左边对字符串使用指定的字符进行填充.从其字面意思也可以理解,l是left的简写,pad是填充的意思,所以lpad就是从左边填充的意思. 2 ...

  3. java多线程的基础-java内存模型(JMM)

    在并发编程中,需要处理两个关键问题:线程之间如何通信,以及线程之间如何同步.通信是指线程之间如何交换信息,在命令式编程中,线程之间的通信机制有两种:内存共享和消息传递.      同步是指程序中用于控 ...

  4. className.class.getResourceAsStream与ClassLoader.getSystemResourceAsStream区别

    className.class.getResourceAsStream : 一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件conf ...

  5. Table对象代表一个HTML表格,在文档中<table>标签每出现一次,一个table对象就会被创建。

    1.对象集合 cells[] 返回包含表格中所有单元格的一个数组 rows[] 返回包含表格中所有行的一个数组 tBodies[] 返回包含表格中所有tbody的一个数组(主包含ty和td) 2.对象 ...

  6. 简单了解JS中的几种遍历

    忙了好一段时间,项目上线后终于有那么一点点空档期静下来整理一些问题了.当我们在开发项目的时候,用到遍历的地方肯定少不了,那么我们有那么多的遍历方法,在不同情况下用那种方法会更优雅而且还没bug呢? 首 ...

  7. JDK 常用命令

    一) 引言:    当我们安装完JDK时,除了必须的编译运行以外,它就已经自带了很多辅助工具.正所谓“工欲善其事,必先利其器.”如果能用好这些工具,它们将大大方便你的开发.它们的实用和方便有时甚至会使 ...

  8. Fast Paxos

    http://blog.csdn.net/chen77716/article/details/7297122 自从Lamport在1998年发表Paxos算法后,对Paxos的各种改进工作就从未停止, ...

  9. STL源码标注_空间适配器

    /* stl_alloc.h */ SGI STL空间适配器的主要由alloc.h和stl_alloc.h实现 SGI STL空间适配器的核心: 第一级适配器__malloc_alloc_templa ...

  10. 技术人应该学习的行话--UML统一建模语言

    新生代码农如何在硝烟弥漫的商业丛林中生存和崛起? 洞见,让一部分先遇见未来. 最近公司技术部在组织架构师培训,有幸参与.导师老刘特别推荐了UML语言的学习.回想多年来,自己习惯做一些流程图,框图或者所 ...