请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:ADS8638 大家好,我在读取芯片时遇到了问题。缺少了一些东西。我在下面分享我的代码。有人能帮我,并与我分享他的代码吗。非常感谢。
#define ADC_TI_CHANNELS 8 //每个ADS8638 ADC上的通道总数
#define MAX_NUMBER_ADC_TI_CHIPS 5 // ADS8638 ADC总数
#define ADS8638_INTERNAL_VREF_ON 0xC
#define ADS8638_REG_AUX_config 0x06
#define ADS8638_REG_MANUAL 0x04
//重置LTC DAC上的相应芯片选择引脚
// TiAdcChips将保存
其每个信道结构TiAdcInfo
{
uint16_t ADC_TI_value[ADC_TI_Channels]的值和范围;//这将保存
所有DAC值uint16_t ADC_TI_RANGE[ADC_TI_CHANGE]; //这保持了所有DAC范围(电压范围),范围只能在DAC芯片上更改,在STM32F7上,它始终为0-2.5V
};
//将所有DAC步进大小初始化为零
//创建多个LTC芯片
结构TiAdcInfo TiAdcChips[MAX_NUMBER_ADC_TI_CHIPS];
//此set命令可用于为上面cmdbCodeDataList中的所有命令(注释的除外)生成命令。
char* adc_setCmdlicon(uint8_t adcNumber, uint8_t channelNumber, uint16_t命令Word)
{//
adc_number_ti_value[number% adc_ti_channel]=值;
if; adf_adc_creln; asp_crecurbe_c_adc_name=
函数</t_adc_cannelnumber/add_adc_adcut_adc_extrecurb_ad_ad_adc
char* adc_setChannelandRange(uint8_t adcNumber,uint8_t adelNumber, uint8_t range,uint8_t tempreeSelector )
{//
对于命令
uint8_t channelNumber =0; uintREG Word_LSB
=(dchannelNumber <<4)|(tem_recurb_ad=<_cad_cad_cref;
//形成一个命令并发送它
ADC_SPI_Transmit (adcNumber,channelNumber,ADS8638_internal_VREF_ON,ADS8638_REG_AUX_config);
ADC_SPI_Transmit (adcNumber, ChannelNumber,cmdWord_LSB,cmdWord_MSB);
// ADC_setCmdlGeneric (adcNumber,commandWord);
//更新ADC范围
TiAdcChips[adcNumber].adc_TI_range[channelNumber % ADC_TI_channel]=范围;
返回"OK";
}
int adc_getChannel(uint8_t adcnumber,uint8_t Number elNumber)
{
返回TiAdcChips[adcNumber].adc_ti_value[inch_adc_adc_channelint_adc_adc_adc_self_self8
;<_adc_channelnumber/adc_adc_adc_adc_adc_self_self_self_self_self_self_8
IF (adcNumber > MAX_NUMBER_ADC_TI_CHIPS)返回"错误索引";
IF (VALUE!= 0 && value!= 1)返回"值必须为二进制";
SWITCH (value)
{
案例0:PinState = GPIO _PIN_RESET;break;
CAFIN_GPIO_GPIO
= GPPHO_PI_SE_CA0;PIN_CASE_CASE_CA0
PinState);中断;
案例2:HAL_GPIO写入引脚(GPIOG,NCS_ADC2_Pin,PinState);中断;
案例3:HAL_GPIO写入引脚(GPIOG, NCS_ADC3_Pin,PinState);中断;
案例4:HAL_GPIO_WritePin (GPIOG,NCS_ADC4_Pin,PinState);中断;
默认值:break;
}
返回“确定”\n;
}//
打开和关闭ADC芯片
char* adc_powerup(uint8_t adcNumber, int value)
{
gPIO_PinState PinState;
IF (adcNumber > MAX_NUMBER_ADC_TI_CHIPS)返回“BAD INDEX”;
IF (VALUE!= 0 && VALUE!= 1)返回“Value must be Binary”;
SWITCH (value)
{
案例0:PinState = GPIO _PIN_RESET;中断;
CAPHA_AGPIO_GPCH_AGPI_SE_CASE_AGP_AGO_AGP_AGP_AGP_AGP_AGP_AGP_AGO_AGP_AGP_AGNO_0
;//
在电路板上添加更多案例
0,插件数:插件,插件,插件数:插件,插件,
插件,插件,
插件,插件1:插件,插件,插件,插件, PinState);中断;
案例2:HAL_GPIO写入引脚(GPIOG,ADC_EN_Pin,PinState);中断;
案例3:HAL_GPIO写入引脚(GPIOG, ADC_EN_Pin,PinState);中断;
案例4:HAL_GPIO写入引脚(GPIOG,ADC_EN_Pin,PinState);中断;
default:break;
}
返回“确定”\n;
}//
在SPI上传输到选定的芯片
char* adc_spi_transmit (uint8_t adcNumber, uint8_t channelNumber, uint8_t cmdlsb, uint8_t cmdlbytes MSB)
{//
四字节数组保留DAC的32位命令
UINT8_t DATA_array[2]={0};
IF (adcNumber >= MAX_NUMBER_ADC_TI_CHIPS)返回"Bad DAC Number";
//打开芯片
ADC_POWERUP(adcNumber,1);//
将相应的芯片选择引脚NCS拉至LOW,以在选定的DAC上开始传输
//然后拉低以执行命令
//在所有芯片上重置NCS
(int ii =0;i<MAX_NUMBER_ADC_TI_CHIPS;i++)ADC_NCS_SET (ii,1);
ADC_NCS_SET (adcNumber,0);////
// data_array[0]= cmdMSB <<1; //仅32字节回读事务需要
// data_array[1]= cmdlsb; // build命令/地址字节
cmdbMSB = cmdbMSB << 1;
data_array[0]= cmdbMSB; // MS Byte
data_array[1]= cmdlsb;
//将bytes命令发送到ADC
// HAL_SPI_Transmit_DMA(&hspi6,&data_array,2);
// HAL_SPI_Transmit (&hspi_spi_transmit)(&hcmdl6,&2,spi_spi_transmit)
//使用以下命令阻止传输
// HAL_SPI_TRANSMEARE(&hspi4,&data_array,4,10);//HAL_DELAY
(10);
//将相应的芯片SELECT引脚NCS拉高,以在选定的DAC
ADC_NCS_SET (adcNumber,1)上执行命令;
// adc_NCS_set(adc,0);
// adcset
//芯片等待32个时钟周期,然后才响应并回显相同的命令
// todo:在调用接收
IF (cmdbMSB == 0x8) ADC_SPI_receive (adcNumber,channelNumber)之前在此处添加延迟;
返回"OK";
}//
在SPI上向选定的芯片
char* ADC_SPI_receive (uint8_t adcNumber, uint8_t channelNumber)发送
{//
four bytes数组保留DAC的32位命令
UINT8_t DATA_array[2]={0};
volatile uint16_t ADC_readValue = 0;
UINT8_t b0,B1;
IF (adcNumber >= MAX_NUMBER_ADC_TI_CHIPS)返回"错误的DAC编号";
ADC_NCS_SET (adcNumber,0);
HAL_SPI_receive (&hspi6,&b0,1,0);
HAL_SPI_receive (&hspi6,&b1,1,0);
ADC_NCS_SET (adcNumber,1);
ADC_NCS_SET (adcNumber,0);
HAL_SPI_receive (&hspi6,&b0,1,0);
HAL_SPI_receive (&hspi6,&b1,1,0);
ADC_NCS_SET (adcNumber,1);
// ADC_NCS_SET (adcNumber,0);
// HAL_SPI_Receive (&hspi6,&data_array,2,10);
// ADC_NCS_SET (adcNumber,1);
//更新ADC值
ADC_readValue = b0 & 0xF;
ADC_readValue = ADC_readValue <8;
ADC_readValue = ADC_readValue | B1;
//readValue1 = data_array[1]& 0x0F;
// ADC_readValue = ADC_readValue1 <8;
// ADC_readValue = ADC_readValue= Ti_ADC_ADC_ADC_ADC_ADC_ReadValue0
返回“确定\n";
}////
如果启用接收完成中断,则HAL_UART_RxCpltCallback将被称为示例,如下所示
//void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi){//
// if (hspi->instance ==SPI6)/{/}/