资讯详情

基于STM32的 AD5410模拟SPI 驱动

连接stm32L431 IO 菊花链连接

配置cubemx 连接AD5410的4个普通IO为输出模式

开启定时器2 作为微妙的延迟

主频72M

TIM.c编写微妙的延迟(在.h在文件中说明)

void delay_us(uint16_t us)  {  uint16_t differ=0xffff-us-5;   __HAL_TIM_SET_COUNTER(&htim2,differ);  HAL_TIM_Base_Start(&htim2);     while(differ<0xffff-6)     {      differ=__HAL_TIM_GET_COUNTER(&htim2);     }    HAL_TIM_Base_Stop(&htim2);  }

AD5410.c

#include "AD5410.h" #include "tim.h" extern void delay_us(uint16_t us);  /*   1BIT DATA     */  void AD5410_SendByte(uint8_t byte)   {       uint8_t i;     for ( i = 0; i < 8; i  )     {         AD5410_SCLK_LOW;          if ( byte & 0x80 )     {      AD5410_SDIN_HIGH ;     delay_us(1);     }         else     {      AD5410_SDIN_LOW;      delay_us(1);     }         AD5410_SCLK_HIGH;          byte <<= 1;              AD5410_SCLK_LOW;     } }   /*   3BIT DATA     */ void AD5410_controlA(uint8_t addr,uint32_t data)     {  uint8_t Hdata,Ldata;  Hdata=data>>8;  Ldata=data&255;  AD5410_LATCH_LOW;  AD5410_SendByte(addr);  AD5410_SendByte(Hdata);  AD5410_SendByte(Ldata);  AD5410_LATCH_HIGH;  delay_us(2); }  void AD5410_controlB(uint8_t addr,uint32_t data,uint32_t data1)     {  uint8_t Hdata,Ldata;  uint8_t Hdata2,Ldata2;    Hdata=data>>8;  Ldata=data&255;    Hdata2=data1>>8;  Ldata2=data1&255;    AD5410_LATCH_LOW;  AD5410_SendByte(addr);  AD5410_SendByte(Hdata);  AD5410_SendByte(Ldata);   AD5410_SendByte(addr);  AD5410_SendByte(Hdata2);  AD5410_SendByte(Ldata2);  AD5410_LATCH_HIGH;  delay_us(2);   }    /********************/ /* IOUT  0<=DATA<=20*/ void AD5410_IOUT(float DATA,float DATA1) {  uint16_t I_OUT,I_OUT1;    if(DATA>=20)  {   I_OUT=4095;  }  else  {   I_OUT=DATA*4096/20;  }  if(DATA1>=20)  {   I_OUT1=4095;  }  else if(DATA1<4)  {   DATA1=4;   I_OUT1=DATA1*4096/20;  }  else  {   I_OUT1=DATA1*4096/20;  }  I_OUT=((int)I_OUT)<<4;  I_OUT1=((int)I_OUT1)<<4; // AD5410_controlA(DATAreg,I_OUT);  AD5410_controlB(DATAreg,I_OUT,I_OUT1); }  void AD5410_init(void) { //  MX_GPIO_Init();  AD5410_CLEAR_LOW;    AD5410_controlA(RESETreg,RESET);      AD5410_controlA(CONTROLreg, CONTROL);   //0-20ma  257730更新频率   1步进大小   AD5410_controlB(0x56,0x0001,0x0000);      AD5410_controlB(0x55,0x1016,0x101e);    }     

AD5410.h

 #ifndef __AD5410_H__ #define __AD5410_H__  #include "stm32L431xx.h" #include "main.h" //gpio  #define AD5410_SDIN_HIGH     HAL_GPIO_WritePin (AD5410_SDIN_GPIO_Port ,AD5410_SDIN_Pin ,GPIO_PIN_SET) #define AD5410_SDIN_LOW      HAL_GPIO_WritePin (AD5410_SDIN_GPIO_Port ,AD5410_SDIN_Pin ,GPIO_PIN_RESET) #define AD5410_SCLK_HIGH     HAL_GPIO_WritePin (AD5410_SCLK_GPIO_Port ,AD5410_SCLK_Pin ,GPIO_PIN_SET) #define AD5410_SCLK_LOW      HAL_GPIO_WritePin (AD5410_SCLK_GPIO_Port ,AD5410_SCLK_Pin ,GPIO_PIN_RESET) #define AD5410_LATCH_HIGH    HAL_GPIO_WritePin (AD5410_LATCH_GPIO_Port ,AD5410_LATCH_Pin ,GPIO_PIN_SET) #define AD5410_LATCH_LOW     HAL_GPIO_WritePin (AD5410_LATCH_GPIO_Port ,AD5410_LATCH_Pin ,GPIO_PIN_RESET) #define AD5410_CLEAR_HIGH    HAL_GPIO_WritePin (AD5410_CLEAR_GPIO_Port ,AD5410_CLEAR_Pin ,GPIO_PIN_SET) #define AD5410_CLEAR_LOW     HAL_GPIO_WritePin (AD5410_CLEAR_GPIO_Port ,AD5410_CLEAR_Pin ,GPIO_PIN_RESET)  //register adress  #define NOP         0x00 #define DATAreg     0x01 #define READBACKreg 0x02 #define CONTROLreg  0x55 #define RESETreg    0x56  //instruction  #define RESET   0x0001               //复位指令  0000000000000001 //#define CONTROL 0x101E               //0-20mA输出电流   菊花链使能  257730更新速率    1/16步进大小 #define CONTROL 0xD09E    //API void AD5410_controlA(uint8_t addr,uint32_t data); void AD5410_controlB(uint8_t addr,uint32_t data,uint32_t data1);    void AD5410_IOUT(float DATA,float DATA1); void AD5410_init(void); #endif 

标签: 101e电位器trimmer

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台