C语言:TSL1401线性CCD TM32F103开发平台移植源代码
小标 2018-07-20 来源 : 阅读 1083 评论 0

摘要:本文主要向大家介绍了C语言的TSL1401线性CCD TM32F103开发平台移植源代码,通过具体的内容向大家展示,希望对大家学习C语言有所帮助。

本文主要向大家介绍了C语言的TSL1401线性CCD TM32F103开发平台移植源代码,通过具体的内容向大家展示,希望对大家学习C语言有所帮助。

对于线性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

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程