zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    228. Summary Ranges
    324. Wiggle Sort II
    42. Trapping Rain Water
    工作之后
    279. Perfect Squares
    391. Perfect Rectangle
    351. Android Unlock Patterns
    246. Strobogrammatic Number
    [LeetCode] 75. Sort Colors Java
    [Java] 80. Remove Duplicates from Sorted Array II Java
  • 原文地址:https://www.cnblogs.com/pulan/p/2921663.html
Copyright © 2011-2022 走看看