STM32驱动12bit AD TLC2543(I/O模拟方式)

 

/******************************************************************************************
* 文件名称 :tlc2543.c
* 版权     :
* 模块名称 :TLC2543驱动程序
* cpu      :  stm32f103rct6                           主频:72M
* 作者     :
* 创建日期 :2009-10-13
* 功能概要 :
*----------------------------------------修改历史------------------------------------------
* 当前版本 :       修改人:                  修改日期:
* 修改说明 :
******************************************************************************************/

#include "STM32Lib\\stm32f10x.h"
#include "hal.h"

#define TLC2543_SCK_H         GPIOB->BSRR = GPIO_Pin_15
#define TLC2543_SCK_L         GPIOB->BRR  = GPIO_Pin_15
  
#define TLC2543_SI_H         GPIOC->BSRR = GPIO_Pin_6
#define TLC2543_SI_L         GPIOC->BRR  = GPIO_Pin_6

#define TLC2543_CS_H         GPIOC->BSRR = GPIO_Pin_8
#define TLC2543_CS_L         GPIOC->BRR  = GPIO_Pin_8

#define TLC2543_SO_H         GPIOC->BSRR = GPIO_Pin_7
#define TLC2543_SO_L         GPIOC->BRR  = GPIO_Pin_7
#define TLC2543_SO_read        GPIOC->IDR  & GPIO_Pin_7
//#define TLC2543_SO_read1        GPIOC->ODR  & GPIO_Pin_7

/******************************************************************************************
* 函数名称    :TLC2543_GPIO_Config
* 功能描述    :
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2008-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void TLC2543_GPIO_Config(void)
{
   GPIO_InitTypeDef  GPIO_InitStructure;
   

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6|GPIO_Pin_8;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
   GPIO_Init(GPIOC, &GPIO_InitStructure);

 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
   GPIO_Init(GPIOC, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/******************************************************************************************
* 函数名称    :Delay_AD
* 功能描述    :
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2008-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void Delay_AD(volatile u32 time)
{  
 u16 i;
   while(time--) 
   { 
     for(i=0;i<8;i++);
   }
}

/******************************************************************************************
* 函数名称    :GetChannelVal
* 功能描述    :
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2008-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
u16 GetChannelVal(u8 port)
{
 u8 i;
 u8 ucSend = port;
 u16   adval = 0;


 if(port > 0x0F)  
   return 0;
 Delay_AD(600);
 TLC2543_SCK_L;
 Delay_AD(6);
 TLC2543_CS_L;
 Delay_AD(6);
 ucSend <<= 4;
 for(i=0; i<12; i++)
    
  {

  if((TLC2543_SO_read)!=0)
   adval |= 1;   //table[i];
  else
      adval |= 0;
  
  if((ucSend&0x80)!=0)
  TLC2543_SI_H;
  else
  TLC2543_SI_L;
        Delay_AD(6);
  TLC2543_SCK_H;
  Delay_AD(6);  
  TLC2543_SCK_L;

  ucSend<<=1;
  adval<<=1;
  }

    Delay_AD(6);
 TLC2543_CS_H;
 adval>>=1;
 return(adval);
}

/******************************************************************************************
* 函数名称    :Read2543
* 功能描述    :
* 参数        :  参数名称: 输入/输出? 类型  描述
*
* 返回值      :
* 作者        :
* 创建日期    :2009-8-30
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :     修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
extern u16  AlogVal[11];
void  Read2543(void)
{
 u16 i;
 for(i=0;i<12;i++)
 {  
    AlogVal[i] = GetChannelVal(i);
    SysTickDelay(50);
 }
}
/******************************************************************************************
* 函数名称    :Calc_Ad_Value
* 功能描述    :ad采集的数据计算
* 参数        :  参数名称: 输入/输出? 类型  描述
*   ch---ad通道 n---分压倍数
* 返回值      :
* 作者        :
* 创建日期    :2009-7-20
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    :v2     修改人:zds                  修改日期:
* 修改说明    :
******************************************************************************************/
u16  Calc_Ad_Value(u8 ch,u8 n) 
{
 u16  ad;
 u8 buf[4];
 float  VDC;
 u16 i;

 buf[3] = (u8)(AlogVal[ch] % 10) + 0x30;
 AlogVal[ch] = AlogVal[ch] / 10;
 
    buf[2] = (u8)(AlogVal[ch] % 10) + 0x30;
 AlogVal[ch] = AlogVal[ch] / 10;

 buf[1] = (u8)(AlogVal[ch] % 10) + 0x30;
 AlogVal[ch] = AlogVal[ch] / 10;

 buf[0] = (u8)(AlogVal[ch] % 10) + 0x30;
 AlogVal[ch] = AlogVal[ch] / 10;
        
 ad = atoi(buf);
 VDC = n*5*ad/4096.0;
 i = VDC*100;
 return i;
}

posted @ 2011-09-08 13:46  pulan  阅读(1467)  评论(1编辑  收藏  举报