This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS125H02:获取器件 ID 并在模式4中读取模拟值

Guru**** 2522770 points
Other Parts Discussed in Thread: ADS125H02

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/979586/ads125h02-to-get-the-device-id-and-to-read-the-analog-value-in-mode-4

器件型号:ADS125H02

您好!

我在获取器件 ID 和读取模拟数据时遇到问题。

我需要获取设备 ID,那么我应该使用哪些寄存器和命令?

我应该在哪个订单中使用它?

请通过分步过程说明。。 通过 UART 或调用 STACK-LOCAL 窗口获取器件 ID。

 

#include "stm32f10x.h"
#include "stm32f10X_RCC.h"
#include "stm32f10m_gpio.h"
#include "stm32f10X_SPI.h"
#include "delay.h"
#include "lcd16x2.h"
#include "stm32f10X_USART.h"

#define SPIx_RCC RCC_APB2Periph_SPI1
#define SPIx SPI1
#define SPI_GPIO_RCC RCC_APB2Periph_GPIOA
#define SPI_GPIO GPIOA
#define SPI_PIN_MOSI GPIO_PIN_7
#define SPI_PIN_MISO GPIO_PIN_6
#define SPI_PIN_SCK GPIO_PIN_5
#define SPI_PIN_SS GPIO_PIN_4

void SPIx_Init (void);
uint8_t SPIx_Transfer (uint8_t data);
void SPIx_EnableSlave (void);
void SPIx_DisableSlave (void);
void set_dac (uint32_t data);
void USART_Config (void);
void set_dac_16 (uint16_t 数据);



uint8_t receivedByte;
uint16_t i=0;
uint16_t a = 0x37FF;
uint8_t dat;

int main()

SystemInit();
SPIx_Init();
while (1)

//重置通信________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x46);//启用复位通信
SPIx_Transfer (0x00);
SPIx_Transfer (0xF2);//accroding to CRC value calculated
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//for mode 0 commond________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x42);//启用模式0
SPIx_Transfer (0x24);//启用寄存器
SPIx_Transfer (0x5A);//计算出 CRC 值
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//for mode 1 commond________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x43);//启用模式1
SPIx_Transfer (0x01);//启用寄存器以实现开始转换延迟。
SPIx_Transfer (0xB4);//accroding to CRC value calculated。
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//for mode 2 commond________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x44);//启用模式2
SPIx_Transfer (0x33);//启用寄存器以实现开始转换延迟。
SPIx_Transfer (0x41);//accroding to CRC value calculated。
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//for mode 3 commond________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x45);//启用模式3
SPIx_Transfer (0x33);//启用寄存器以实现开始转换延迟。
SPIx_Transfer (0x54);//accroding to CRC value calculated。
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//内部参考________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x46);//启用内部基准
SPIx_Transfer (0x10);
SPIx_Transfer (0x82);//accroding to CRC value calculated
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//IMUX 寄存器________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x4D);//禁用 IMUX
SPIx_Transfer (0xFF);
SPIx_Transfer (0x96);//accroding to CRC value calculated
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//当前源幅度寄存器______________________________
SPIx_EnableSlave();
SPIx_Transfer (0x4E);//禁用
SPIx_Transfer (0x00);
SPIx_Transfer (0xEF);//accroding to CRC value calculated
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//对于模式4 ________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x50);//启用模式4
SPIx_Transfer (0x11);
SPIx_Transfer (0xAC);//accroding to CRC value calculated。
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//对于状态1________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x51);//禁用 PGA 状态
SPIx_Transfer (0x00);
SPIx_Transfer (0xCE);//accroding to CRC value calculated。
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//for STATUS2________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x52);//禁用 PGA 状态
SPIx_Transfer (0x00);
SPIx_Transfer (0xF1);//accroding to CRC value calculated。
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//对于停止通信________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x0A);//启用停止通信
SPIx_Transfer (0x00);
SPIx_Transfer (0x55);//accroding to CRC value calculated
SPIx_Transfer (0x00);
SPIx_DisableSlave();


//device ID________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x20);//器件 ID
SPIx_Transfer (0x00);//仲裁
SPIx_Transfer (0x79);/CRC
SPIx_Transfer (0x00);//字节4
SPIx_Transfer (0x00);//字节5
SPIx_Transfer (0x00);//字节6
SPIx_DisableSlave();

//对于启动通信________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x08);//启用启动通信
SPIx_Transfer (0x00);
SPIx_Transfer (0x7F);//accroding to CRC value calculated
SPIx_Transfer (0x00);
SPIx_DisableSlave();

//device ID________________________________
SPIx_EnableSlave();
SPIx_Transfer (0x20);//器件 ID
SPIx_Transfer (0x00);//仲裁
SPIx_Transfer (0x79);/CRC
SPIx_Transfer (0x00);//字节4
SPIx_Transfer (0x00);//字节5
SPIx_Transfer (0x00);//字节6
SPIx_DisableSlave();
返回 dat;

USART_SendData (USART1、dat);

void SET_DAC_16 (uint16_t 数据)

uint8_t lsb_high、lsb_low;

LSB_LOW =(uint8_t)(0x000000ff & DATA);

LSB_HIGH =(uint8_t)((0x0000ff00 & data)>> 8);





SPIx_EnableSlave();
SPIx_Transfer (lsb_high);
DelayU(10);
SPIx_Transfer (lsb_low);
DelayU(10);
SPIx_DisableSlave();
DelayU(10);

void SET_DAC (uint32_t 数据)

uint8_t MSB_low、lsb_high、lsb_low;

LSB_LOW =(uint8_t)(0x000000ff & DATA);

LSB_HIGH =(uint8_t)((0x0000ff00 & data)>> 8);

MSB_LOW =(uint8_t)((0x00ff0000 & data)>> 16);


SPIx_EnableSlave();
SPIx_Transfer (MSB_LOW);
DelayU(10);
SPIx_Transfer (lsb_high);
DelayU(10);
SPIx_Transfer (lsb_low);
DelayU(10);
SPIx_DisableSlave();
DelayU(10);

void SPIx_Init()

//初始化结构

SPI_InitTypeDef SPI_InitStruct;
GPIO_InitTypeDef GPIO_InitStruct;

//步骤1:初始化 SPI
RCC_APB2PeriphClockCmd (SPIx_RCC、使能);
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_DIRECTION = SPI_DIRECT_2Lines_FullDuplex;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft | SPI_NSSInternalSoft_Set;
SPI_Init (SPIx、&SPI_InitStructt);
SPI_Cmd (SPIx、使能);

//步骤2:初始化 GPIO
RCC_APB2PeriphClockCmd (SPI_GPIO_RCC、启用);
MOSI、MISO 和 SCK 的// GPIO 引脚
GPIO_InitStruct.GPIO_Pin = SPI_PIN_MOSI | SPI_PIN_MISO | SPI_PIN_SCK;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init (SPI_GPIO、&GPIO_InitStructt);
用于 SS 的// GPIO 引脚
GPIO_InitStruct.GPIO_Pin = SPI_PIN_SS;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init (SPI_GPIO、&GPIO_InitStructt);

//禁用 SPI 从器件
//SPIx_DisableSlave();

uint8_t SPIx_Transfer (uint8_t 数据)

//将要发送的数据写入 SPI 数据寄存器
//uint8_t dat;
SPIx->DR =数据;
//等待发送完成
while (!(SPIx->SR &(SPI_I2S_FLAG_TXE)));
//等待接收完成
while (!(SPIx->SR &(SPI_I2S_FLAG_RXNE)));
//等待 SPI 不再忙
while (SPIx->SR &(SPI_I2S_FLAG_BSY));
//返回从 SPI 数据寄存器接收到的数据
//return SPIx->DR;
DAT = SPIx->DR;
返回 dat;

空 USART_Config (空)

USART_InitTypeDef usart1_init_struct;
GPIO_InitTypeDef gpioa_init_struct;
RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA、ENABLE);
gpioa_init_struct.GPIO_Pin = GPIO_Pin_9;
gpioa_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
gpioa_init_struct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init (GPIOA、&gpioa_init_struct);
gpioa_init_struct.GPIO_Pin = GPIO_Pin_10;
gpioa_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
gpioa_init_struct.GPIO_Mode = GPIO_Mode_in_Floating;
GPIO_Init (GPIOA、&gpioa_init_struct);
USART_Cmd (USART1、ENABLE);
USart1_init_struct.USART_波特 率= 9600;
USart1_init_struct.USART_WordLength = USART_WordLength _8b;
usart1_init_struct.USART_stopbits = USART_stopbits_1;
USart1_init_struct.USART_Parity = USART_Parity 否;
USart1_init_struct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USart1_init_struct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init (USART1、/usart1_init_struct);
//USART_ITConfig (USART1、USART_IT_RXNE、ENABLE);
//NVIC_EnableIRQ (USART1_IRQn);


void SPIx_EnableSlave()

//将从 SS 引脚设置为低电平
SPI_GPIO->BRR = SPI_PIN_SS;

void SPIx_DisableSlave()

//将从 SS 引脚设置为高电平
SPI_GPIO->BSRR = SPI_PIN_SS;

这是我在上面给出的程序。

谢谢您、

SAI