AD5293驱动学习

得空梳理了一下之前用的这个芯片

目录

简要汇总一下手册:

CUBEMX初始化

[模块驱动 AD5293.C](#模块驱动 AD5293.C)

AD5293.h

SPI对应的

主函数


简要汇总一下手册:

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

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 */
  }
}

主函数

相关推荐
La Pulga几秒前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统
楚山之石1 小时前
【JCO】mpMRI 先行替代 TURBT 初始分期:BladderPath 随机试验让 MIBC 患者提前 45 天得到正确治疗
人工智能·学习·mri·医学影像
shijuejianceliu2 小时前
传统规则视觉与嵌入式AI智能相机的技术差异
人工智能·嵌入式硬件·视觉检测·相机
Navigator_Z5 小时前
LeetCode //C - 1317. Convert Integer to the Sum of Two No-Zero Integers
c语言·算法·leetcode
Peter-OK5 小时前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
承渊政道5 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
不脱发的程序猿6 小时前
GD32串口数据收进内存之后DMA如何处理?
单片机·嵌入式硬件·dma·嵌入式·串口通信·gd32
冻柠檬飞冰走茶6 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
橙橙笔记6 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
FPGA小迷弟10 小时前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga