得空梳理了一下之前用的这个芯片
目录
[模块驱动 AD5293.C](#模块驱动 AD5293.C)
简要汇总一下手册:

了解是大端模式,以及必要的控制位和数据位即可
CUBEMX初始化

模块驱动 AD5293.C
模块对应输入范围是 1-1024,转换到芯片的0-1023的范围
#include "AD5293.h"
void AD5293_unlock()
{
uint8_t temp[2]={0x18,0x02};
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//使能 负负为正,高使能
HAL_SPI_Transmit(&hspi1,temp,2,1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//写完 关了
}
void AD5293_set_value(uint16_t value) // 此处为方便理解输入范围是 1-1024
{
if(value<=1024) // 对应输入范围是 1-1024,转换到芯片的0-1023的范围
{
uint16_t value1=1024-value;
uint8_t temp1[2]={0x04,(uint8_t)value1};//创建数组放置高位和数据的低八位
temp1[0] |= value1>>8; //之前存入的高位(2个空4个控制位) 或 数据的高2位
// 右移 8 位 10位数据,右移8位后,只剩下最高2位 (D_9和D_8)
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,temp1,2,1000);
// 整个 16 位命令字($B_{15} \dots B_{0}$)在 SPI 传输时依次发送
// temp1[0] 0 0 0 0 0 1 D_9 D_8
// temp1[1] D_7 D_6 D_5 D_4 D_3 D_2 D_1 D_0
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
}
}
AD5293.h
#ifndef _AD5293_H_
#define _AD5293_H_
#include "spi.h"
#include "gpio.h"
void AD5293_unlock(void);
void AD5293_set_value(uint16_t value);
#endif
SPI对应的
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(spiHandle->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 */
/* USER CODE END SPI1_MspInit 0 */
/* SPI1 clock enable */
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN SPI1_MspInit 1 */
/* USER CODE END SPI1_MspInit 1 */
}
}
主函数
