STM32F4 SPI驱动ADS1298读ID第一次出错,第二次读到ID

利用串口打印读到ID的数据,发现出现了循环,第一次读出来结果为0,第二次读出来ID正确为0x92。麻烦大神帮忙看一下,以下是初始化代码

unsigned char init_ADS1x9x (unsigned char device_slot)
{
    unsigned char Verify_Check = 0;
    unsigned char Module_Present = 0;
    unsigned char ADS1x9x_Version_ID_Number=0;
    unsigned char number_of_retries = 10;

    init_ADS1x9x_Data_Ready_Interrupt (device_slot);     // Set up the ADS1x9x Interrupt pin
    init_ADS1x9x_IO (device_slot);    
    delay_us(40);
    //ADS1298Èí¸´Î»
    Soft_Reset_ADS1x9x(device_slot);
    //Í£Ö¹Á¬Ðø¶ÁÊý
    Stop_Read_Data_Continuous (device_slot);
    delay_us(40);
    while (!Module_Present)                                                     // Wait for Module to be present
    {
        if (number_of_retries)
        {
           ADS1x9x_Version_ID_Number = ADS1x9x_Read_Version (device_slot);
    
          if (ADS1x9x_Version_ID_Number == ADS1x9x_VERSION_ID)                  // (0x22 for old board, 0x42 for new one)                 
          {
               printf("ID:%02x\r\n",ADS1x9x_Version_ID_Number);     
                        Module_Present = SET;  
        

#ifdef TERMINAL

              while (Print_UART_Message_Busy_Flag);                             // Prevent overwrite of UART FIFO  
              UART_PrintF( "\r\n ADS1x9x Found ....", 20);

#endif  /* Terminal */

          }
          number_of_retries--;
        }
        else
        {
                
#ifdef TERMINAL
            
              while (Print_UART_Message_Busy_Flag);                             // Prevent overwrite of UART FIFO  
              UART_PrintF ("\r\n ADS1x9x Not Found ....", 23);

#endif  /* Terminal */
              
              return ADS_1x9x_NOT_FOUND;
        }
                    printf("times:%d\r\n",10-number_of_retries);
    } 

***************************************************************************

unsigned char ADS1x9x_Read_Version (unsigned char device_slot)  
{
    unsigned char Version_ID = 0;
    
    Set_ADS1x9x_Chip_Enable (device_slot);
    delay_ms(10);
    ADS1x9x_SPI_Address_Byte_Count (device_slot, READ_DEVICE_ID, SINGLE_BYTE_READ_WRITE);    // Read Device ID, Single Byte the Part Number
    delay_ms(40);
    Version_ID = ADS1x9x_SPI_Data (device_slot, SPI_TEST_DATA); // Send Dummy variable (0x55) to return the part number (Chip Select Cleared automatically)
    //Version_ID = ADS1x9x_SPI_Data (device_slot, SPI_TEST_DATA); // Send Dummy variable (0x55) to return the part number (Chip Select Cleared automatically)
  printf("ver_id:%02x\r\n",Version_ID);
    delay_ms(40);
    Clear_ADS1x9x_Chip_Enable (device_slot);
    delay_ms(40);
    return Version_ID;
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
STM32F4是意法半导体公司推出的一款高性能微控制器系列,具有较高的运算速度和丰富的外设接口。ADS1255是一款低噪声、低功耗的24位模数转换器,通过SPI接口与微控制器通信。 首先,STM32F4作为主控器,支持SPI接口与ADS1255进行通信。SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于多个外设与微控制器之间进行数据交换。在STM32F4中,SPI接口使用多个引脚实现,包括时钟线、主设备输出/从设备输入线、主设备输入/从设备输出线和片选线。 其次,ADS1255是一款高精度的模数转换器,能够将模拟信号转换成数字信号。它采用24位的sigma-delta调制技术,能够在低功耗下实现高精度的信号采样。在使用ADS1255时,需要先配置其工作模式、增益、采样速率等参数,并发送相应的指令和数据给它。 通常情况下,使用STM32F4ADS1255进行通信的步骤如下: 1. 配置STM32F4SPI接口参数,包括通信速度、数据位宽等。 2. 初始化ADS1255的工作模式、增益、采样速率等参数,可以通过发送相应的指令给ADS1255来实现。 3. 根据需要,配置STM32F4的GPIO口,将片选线与ADS1255连接。 4. 通过SPI接口发送取指令给ADS1255,以获取所需的模拟信号。 5. 通过SPI接口ADS1255返回的数据,获取数字信号。 6. 对获取的数字信号进行处理、分析或显示。 综上所述,STM32F4ADS1255可以通过SPI接口进行通信,实现模拟信号的采集和数字信号的处理。这种组合具有较高的性能和精度,可以在很多应用中发挥重要的作用,如仪器仪表、传感器数据采集等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值