TLC5620 是TI出品的四路DA输出芯片,以下是其驱动代码,供参考。
#define TLC5620Data_Pin GPIO_PIN_3
#define TLC5620Data_GPIO_Port GPIOE
#define TLC5620CLK_Pin GPIO_PIN_4
#define TLC5620CLK_GPIO_Port GPIOE
#define TLC5620LODA_Pin GPIO_PIN_5
#define TLC5620LODA_GPIO_Port GPIOE
#define TLC5620LDAC_Pin GPIO_PIN_6
#define TLC5620LDAC_GPIO_Port GPIOE
#define MinZFLimit 2
#define ZhenFuRange 200
uint16_t ZhenFuBuffer[4];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ZhenFuAdjust(uint8_t channel)
{
uint8_t zhenfu,a;
zhenfu=(uint8_t)(MinZFLimit+ZhenFuBuffer[channel]*ZhenFuRange/100);//Count zhenfu----
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_SET);
//A1---------------------------------------------------------------------------------
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
if((channel&0x02)==0x02)
{
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
//A0---------------------------------------------------------------------------------
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
if((channel&0x01)==0x01)
{
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
//REN---------------------------------------------------------------------------------
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);//1
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);
//HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);//0
//HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
//for(a=0;a<8;a++)HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);//delay
for(a=0;a<8;a++)
{
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_SET);
if((zhenfu&0x80)==0x80)
{
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620Data_GPIO_Port,TLC5620Data_Pin,GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620CLK_GPIO_Port,TLC5620CLK_Pin,GPIO_PIN_RESET);
zhenfu<<=1;
}
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LODA_GPIO_Port,TLC5620LODA_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(TLC5620LDAC_GPIO_Port,TLC5620LDAC_Pin,GPIO_PIN_SET);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main ()
{ ZhenFuBuffer[0]=32;
ZhenFuAdjust(0); ZhenFuBuffer[1]=64;
ZhenFuAdjust(1); ZhenFuBuffer[2]=96;
ZhenFuAdjust(2);
ZhenFuBuffer[3]=128;
ZhenFuAdjust(3);
}
|