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.

[参考译文] ADS1256:Ads1256

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/855591/ads1256-ads1256

器件型号:ADS1256

我有同样的问题。 我使用了 stm32f302r8微控制器(Nucleo-f302r8)和 adc1256。  我不会通过 SPI 通信接收任何数据。 我已共享我的代码。 请帮助我完成此操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    包括"main.h" 和*私有包括------------------------------------ */ /*用户代码开始包括*/ /*用户代码结束包括*/ /*私有 typedef ------------------------------------------------------- */ /*用户代码 begin PTD */ uint8_t receive[2]; /*用户代码 end PTD */ /* private define ------------------------------------------------------- */ /*用户代码 begin pd */ /*用户代码 end PD */ /*私有宏------------------------------------------------------- */ /*用户代码 begin PM */ /*用户代码 end PM */ /*私有变量------------------------------------------------------- */ SPI_HandleTypeDef hspi3; UART_HandleTypeDef huart2; /*用户代码 begin PV */ *用户代码 end PV */ /*私有函数原型--- // void SystemClock_Config (void); static void MX_GPIO_Init (void); static void MX_SPI3_Init (void); static void MX_USART2_UART_Init (void); //用户代码 begin PFP */ void ADC_write (uint8_t address、uint8_t value) { uint8_t data[3]; 数据[0]= 0x50|地址; 数据[1]= 0x00; DATA[2]=值; HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); HAL_SPI_transmit (&hspi3、data、3、50); //DWT_DELAY (10); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); } void ADC_WRITE_COMMAND (uint8_t 命令) { HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); HAL_SPI_transmit (&hspi3、&command、1、50); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); } // float freq (float volta) { int 值= 0、TIM_val[100]; 浮点频率; for (int i=0;i0) { //启动计时器 while (!(volta0)); //停止计时器 } //TIM_val[i]= timercount_value; 值+= TIM_val[i]; } 值=值/100; 值=值*2; 频率= 1/值; 返回频率; } */ int adc_read() { uint8_t datacon; uint32_t convert = 0x00; HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); ADC_WRITE_COMMAND (0x01);//读取 for (int i=0;i<
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Gokul、

    欢迎访问 TI E2E 论坛!

    您是否能够从任何 ADS1256器件寄存器中读取和写入数据、或者您面临的主要问题与对 STM MCU 上的 SPI 外设进行编程有关?
    遗憾的是、我不熟悉该 MCU、也无法帮助处理与微控制器具体相关的代码; 但是、如果 SPI 外设正常工作并向 ADS1256发送命令、我当然可以评论与 ADC 通信的接口代码。

    您是否曾尝试探测示波器或逻辑分析仪上的 SPI 信号以验证 HAL_GPIO_WritePin ()或 HAL_SPI_Transmit ()命令是否按预期工作?
    请随时与我分享这些屏幕截图中的任何一个、我将了解我是否可以帮助您解决 SPI 通信问题。

    供参考:您共享的代码似乎已被截断...我没有看到 ADC_READ()函数的末尾。 您可以随意分享代码的其余部分、我将查看它以查看是否可以发现任何问题。

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

    尊敬的 Hall:

      我的 SPI 外设工作正常、我只在发送和接收 ADC 上的字节时遇到问题。 我不知道问题在哪里。 我已共享代码并进行验证

    /* USER CODE BEGIN Header */**
    
    (用户代码开始标头
    *@文件 :main.c
    *@简介 主要方案机构
    
    *@注意
    *
    

    Copyright版权所有(c) 2019 STMicroelectronics。 *保留所有权利。

    * *此软件组件由 ST 根据 BSD 3-Clause 许可证 *"许可证"获得许可;除非符合 *许可证、否则您不能使用此文件。 您可以在 以下网址获得许可证副本:* opensource.org/licenses/BSD-3-Clause * */ /*用户代码结尾标头*/ /*包括------------------------------------------------------- */ #include "main.h" /* private 包括------------------------------------------------------- */ /*用户代码开始包括*/ /*用户代码结束包括*/ /*私有 typedef ------------------------------------------------------- */ /*用户代码 begin PTD */ uint8_t receive[2]; /*用户代码 end PTD */ /* private define ------------------------------------------------------- */ /*用户代码 begin pd */ /*用户代码 end PD */ /*私有宏------------------------------------------------------- */ /*用户代码 begin PM */ /*用户代码 end PM */ /*私有变量------------------------------------------------------- */ SPI_HandleTypeDef hspi3; UART_HandleTypeDef huart2; /*用户代码 begin PV */ *用户代码 end PV */ /*私有函数原型--- // void SystemClock_Config (void); static void MX_GPIO_Init (void); static void MX_SPI3_Init (void); static void MX_USART2_UART_Init (void); //用户代码 begin PFP */ void ADC_write (uint8_t address、uint8_t value) { uint8_t data[3]; 数据[0]= 0x50|地址; 数据[1]= 0x00; DATA[2]=值; HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); HAL_SPI_transmit (&hspi3、data、3、50); //DWT_DELAY (10); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); } void ADC_WRITE_COMMAND (uint8_t 命令) { HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); HAL_SPI_transmit (&hspi3、&command、1、50); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); } // float freq (float volta) { int 值= 0、TIM_val[100]; 浮点频率; for (int i=0;i<100;i++) { if (volta<0.1 && volta>0) { //启动计时器 while (!(volta<0.1 && volta>0); //停止计时器 } //TIM_val[i]= timercount_value; 值+= TIM_val[i]; } 值=值/100; 值=值*2; 频率= 1/值; 返回频率; } */ int adc_read() { uint8_t datacon; uint32_t convert = 0x00; HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); ADC_WRITE_COMMAND (0x01);//读取 for (int i=0;i<3;i++) { HAL_SPI_Receive (&hspi3、&datacon、1、50); convert |= datacon; convert<<=8; } //DWT_DELAY (10); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); 返回转换; } 浮点电压(uint32_t data2) { float v; V =(float) data2*0.000000596046;// 8388607 =+5.000v 基准电压 返回 v; } void adc_read_regis (uint8_t 地址1) { uint8_t data1[3]; Data1[0]= 0x10|地址1; Data1[1]= 0x00; HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); HAL_SPI_transmit (&hspi3、data1、2、50); HAL_DELAY (5); HAL_SPI_Receive (&hspi3、&data1[2]、1、50); //DWT_DELAY (10); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); } void ADC_RESET () { HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); HAL_GPIO_WritePin (GPIOC、RESET_Pin、GPIO_PIN_RESET); HAL_DELAY (1); HAL_GPIO_WritePin (GPIOC、RESET_Pin、GPIO_PIN_SET); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); } void ADC_init () { ADC_WRITE (0x00、0x03);//status ADC_WRITE (0x02、0x20);//adcon ADC_WRITE (0x03、0x82);//drate 100sps ADC_READ_Regis (0x03);//验证 ADC_WRITE_COMMAND (0xF0);// ADC 的自 CAB ADC_WRITE (0x01、0x0F);//通道0正极多路复用 ADC_WRITE_COMMAND (0xFC);//同步 ADC_WRITE_COMMAND (0x00);//唤醒 HAL_DELAY (500); }//* 用户代码 END PFP */* 专用用户代码------------------------------------------------------- */ /*用户代码开始0 */ /*用户代码结束0 */ /** @短于应用程序入口点。 *@retval int */ int main (void) { //用户代码 begin 1 */ uint32_t adc_data_ch0、adc_data_ch1; float VOLTGE_CH0、VOLTGE_CH1; /*用户代码结束1 */ /* MCU 配置------------------------------------------------------- // //*复位所有外设,初始化闪存接口和 SysTick。 */ HAL_Init(); //用户代码 begin Init */ //*用户代码 end Init */ //*配置系统时钟*/ SystemClock_Config(); //*用户代码 begin sysinit */ //*用户代码 end sysinit *// //////*初始化所有已配置的外设*/ MX_GPIO_Init ();MX_SPIIT */* UART2_Init (*;USART2_Init) HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET); ADC_RESET (); HAL_DELAY (500); MX_SPI3_Init (); HAL_DELAY (500); ADC_WRITE_COMMAND (0xFE);//复位以加电值 ADC_WRITE_COMMAND (0xFC);//同步 ADC_WRITE_COMMAND (0x00);//唤醒 // DWT_DELAY (10); HAL_INIT (1 ); HAL_GPIO_WritePin (LD2_GPIO_Port、LD2_Pin、GPIO_PIN_SET);//确认配置 MX_USART2_UART_Init(); HAL_GPIO_WritePin (GPIOC、 CHIP_SELECT_Pin、GPIO_PIN_RESET); //while (HAL_GPIO_ReadPin (DRDY_GPIO_Port、DRDY_Pin)); ADC_WRITE (0x01、0x1F);// CH1正通道的多路复用器 ADC_WRITE_COMMAND (0xFC);//同步 ADC_WRITE_COMMAND (0x00);//唤醒 adc_data_ch0 = adc_read (); VOLTGE_CH0 =伏特(ADC_DATA_CH0); //while (HAL_GPIO_ReadPin (DRDY_GPIO_Port、DRDY_Pin)); ADC_WRITE (0x01、0x0F);//mux 用于 ch0正通道 ADC_WRITE_COMMAND (0xFC);//同步 ADC_WRITE_COMMAND (0x00);//唤醒 ADC_DATA_CH1 = ADC_READ (); VOLTGE_CH1 = VOLT (ADC_DATA_CH1); //frequency _in_ch1 = freq (volte_in_ch1); //*用户代码结束2 *// //*无限循环*// //*用户代码在*/ while (1) { HAL_DELAY (100); HAL_DELAY (100); HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_SET); } /*用户代码结束,同时*/ /*用户代码开始3 */ *用户代码结束3 */ } //* @系统时钟配置* @retval 无 */ void SystemClock_Config (void) { RCC_OscInitTypeDef RCC_OscillitStructure={0}; RCC_ClkInitTypeDef RCC_ClkInitSStructure={RCC_Oscit_Structure_RIC_Rag_RIC_RIC_RIT_RITH ={0}* RCC_Structure_RIC_RIC_RIT_RIT_RITH ={REC_RIT_RIT_RIT_RIT_RITH ={0}* RCP_RITIC_RITH ={REC_RIT_RITH RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; IF (HAL_RCC_OscConfig (&RCC_OscInitStructt)!= HAL_OK) { ERROR_Handler (); }/** 初始化 CPU、AHB 和 APB 总线时钟 */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKd = RCC_SYSCLCD_CLKDIV1 ;RCC_CLKCLKCLKCLKDIV1 = RCC_CLKCLK1;RCC_CLKCLKCLKCLKCLKCLKCLKDIVDD_CLK_CLKCLK_CLKCLK_CLKCLKCLK_CLK_CLKCLK_CLK_CLK_CLKDIVDD.CLK_CLK_CLK_CLKCLK if (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, flash_latit_1)!= HAL_OK) { ERROR_Handler(); } }/** *@SPI3初始化函数* @param None *@retval None */ static void MX_SPI3_Init (void) { //*用户代码 begin SPI3_Init 0 *// ////*用户代码 end SPI3_Init 0 *// //////* 用户代码 begin SPI3_Init 1 */*配置 参数1 * SPI3_Init 1 * SPI3_Init 1 * hspi3.instance = SPI3; hspi3.Init.Mode = SPI_MODE_MASTER; hspi3.Init.DIRECTION = SPI_DIRECTION 2LINES; hspi3.Init.DataSize = SPI_DATASIZE_8bit; hspi3.Init.CLKPolarity = SPI_POLIT_LOW; hspi3.Init.CLKPhase = SPI_PHASE_1EDGE; hspi3.Init.NSS = SPI_NSS_Soft; hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hspi3.Init.FirstBit = SPI_FIRSTBIT_BAUDAD_TIOTDE_16;hTIMESCAST_INIT_INIT_DITIDT_DITIDT3_DITIDT_DIT_DITDIT_DITIDT_B; hspi3.Init.CRCalaculy = SPI_CRCCALLion_disable; hspi3.Init.CRCPolynomial = 7; hspi3.Init.CRCCLhelength = SPI_CRC_LENGTH_DATAZE; hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; if (_HAL = 3)(INOK_HAL! ERROR_Handler(); } //*用户代码 begin SPI3_Init 2 *// //*用户代码 end SPI3_Init 2 */ } //* @简要 USART2初始化函数 *@param 无 *@retval 无 */ static void MX_USART2_UART_Init (void) { //*用户代码 begin USART2_Init 0 */ */*用户代码 begin USART2_Init 0* USART2_Init 1 */ /*用户代码结束 USART2_Init 1 */ huart2.instance = USART2; huart2.Init.baudate = 38400; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.stopbits = UART_stopartbits 1;uart2.none_parity = UART2_inuart.inuit_parity = UART2.none 奇偶校验;UART2_ huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_none; huart2.Init.overSAMPLING = UART_OPAMPLING_16; huart2.Init.INIT_ONE_SAMPLE_DISABLE;huart2.Advature_INDIAG_INT_UARTDIAT_INIFT_UART_INFEDVIFT_INT_INIT_INIFT_INIT_INIFT_INIT_IN if (HAL_UART_Init(&huart2)!= HAL_OK) { ERROR_Handler (); } //用户代码开头 USART2_Init 2 */ //*用户代码结束 USART2_Init 2 */ } //* @简单 GPIO 初始化函数 *@param None *@retval None */ static void MX_GPIO_Init (void) { GPIO_InitTypeDef GPIO_InitStruct** param None *; _ gpio_cl_clar_cl_clock_enable*=_ GPIO_r_clar_clock_enable_gpet_gpet (*);_ GPIO_en_cl_cl_cl_clar_cl_cl_clar_clar_clar_cl_cl_cl_clar_clock_en_clock_clock_enable_clock_clock_enable_ /*配置 GPIO 引脚输出电平*/ HAL_GPIO_WritePin (LD2_GPIO_Port、LD2_Pin、GPIO_PIN_RESET); /*配置 GPIO 引脚输出电平*/ HAL_GPIO_WritePin (GPIO,RESET_PING_PUT_PUT_PUT_SET); /*配置 GPIO 引脚:HAL_INIT_B1_INIT_GPIO_InStructure_GPIO_Infor_GPIO_PUT_GPIO_P=InStructure.GPIO_Infor_GPIO_PUT_Infor_GPIO_PUT_GPIO_P=GPIO_P=GPIO_InStructure.GPIO_Infor_Infor_GPIO_P=GPIO_P=GPIO_InStruct.GPIO_B1 ; /*配置 GPIO 引脚:LD2_Pin */ GPIO_InitStruct.Pin = LD2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTP_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InIT_GPIO_LIT_GPIO_GPIO_InPort (GPIO_GPIO_GPIO_INIT_InPort_GPIO_GPIO_GPIO_GPIO_GPIO_GPIO_In结构) &GPIO_InitStruct); /*配置 GPIO 引脚:DRDY_Pin */ GPIO_InitStruct.Pin = DRDY_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init (DRDY_结构);GPIO_InStruct_Port;&GPIO_In结构 化 GPIO /*配置 GPIO 引脚:RESET_Pin CHIP_SELECT_Pin */ GPIO_InitStruct.Pin = RESET_PIN|CHIP_SELECT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTP_PP; GPIO_InitStruct.Pull = GPIO_InitSlic.Speed = GPIO_InIT_LOW;GPIO_Q_低速 &GPIO_InitStruct); }//* 用户代码开始4 */ //*用户代码结束4 */ /** @简短如果发生错误,则执行此函数。 *@retval None */ void Error_Handler (void) { //*用户代码 begin Error_Handler_debug */ //*用户可以添加自己的实现来报告 HAL 错误返回状态*/ //*用户代码 end Error_Handler_debug */ } #ifdef use_full_assert // *@brief 报告源文件和源文件的名称 行号 * 发生了 assert_param 错误的位置。 *@param 文件:指向源文件名的指针 *@param 行:assert_param 错误行源编号 *@retval 无 */ void assert_failed (char *文件、uint32_t 行) { //*用户代码 begin 6 *// //*用户可以添加自己的实现来报告文件名和行号, TEX:printf ("错误的参数值:第%d\r\n"行上的文件%s、文件、行)*/ //*用户代码结束6 */ } #endif //* use_full_assert *

     

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

    你好、Gokul、

    请参阅下面的代码片段中的注释:

    int adc_read ()
    {
    uint8_t datacon;
    uint32_t convert = 0x00;// TODO:考虑将此设为有符号32位值、因为 ADC 数据是有符号
    
    HAL_GPIO_WritePin (GPIOC、CHIP_SELECT_Pin、GPIO_PIN_RESET);
    
    // TODO: 在这里插入一个短延迟(在/CS 低电平和第一个 SCLK 之间)、
    //除非 HAL_GPIO_WritePin ()已经提供了足够的延迟来满足 ADS1235的"T3"时序要求。
    
    ADC_WRITE_COMMAND (0x01);//待办事项:发送此字节后不要将/CS 设置为高电平!
    
    // TODO:在此处插入短延迟以满足"T6"时序要求
    
    //注意:某些 MCU 使用 FIFO 来存储来自 SPI 外设的 MISO 数据。
    在调用 HAL_SPI_Receive ()之前、请确保已清除此 FIFO //、否则、来自前一个"0x01"命令的无关返回字节可能会被误解为数据。
    
    for (int i=0;i<3;i++)
    {
    // TODO:发送一个"0x00字节"以时钟输出 ADC 数据字节、除非 HAL_SPI_Receive ()已经执行此操作...
    HAL_SPI_Receive (&hspi3、&datacon、1、50);
    convert |= dataacon;
    convert<=8;
    }
    
    // TODO:考虑将符号扩展字节附加到"converter"(基于 ADC 数据的最高有效位)、请参阅以下 URL 以了解示例:
    // e2e.ti.com/.../it-s-in-the-math-how-to-convert-adc-code-to-a-voltage-part-1
    
    HAL_delay (1);
    HAL_GPIO_Write_pin、GPIO_set
    
    
    } 

    我希望这会有所帮助!

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

    尊敬的大厅:

     @克里斯托弗·霍尔的其余代码看起来不错吗? 我的意思是、我必须将转换数据类型更改为有符号数据类型、并在发送 RDATA 命令后引入短延迟。 发送1ms 延迟是否起作用? 我还将处理 fifo mISO 输出。 是否可以在初始代码和阶段复位芯片选择、并且直到结束才会置位 adc_init()的其他部分看起来正常? 请指出所有其他可能的错误、因为我不确定数据是写入状态寄存器、ADCON 寄存器还是 DRATE 寄存器。 当我尝试读回数据时、我会得到一个大的零点。 您可以看到我的读取寄存器代码。 请帮我解决此问题。

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

    你好、Gokul、

    假设您对 ADS1256使用标称7.68MHz 时钟、则"T6"延迟仅需约为6us。 数据表显示"T3"的最小值为0ns、但我建议使其至少为50ns。

    如果您将这些延迟设置得太长、则需要更长时间才能输出 ADC 数据、这可能会在尝试以更快的数据速率运行 ADC 时出现问题。

    /CS 用于选择要与 SPI 总线上的哪个器件通信、因此、如果 SPI 总线上只有一个器件、则从技术上讲、可以将其保持为低电平。 但是、我强烈建议不要以这种方式使用/CS。。。

    /CS 可防止从器件在 SCLK 处于高电平时对其做出响应。 因此、为了防止 MCU 和 ADC 不同步(由于 SCLK 信号上的噪声或干扰)、只需将/CS 设置为低电平即可发出命令(或读取数据)、然后在完成后将其设置回高电平。 每次将/CS 设置为低电平时、ADC 的 SPI 外设都会复位以查找下一条命令的开始、这有助于使 SPI 通信在主器件和从器件之间保持一致。

    我查看了您的代码的其他部分、并有以下评论

    • 在"adc_reset ()"函数中、除非发送"reset" SPI 命令、否则无需切换/CS。 使用/RESET 引脚时、您可以独立切换/RESET 引脚、而无需将/CS 设置为低电平。

    • 在您的"ADC_init()"函数中发送"0xF0"命令以执行自校准后、您需要等待此操作完成。 根据数据表中的表19、在此命令之后添加所需的延迟。 或者、您可能会轮询/DRDY 以使其变为低电平、而不必调整每个数据速率的延迟时间。

    • 在您的 main()函数中,选择输入通道并开始新的转换后,您需要等待/DRDY 变为低电平,然后才能读取 ADC 数据。 立即读取数据将返回无效结果。 如果这是您需要 MCU 执行的唯一操作、则可以轮询/DRDY、 但通常情况下、最好使用下降沿 GPIO 触发的中断向 MCU 告知数据何时可用(以便 TI 可以在等待 ADC 完成转换时执行其他操作)。  

    • 我还会仔细检查配置 SPI 时钟极性的代码行:
      hspi3.Init.CLKPolarity = SPI_POLICY_LOW;

      ADS1256使用 SPI 模式1进行通信、这意味着 MISO 将在 SCLK 的上升沿发生变化、但应在 SCLK 的下降沿进行采样。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hall:

    克里斯托弗·霍尔(1528318)您好! 您的所有要点都非常有用、我在我的计划中实施了。 遗憾的是、我仍然没有收到转换数据。 我将与您共享两个代码、一个与 Arduino 共享、另一个与 stm32f302r8共享。 代码在 Arduino 中运行得非常完美、即显示串行监视器中两个通道(ain0和 ain1都是正通道)的两个转换数据。 但是、当我尝试对 stm32f302r8执行相同操作时、它不起作用。 我已在 SPI 模式1 (i.e) CPHA 2边缘和 COPL 低电平下初始化 SPI。 我已上传了两个 Arduino 中的 clk、miso 和 mosi 信号示波器图像、供您参考。 对于 stm32f302r、我在 MISO 引脚中看不到任何信号。 您能不能帮助我调试我的问题、因为我对控制器领域比较陌生。 请对 Arduino 和 stm32f302r8板中的波形进行评论、因为我对单调的信号非常怀疑。 感谢您先前的回复! 很抱歉、post.e2e.ti.com/.../waveform.rar 这么长的时间

    Arduino 代码

    /* ADS1256
    CLK -引脚13
    DIN -引脚11 (MOSI)
    DOUT -引脚12 (MISO)
    CS -引脚10
    DRDY -引脚9
    RESET-引脚8 (或设置为高电平?)
    DVDD - 3V3
    DGND - GND
    */
    
    #define cs 10 //芯片选择
    #define Rdy 9 //数据就绪、输入
    #define Rst 8 //复位引脚
    #define pwd 7 //断电
    #define flag 0 //
    
    #define SPISPEED 1000000
    // 1250000
    #define RDATA 0x01
    #include 
    //字节数据= 0b00000000;
    
    void mux (byte data)
    {
    spi.transfer (0x50 | 1);// MUX 寄存
    器 spi.transfer (0x00);//第二个命令字节,只写入一个寄存器
    spi.transfer (data);//将数据库写入寄存器
    delayMicroseconds (10);
    }
    
    void sync ()
    {
    // spi.transfer
    
    (0x110);// spi.transfer (SPI);delaySPI (0x1111);
    
    //wakeup 0000
    spi.transfer (0x00);
    delayMicroseconds (10);
    }
    
    void calculation()
    {
    int32_t adc_val =0;
    float V = 0;
    adc_val = spi.transfer (0);
    adc_val <<= 8;//向左移动
    adc_val |= spi.transfer (0);adc_val
    <5.5960v/v
    
    = 0.60val = 0.60v0;adc = 0.60v/+60val =+60val
    
    delayMicroseconds (10);
    Serial.println (adc_val、hex);
    Serial.print ("+");
    Serial.println (V);
    }
    void setup()
    {
    Serial.begin(115200);
    int8_t data;
    
    PinMode (cs、Output);
    digitalWrite (cs、low);//绑定的低电平也是正常的。
    pinMode (rdy、input);
    pinMode (rst、output);
    digitalWrite (rst、output) 低电平);
    延迟(1);//板载时钟至少为4个时钟周期的低电平。 100微秒就足够
    了 digitalWrite (rst、HIGH);//现在重置为 deafult 值
    
    //delay (500);
    SPI.begin();//启动 SPI 总线
    //delay (500);
    
    //init
    
    digitalWrite (pwd、low);
    //while (digitalRead (rdy)){}//等待 READY_LINE 变为低电平
    SPI.beginTransaction(SPISettings(SPISPEED、MSBFIRST、SPI_MODE1);//启动 SPI
    delayMicroseconds (10);
    
    //重置为加电值(FEH)
    SPI.transfer (0xFE);
    微秒(10);//重置为微秒;
    
    BYTE STATUS_REG = 0;//地址(数据表第30页)
    // PGA 设置
    //1±5V
    /2±2.5V
    // 4±1.25V
    // 8±0.625V
    // 16±312.5mV
    // 32±156.25mV
    // 64±78.125mV
    // byte STATUS_DATA = 0x01;//状态:最高有效
    
    
    位转换(0X00110)|禁用数据转换(SPI_transfer = 0x000100) //第二个命令字节,只写入一个寄存器
    spi.transfer (STATUS_DATA);//将数据库写入寄存器
    delayMicroseconds (10);
    
    Serial.println ("状态完成");
    
    spi.transfer (0x01 | STATUS_reg);
    spi.transfer (0x00);//第二个命令字节,只写入一个寄存器
    delayMicrodata (0x25)
    
    
    ;delaytln (10);spi.transfer (SPI);spi.transfer (0x16 (SPI)(20 (20);
    
    
    字节 adcon_reg = 2;//A/D 控制寄存器(地址02h)
    字节 adcon_data = 0x20;// 0 01 00 000 =>时钟输出频率= fCLKIN、传感器检测关闭、增益1
    SPI.transfer (0x50 | adcon_reg);
    SPI.transfer (0x00);//第二条命令、仅写入一个寄存器
    SPI.transfer、增益1 SPI.delyte (0x50 | adcon_reg);写入一个寄存器
    (10秒)
    
    serial.println ("adcon done");
    
    //设置采样率
    字节 drate_reg = 3;
    字节 drate_data = 0b11110000;// 100SPS
    SPI.transfer (0x50 | drate_reg);
    SPI.transfer (0x00);
    SPI.transfer (drate_data);
    delayMicroseconds (10);
    
    Serial.printn ("tlder")
    
    SPI.transfer (0xF0);
    delay (500);
    
    // digitalWrite (cs、HIGH);
    
    serial.println ("已配置、正在启动");
    mux (0b00001111);//diff 1
    sync ();
    delay (500);
    }
    
    
    
    
    void loop ()
    {
    Serial.println ();
    //Serial.println ("adc");
    
    
    
    
    // digitalWrite (cs、low);
    SPI.beginTransaction(SPISettings(SPISPEED、MSBFIRST、SPI_MODE1); //启动 SPI
    delayMicroseconds (10);
    
    
    
    while (digitalRead (rdy)=1){};
    
    mux (0b00011111);//diff 1
    sync.;
    sery.println ("pot");
    spi.transfer (RDATA);//读取数据0000 0001 (01h)
    delayMicroseconds (10);
    
    
    
    计算();
    
    
    
    delayMicroseconds (10);
    
    // digitalWrite (cs、HIGH);
    //spi.endTransaction ();
    
    
    //
    ADS1255/6以二进制二
    进制//补码格式输出24位数据。 LSB 的权重为
    /2VREF/(PGA (223−1))。 正满量程输入会产生
    输出代码7FFFFFh、负满量程
    //输入会产生输出代码800000h。
    if (adc_val > 0x7ffff){//if MSB = 1
    ADC_val =(16777215ul - ADC_val)+ 1;//执行二进制补码
    serial.print("-");
    }
    否则
    {
    serial.print ("+");
    }
    */
    /mV /= 1000;
    
    
    delay (100);
    Serial.println ();
    
    while (digitalRead (rdy)= 1){};
    
    mux (0b00001111);
    sync ();
    
    //sync 命令1111 1100
    spi.transfer (0xFC);
    delayMicroseconds (10);
    
    //wakeup 0000
    spi.transfer (0x00);
    delayMicroseconds (10);
    
    Serial.println ("LDR");
    spi.transfer (RDATA);//读取数据0000 0001 (01h)
    delayMicroseconds (10);
    
    
    
    // digitalWrite (cs、HIGH);
    //spi.endTransaction ();
    
    calculation();
    } 

    Stm32f302r8代码

    #include "main.h"
    
    /* private 包括------------------------------------------------------- */
    /*用户代码开始包括*/
    
    /*用户代码结束包括*/
    
    /*私有 typedef ------------------------------------------------------- */
    /*用户代码 begin PTD */
    
    /*用户代码 end PTD */
    
    /* private define ------------------------------------------------------- */
    /*用户代码 begin pd */
    /*用户代码 end PD */
    
    /*私有宏------------------------------------------------------- */
    /*用户代码 begin PM */
    
    /*用户代码 end PM */
    
    /*私有变量------------------------------------------------------- /
    UART_HandleTypeDef hlpuart1;
    UART_HandleTypeDef hart3;
    
    SPI_HandleTypeDef hspi1;
    
    TIM_HandleTypeDef htim6;
    
    PCD_HandleTypeDef HPCD_USB_OTG_FS;
    
    /* USER CODE BEGIN PV */
    
    /* USER CODE END PV */
    
    /* PRIVATE 函数原型------------------------------------------------------- */
    void SystemClock_Config (void);
    static void MX_GPIO_Init (void);
    static void MX_LPUART1_UART_Init (void);
    static void MX_USART3_UART_Init (void);
    static void MX_TIM6_Init (void);
    静态空 MX_USB_OTG_FS_PCD_Init (void);
    静态空 MX_SPI1_Init (void);
    //用户代码 begin PFP */
    
    void delay ()//创建26us 的延迟
    {
    __HAL_TIM_ENABLE (&hmtim6);
    while (__HAL_TIM_GET_flag (&h6、_TIM_TIM_6= hTIM_TIM_TOP_DIT_RETPLATE
    );_ HTIM_6_TIM_DIT_HTIM_TOP_DIT_TIM_TOP_DIT_DIT_DISAL_6;_ TIM_TOP_DIT_DIT_DIT_DIT_DIT_
    TIM_FLAG_UPDATE);
    
    }
    
    void adc_write (uint8_t address、uint8_t value)
    {
    uint8_t data[3];
    data[0]= 0x50|地址;
    data[1]= 0x00;
    data[2]=值;
    delay ();
    HAL_SPI_transmit (&hspi1、data、3、10);
    delay ();
    
    }
    
    void adc_write_command (uint8_t 命令)
    {
    delay ();
    HAL_spi_transmit (&hspi1、命令、10);
    delay ();
    
    }
    
    void int adc_read (uint8_t
    
    datacc);
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    pin (0xpin、convert);pin (1、pin (1、pin);pio+
    、pin (1、pin、eagio+)
    
    RESET_Pin、GPIO_PIN_SET);
    }
    
    void ADC_init ()
    {
    
    delay ();
    adc_write_command (0xFE);
    delay ();
    ADC_WRITE_COMMAND (0x0F);
    delay ();
    ADC_WRITE (0x00、0x02); //status
    delay ();
    ADC_WRITE (0x02、0x20);//adcon
    Delay ();
    ADC_WRITE (0x03、 0x82);//drate 100sps
    delay ();
    adc_write_command (0xF0);//自 CAB of ADC
    delay ();
    HAL_delay (100);//100ms delay
    
    
    
    }
    
    //用户代码 end pFP *//
    
    /*私人用户代码------ */
    /*用户代码开始0 */
    
    
    /*用户代码结束0 */
    
    /**
    @短于应用程序入口点。
    *@retval int
    */
    int main (void)
    {
    //*用户代码 begin 1 */
    int32_t adc_data_ch0、adc_data_ch1;
    
    //用户代码 end 1 *
    
    
    /* MCU 配置------------------------------------------------------- //
    
    //*复位所有外设,初始化闪存接口和 SysTick。 //
    HAL_Init();
    
    //用户代码 begin Init */
    
    //*用户代码 end Init */
    
    //*配置系统时钟*/
    SystemClock_Init();
    
    //*用户代码 begin sysinit */
    
    //*用户代码 end sysinit *//
    
    //////*初始化所有已配置的外设*/
    MX_GPIO_Init
    
    
    
    ();MX_LARTUSB_INIT_UART3_UARTUSB_INIT ();UART_UARTUSB_INTO_INIT
    mx_SPI1_Init();
    //用户代码开始2 */
    HAL_GPIO_WritePin (GPIOB、CHIP_SELECT_Pin、GPIO_PIN_RESET);
    ADC_RESET ();
    MX_SPI1_Init();
    HAL_GPIO_WritePin (GPIOB、PDWN_Pin、GPIO_PIN_RESET);
    ADC_INIT ();
    /*用户代码末尾2 */
    
    /* Infinite loop */
    /*用户代码在*/
    while (1)
    {
    
    HAL_GPIO_WritePin (GPIOB、CHIP_SELECT_Pin、GPIO_RESET_RESET)、0x01
    
    (ADC_WRITE)时开始);(0x01); 0x0F);//通道0正
    延迟()的多路复用器;
    adc_write_command (0xFC);//同步
    延迟();
    adc_write_command (0x00);//唤醒
    延迟();
    while (HAL_GPIO_ReadPin (DRDY_GPIO_Port、DRDY_Pin));
    ADC_DATA_CH1 = ADC_READ ();
    HAL_GPIO_WritePin (GPIOB、CHIP_SELECT_Pin、GPIO_PIN_SET);
    
    HAL_DELAY (100);
    
    HAL_GPIO_WritePin (GPIOB、CHIP_SELECT_Pin、GPIO_PIN_RESET);
    DELAY ();
    ADC_WRITE (0x01、0x1F);//通道0正
    延迟()的多路复用器;
    ADC_WRITE_COMMAND (0xFC);//同步
    延迟();
    ADC_WRITE_COMMAND (0x00);//唤醒
    延迟();
    while (HAL_GPIO_ReadPin (DRDY_GPIO_Port、DRDY_Pin));
    ADC_DATA_ch0 = ADC_READ ();
    HAL_GPIO_WritePin (GPIOB、CHIP_SELECT_Pin、GPIO_PIN_SET);
    
    HAL_DELAY (100);
    
    HAL_GPIO_WritePin (GPIOB、LD2_Pin、1);
    delay ();
    HAL_GPIO_WritePin (GPIOB、LD2_Pin、0);
    delay();
    
    
    /*用户代码结束,同时*/
    
    //*用户代码开始3 */
    
    }
    //*用户代码结束3 */
    
    
    
    
    @*@系统时钟配置* retval 无
    */
    void SystemClock_Config (void)
    {
    RCC_OscInitTypeDef RCC_OscInitStruct={0};
    RCC_ClkInitTypeDef RCC_ClkInitTypeS0
    }={PeriphInClitType0};RCC_PeriphInPeriphInt ={0};RCC_PeriphInPeriphInt ={RiphInt}
    
    /**配置主内部稳压器输出电压
    */
    if (HAL_PWREx_ControlVoltageScaling (PWR_Regulator _VOLTAGE_SCALE1)!= HAL_OK)
    {
    ERROR_Handler ();
    }
    /**初始化 CPU、AHB 和 APB 总线时钟
    */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitSator.HSEState = RCC_HSE_BYPASS;
    RCC_OscilitSource.PLLCC_RIC_PLL.PLLP.PLLPM_RIC_RIC_RSTATE
    
    = RIC_RIC_RIC_RSTATE;RIC_RIC_RIC_RICL = RIC_PLT.PLT.PLLPM_RIC_RIC_RSTATE;RIC_RIC_RIC_RIC_RIC_RITT.
    RCC_OscInitStruct.PLL.PLLN = 8;
    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
    RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;RCC_OscInitStruct.PLLL.PLL= RCC_RIC_InStruct.PLLQ= RCC_RIV2
    ;RCC_RCC_RIC_InitStruct.PLLL.CL_RIC_RIC_RIC_RIC_RIVT=RIC_RIC_RIC_RIC_IFT.PLLL.CL_RIC_ON
    = RIC_RIC_RIC
    
    ERROR_Handler ();
    }/**
    初始化 CPU、AHB 和 APB 总线时钟
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKd = RCC_SYSCLCD_CLKDIV1
    
    ;RCC_CLKCLKCLKCLKDIV1 = RCC_CLKCLK1;RCC_CLKCLKCLKCLKCLKCLKCLKDIVDD_CLK_CLKCLK_CLKCLK_CLKCLKCLK_CLK_CLKCLK_CLK_CLK_CLKDIVDD.CLK_CLK_CLK_CLKCLK
    
    if (HAL_RCC_ClockConfig (&RCC_ClkInitStruct, flash_latit_1)!= HAL_OK)
    {
    ERROR_Handler ();
    }
    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART3|RCC_PERIPHCLK_LPUART1
    |RCC_PERIPHCLK_USB;
    PeriphClkInit.USart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
    PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1;
    PeriphClkInit = RiphLCC_LPART1CLKEST.R1CLIPRUSPIR1CL1;PLUCK_PLUCEST_PON1 = RIPLIPLIPRIPLIPRUSTRIPLESC1CLPON1;PLUCK_PON1 PLUCESCHIPRIPRIPRIPLCP_PON
    
    PeriphClkInit.PLLSAI1.PLLSAI1M = 1;
    PeriphClkInit.PLLSAI1.PLLSAI1N = 12;
    PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV2;
    PeriphClkInit.PLLSAI1LP_PLLSAI2=PLLSAI1LP_PLLCLR2_RiphLCLR
    ;PeriphLCLLCLLCL_RSAI1RCL_R1RSAI1Q = PLLCL_RSAI2_PLLIP1;PLLCL_RSAI2_RIP1
    PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_48M2CLK;
    IF (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInit)!= HAL_OK)
    {
    ERROR_Handler();
    }
    }
    
    //
    *@LPUART1初始化函数*
    @param None
    *@retval None
    */
    static void MX_LPUART1_UART_Init (void)
    {
    
    //用户代码 begin LPUART1_Init 0 *//
    
    ////*用户代码 end LPUART1_Init
    
    
    
    
    0 *//* LPUART1_Init 1 */ LPART1_Init 1 *用户代码 end *
    hlpuart1.Init.baudate = 209700;
    hlpuart1.Init.WordLength = UART_WORDLENGTH_7B;
    hlpuart1.Init.stopbits = UART_stopbits_1;
    hlpuart1.Init.Parity = UART_parity;
    hlpuart1.Init.Mode = UART_MODE_TX_RX;
    hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_none;
    hlpuart1.Init.OneFeatureSampling = UART_one_bit_SAMPLE_DISABLE;
    hlpuart1.Init.ClockPrescaler = UART_Advature1_Inature1; UART_Inpet.Inuature1_Inuature.Inuature1
    ;uart_Infor_Inuature1;uart_Inuature_Inuature.Inuature
    hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
    if (HAL_UART_Init (&hlpuart1)!= HAL_OK)
    {
    ERROR_Handler ();
    }
    if (HAL_UARTEx_SetTxFifoThreshold (&hlpuart1、UART_TXFIFO_THREST_1_8)!= HAL_OK)
    {
    ERROR_Handler ();
    }
    if (HAL_UARTEx_SetRxFifoThreshold (&hlpuart1、UART_RXFIFO_THRESHOLD_1_8)!= HAL_OK)
    {
    ERROR_Handler();
    }
    //*用户代码 begin LPUART1_Init 2 *//
    
    //*用户代码 end LPUART1_Init 2 */
    
    }
    
    //*
    @简要 USART3初始化函数
    *@param 无
    *@retval 无
    */
    static void MX_USART3_UART_Init (void)
    {
    
    //*用户代码 begin USART3_Init 0 *//
    
    
    
    */ USER CODE END/* USER CODE END/ USER CODE BEGIN 0 USART3_Init 1 */
    
    ///*用户代码结束 USART3_Init 1 */
    huart3.instance = USART3;
    huart3.Init.baudate = 115200;
    huart3.Init.WordLength = UART_WORDLENGTH_8B;
    huart3.Init.stopbits = UART_stopartbits 1;
    uart.inuart3 = UART_parity = UART3_uniity 奇偶校验;uart.inuart.inuit_3
    huart3.Init.Mode = UART_MODE_TX_RX;
    huart3.Init.HwFlowCtl = UART_HWCONTROL_none;
    huart3.Init.overSAMPLING = UART_OPAMPLING_16;
    huart3.Init.OneBitSample_disable;huart3.Init_DIV1
    ;uartPrescaler = UART_DIV1
    huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_init;
    if (HAL_UART_Init (&huart3)!= HAL_OK)
    {
    ERROR_Handler ();
    }
    if (HAL_UARTEx_SetTxFifoThreshold (&huart3、UART_TXFIFO_THREST_1_8)!= HAL_OK)
    {
    ERROR_Handler ();
    }
    if (HAL_UARTEx_SetRxFifoThreshold (&huart3、UART_RXFIFO_THRESHOLD_1_8)!= HAL_OK)
    {
    ERROR_Handler();
    }
    if (HAL_UARTEx_DisableFifoMode (&huart3)!= HAL_OK)
    {
    ERROR_Handler();
    }
    //*用户代码 begin USART3_Init 2 *//
    
    //*用户代码 end USART3_Init 2 */
    
    }
    
    //*
    @SPI1初始化函数*
    @param 无
    *@retval 无
    */
    static void MX_SPI1_Init (void)
    {
    
    //*用户代码 begin SPI1_Init 0 */
    
    //*/* USER CODE END SPI1 USER
    
    CODE 0 */ USER CODE END USER CODE 0 SPI1_Init 1 */
    
    //*用户代码结束 SPI1_Init 1 */
    /* SPI1参数配置*/
    hspi1.instance = SPI1;
    hspi1.Init.Mode = SPI_MODE_MASTER;
    hspi1.Init.DIRECTION = SPI_DIRECT_2LINES;hspi1.Init.Spi1_SPI_POLIT.MODE
    = SPI_POLIT_1; HSPI8SPI_BIT_RATI.DIT_SPI_BIT.DIT.DIT.DIT.DIT.DIT.DIT.DIT_DIT_LIT_DIT_DIT_
    
    hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
    hspi1.Init.NSS = SPI_NSS_Soft;
    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
    hspi1.Init.FirstBit = SPI_FIRSTBIT_BADDRESCAST_32;HTIESCAST_DITESCAST_DISABET_DISABLE_32;hTIMESCAST_INIT_INIT_DITIDT_TIMESCL.TDITDI
    
    hspi1.Init.CRCalaculy = SPI_CRCCALCULATION_DISABLE;
    hspi1.Init.CRCPolynomial = 7;
    hspi1.Init.CRCCLhelength = SPI_CRC_LENGTH_DATAZE;
    hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
    if (H_OK)
    (HAL_1)!(HAL_OK
    ERROR_Handler();
    }
    /*用户代码 begin SPI1_Init 2 */
    
    //*用户代码 end SPI1_Init 2 */
    
    }
    
    //*
    @简短 TIM6初始化函数
    *@param 无
    *@retval 无
    */
    static void MX_TIM6_Init (void)
    {
    
    //*用户代码 begin TIM6_Init 0 */
    
    //*/*用户代码 retval 0_DIM6_Init 0*
    
    ={mastrType0}
    
    /*用户代码 begin TIM6_Init 1 */
    
    //*用户代码 end TIM6_Init 1 */
    htim6.instance = TIM6;
    htim6.Init.Prescaler = 0;
    htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim6.Init.PERIOD = 31;
    autocontim6_Inload.Inload.Inautobrad.autobiad.TIM6_autobr.autobiad.autobiad.autobiad.autobiad.autobiad.autob
    if (HAL_TIM_Base_Init (&htim6)!= HAL_OK)
    {
    ERROR_Handler ();
    }
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    IF (HAL_Timex_MasterConfigSynchronization (&htim6、&sMasterConfig)!= HAL_OK)
    {
    ERROR_Handler();
    }
    //*用户代码 begin TIM6_Init 2 *//
    
    ////*用户代码 end TIM6_Init 2 */
    
    }//*
    
    
    @简要 USB_OTG_FS 初始化函数
    *@param 无
    *@retval 无
    */
    static void MX_USB_OTG_FS_Init (void)
    {//
    
    *用户代码 begin USB_OTG_FS_Init 0*
    
    /US_Init 0*
    
    / US_Incode *用户代码* USB_OTG_FS_Init 1 */
    
    *用户代码结束 USB_OTG_FS_Init 1 */
    hpcd_USB_OTG_FS.instance = USB_OTG_FS;
    hpcd_USB_OTG_FS.Init.dev_endpoints = 6;
    hpPCD_USB_OTG_FS.Init.phy_itface = hpcd_PHY_embedded;
    hpcd_USB_OTG_FS.Init.Init = hpcd_enable_enable_usb_enable.usb_enable.enable_usb_enable.enable= hpcd_power_f_enable.us_enable.us_enable
    
    HAL_USB_OTG_FS.Init.lpm_enable = disable;
    hpcd_USB_OTG_FS.Init.battery_charging_enable = enable;
    hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = disable;
    hpcd_USB_OTG_FS.Init.VBUS_sensing_enable = enable;
    if (HAL_PCD_Init (&hpd_USB_OTG_FS))= OK!
    ={hpdc HAL_OK_OK
    ERROR_Handler
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ();}//用户代码 begin USB_OTG_FS_Init 2 *///*用户代码 end USB_OTG_FS_Init 2 */}//*@简要 GPIO 初始化函数*@param 无*@retval 无*/ static void MX_GPIO_Init 2 *}{GPIO_InitTypeDef GPIO_Int GPIO_ENABLE_CLK;_ GPIO_REST_CLK_ENABLE_GPIO_RIC_CLK_ENABLE_CLK (*=_ GPIO_RCO_CLK_ENABLE_CLK_ENABLE_CLK_ENABLE_CLK_ENABLE_CLK_ENABLE_GPIOR_CLK_ENABLE_CLK_ENABLE_CLK_=_(_);_ GPIOR_CLK_GPIO_RCO_CLK_ENABLE_CLK_ENABLE_CLK_ENABLE_CLK_ENABLE_CLK_ENABLE_CLK_ENABLE
    _HAL_RCC_GPIOD_CLK_ENABLE ();
    __HAL_RCC_GPIOG_CLK_ENABLE ();
    HAL_PWREx_EnableVddIO2 ();
    
    /*Configure GPIO 引脚输出电平*
    HAL_GPIO_WritePin (GPIO_Select_Pin);*GPIO_Pin
    
    
    
    
    
    
    
    
    
    Pin Pin、GPIO_Pin、GPIO_RPM_Pin、GPIO_Pin = GPIO_Pin、GPIO_Pin、GPIO_Pin、GPIOb = 1、GPIO_Pin、GPIO_Pin、GPIO_Pin、GPIO_Pin、GPIOb = 1、GPIO_Pin、GPIO_Pin、GPIO_Pin、GPIO_Pin、GPIO...
    
    
    
    /*配置 GPIO 引脚:DRDY_Pin */
    GPIO_InitStruct.Pin = DRDY_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT.Pull
    ;GPIO_InitStruct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init (DRDY_GPIO_Port、&GPIO_InitStruct));
    
    /*配置 GPIO 引脚:CHIP_SELECT_Pin RESET_Pin PDWN_Pin */
    GPIO_InitStruct.Pin = CHIP_SELECT_PULT|PDWN_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTP_PP;
    GPIO_InitStruct.Pull = GPIO_PULL_PULLUP;GPIO_InIT_InSpeed
    
    = GPIO_LET.B_LOW;GPIO_LET_GPIO_LET_GPIO_LET.Q_GPIO_LET.GPIO_LET.GPIO_LET.GPIO_LET.GPIO_LET.GPIO_LET. GPIO_InitStruct);
    
    /*配置 GPIO 引脚:LD3_Pin LD2_Pin */
    GPIO_InitStruct.Pin = LD3_PIN|LD2_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTP_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InITStruct.Pin
    = GPIO_InSpeed
    ;GPIO_InQ_InfrT.B;GPIO_InIT_Inspeed = GPIO_LET.GPIO_LET.Q_InIT_InIT_LOT &GPIO_InitStruct);
    
    /*配置 GPIO 引脚:USB_PowerSwitchOn_Pin */
    GPIO_InitStruct.Pin = USB_PowerSwitchOn_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTP_PP;
    GPIO_InitStruct.Pull = GPIO_InitSwitchOn_PLL;GPIO_InitSfor_Speed
    = GPIO_InT_Port_InSpeed;GPIO_T.Q_InT_PowerPort_InSpeed
    &GPIO_InitStruct);
    
    /*配置 GPIO 引脚:USB_Over流 引脚*/
    GPIO_InitStruct.Pin = USB_Over流 引脚;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init (USB_OPA_Struct.Port
    
    );&GPIO_InStructure_InPort}
    
    /* USER CODE BEGIN 4 */
    
    /* USER CODE END 4 */
    
    /**
    @brief 在发生错误时执行此函数。
    *@retval None
    */
    void Error_Handler (void)
    {
    //*用户代码 begin Error_Handler_debug */
    //*用户可以添加自己的实现来报告 HAL 错误返回状态*/
    
    //*用户代码 end Error_Handler_debug */
    }
    
    #ifdef use_full_assert
    //
    *@brief 报告源文件和源文件的名称 行号
    * 发生了 assert_param 错误的位置。
    *@param 文件:指向源文件名的指针
    *@param 行:assert_param 错误行源编号
    *@retval 无
    */
    void assert_failed (char *文件、uint32_t 行)
    {
    //*用户代码 begin 6 *//
    //*用户可以添加自己的实现来报告文件名和行号,
    TEX:printf ("错误的参数值:第%d\r\n"行上的文件%s、文件、行)*/
    //*用户代码结束6 */
    }
    #endif //* use_full_assert * 

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

    你好、Gokul、

    我建议首先探测 ADS1256上的/DRDY 信号、以确保其处于活动状态。 您应该会看到一个周期性波形、其中/DRDY 下降沿之间的时间对应于数据速率。 如果没有、则需要检查 ADC 是否正确通电、GPIO 配置是否正确以及器件是否计时。

    如何将 ADS1256连接到 STM MCU? 这些器件之间是否有公共接地?
    在其中一个波形(使用 Arduino)上、DOUT 看起来没有稳定的接地基准电压。

    注意:在探测 SPI 信号时、请确保在 ADC 附近探测它们、并将示波器接地至 ADC 的接地电位、以便您可以看到 ADC 看到的结果。

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

    尊敬的 Hall:

      我检查了您提到的所有内容、但仍然无法将转换后的数据从 ADC 获取到 stm32f302r8板。 请仔细检查这两个代码、并尝试指出我的 stm32f302r8代码中的错误。 我在前面的注释中共享了代码。 我想我的代码中缺少一些东西。 请帮助我找到代码中缺少的器件。 供参考、我在前面的注释中共享的 Arduino 代码运行良好。 我的 SPI 时钟极性较低且时钟相位2相位边缘的1MHz 时钟。 请帮我处理同样的问题。

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

    你好、Gokul、

    您是否可以捕获更多的 SPI 通信示波器截屏? (理想情况下显示/CS、DIN、DOUT、SCLK 信号)。

    我查看过您的代码一次、没有看到任何明显的错误。 如果您仍然遇到问题、那么我认为查看 SPI 信号将是进行故障诊断的最简单方法。

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

    尊敬的 Hall:

      我的 DOUT 引脚中没有任何波形。 我真的不知道问题是什么。 我已经向大家介绍了 Din 和 SCLK 波形、并且我启用了 GPIO 引脚、用于随时将芯片选择设为低电平。 我还在 DRDY 引脚中获取周期性信号。 是否有可能不会将数据写入状态 adcon 和 drate 寄存器中。 如果 SPI 不工作、那么我永远不会得到 Din 波形、但在我的例子中、我得到了该波形。 我认为转换不是在 ADC 端进行的、而且 ADC 端还有任何8位数据传输寄存器。 如果不是从何处获取转换后的数据。 如果我错了、请纠正我的问题。 再次感谢您快速回复。  

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

    你好、Gokul、

    ADS1256如何连接到 STM MCU? 您是跳过 ADS1256EVM 的接线、还是构建了自己的 PCB?

    如果您看到一个周期/DRDY 信号、但在感应 SCLK 时没有 DOUT、则 MCU 和 ADC 之间的接地基准悬空、或者/CS 可能保持高电平。

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

    尊敬的 Hall:

      、我使用的是 Waveeshare 高分辨率 ADC 和 Nucleo- F302R8 MCU 板。 我使用跳线连接两个板。 今天我检查了我的代码,发现 DRDY 引脚始终处于高电平,并停留在以下语句中:while (HAL_GPIO_ReadPin (DRDY_GPIO_Port、DRDY_Pin))。 我还验证了它们是否已连接到公共接地。 问题可能出在哪呢?

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

    尊敬的 Hall:

     我之前所说的、我正在尝试将波浪形 ADC 与 Nucleo -f302r8板连接。 现在、我能够转换数据并在我的微控制器中接收数据、但我面临着一 组不同的问题。 接收到的数据不在刻度限制范围内。 我已经给出了2.5V 的基准电压和下面的寄存器值。  

    状态寄存器= 0x02

    ADCON = 0x20

    速率 = 0x82

    输入多路复用器= 0x0F aincom = grnd //正态通道

    当我在 ain0中给出0v 时、我将获得800000作为输出、对于5V、我将获得 BFFFFF

    0V - 800000  5V - BFFFFF

    输入多路复用器= 0xF0 aincom = grnd //负通道

    当我在 ain0中给出0v 时、我将获得 FFFFFF 作为输出、对于5V、我将获得 C00000

    0V - 800000  5V - C00000

    此外、我的数据会有些波动、并给出任何保持稳定的建议。

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

    你好、Gokul、

    您使用什么来输入信号源、它相对于 ADS1256是如何连接和偏置的? 如果您有可以分享的电路原理图、那将非常有用。

    似乎您的输入信号源连接到不同于 ADS1256的接地基准。 您可能还需要探测基准电压以确保其稳定。 如果基准电压发生振荡、则可能会得到意外且振荡的 ADC 输出代码。

    此致、
    Chris

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

    尊敬的 Hall:

     非常感谢您的帮助。 从最初阶段看来,问题似乎就在于接地。 现在正在进行转换、我能够读取一个更精确的值、最多可达5个小数点。 尽管正在进行转换、但我发现每秒样本数存在一些不匹配。 因此、我在写入一些值后读取所有三个寄存器(状态、adcon 和 DRATE)、留下500ms 的足够延迟时间。 结果是值不匹配。 请查看以下数据。 您能帮助我解决这个问题吗? 但是、即使存在这种不匹配、我也会获得正确的转换数据。 原理图链接(https://www.waveshare.com/w/upload/2/29/High-Precision-AD-DA-board.pdf)供您参考)。

    寄存器 写入值(十六进制) 500ms 后读取值(十六进制)
    状态 0x06 0x30
    Adcon 0x20 0x20
    速率 0x82 0xF0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Hall:

     我之前提到的、我的 ADC 工作正常、但我在寄存器中写入时遇到了问题、但我仍然能够获取转换后的数据。 请查看我之前的评论。 我有两个问题要解决。 请帮我处理同样的问题。

    问题1:我在 STATUS、ADCON、DRATE 寄存器中写入的值与我在同一寄存器中100ms 后读取的值不匹配。

      但是、我在 MUX 寄存器中写入的值是匹配的、并且我通过动态变化对其进行了验证。 请帮我解决问题。

    问题2:DRate 值默认为0xF0 (因为 DRate 值在我写它时不更新)、即30ksps、我已使用示波器中的 drdy 信号验证了该值。

      问题是、当我以频率为1Hz 的正弦信号(时间周期= 1sec)的形式给出输入时、我在一秒内仅获得2.8k 样本

      我的假设是、如果我设置为30ksps、那么对于时间周期为1sec 的正弦波、应该得到30k 样本、但当我读取样本时、我只得到2.8k 样本。 我已经设置了 SPI 时钟频率       2MHz。 如果我错了、请纠正我的问题。

      我应该怎么做才能获得至少10k 个样本?  

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

    你好、Gokul、

    由于此问题与您的其他帖子有点重复、请在此处查看我的回答:

    https://e2e.ti.com/support/data-converters/f/73/p/859187/3177623#3177623

    此致、

    Bob B