STM32F103C8T6采集电表芯片ATT7053BU的数据,采上来的数据固定不变

2019-07-14 19:56发布

如题,这两天用STM32F103C8T6采集ATT7053BU的数据,结果采集上来的数据始终固定不变,我传不同的寄存器地址,他的数据都不变,跪求懂得大神来围观围观,知道知道小弟,感激不尽!
这是我的代码的主要部分,附图是我用串口发出来以后全是一样的数据,附件是我的工程。跪求大神帮忙看看。
  1. /**********************************************************************
  2. //函数名称:Init_ATT7053(void)
  3. //功能    :初始化ATT7053
  4. **********************************************************************/
  5. void Init_ATT7053(void)
  6. {
  7.     int j;
  8.        
  9. <span style="line-height: 27.2000007629395px;">    </span>SPI_configuration();
  10.        
  11. <span style="line-height: 27.2000007629395px;">    </span>GPIO_ResetBits(CS_PORT, CS_PIN);        //片选拉低
  12. <span style="line-height: 27.2000007629395px;">    </span>for (j=50; j>0; j--);
  13. <span style="line-height: 27.2000007629395px;">    </span>GPIO_SetBits(CS_PORT, CS_PIN);                //片选拉高
  14. <span style="line-height: 27.2000007629395px;">    </span>for (j=50; j>0; j--);

  15. <span style="line-height: 27.2000007629395px;">    </span>SPI_Write(0x33,0x0055);                //0x33:软件复位寄存器。0x55:复位
  16. <span style="line-height: 27.2000007629395px;">    </span>SPI_Write(0x40,0x2000);                //0x40:EMU配置寄存器。0x2000:bit13=1,能量寄存器读后清零
  17. <span style="line-height: 27.2000007629395px;">    </span>SPI_Write(0x43,0x0007);                //ADC开关寄存器,I1,I2,U全部打开
  18.        
  19. <span style="line-height: 27.2000007629395px;">    </span>SPI_Write(0x59,0x0001);                //设置电流  电压增益
  20. <span style="line-height: 27.2000007629395px;">    </span>SPI_Write(0x41,0x0000);                //设置电流  电压增益                        -------------->0x41,page28,时钟配置寄存器
  21. }
复制代码
  1. //配置引脚接口
  2. void SPI_configuration(void)
  3. {
  4.     GPIO_InitTypeDef GPIO_InitStructure;

  5. <span style="line-height: 27.2000007629395px;">    </span>RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOA、GPIOB

  6. <span style="line-height: 27.2000007629395px;">    </span>///GPIO_InitStructure.GPIO_Pin =RST_5463_PIN | SCLK_PIN | SDI_PIN;
  7. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Pin = SCLK_PIN;
  8. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出:即通用IO口输出功能                  
  9. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10. <span style="line-height: 27.2000007629395px;">    </span>GPIO_Init(GPIOA, &GPIO_InitStructure);

  11. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Pin =CS_PIN;
  12. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  13. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14. <span style="line-height: 27.2000007629395px;">    </span>GPIO_Init(GPIOA, &GPIO_InitStructure);

  15. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Pin = SDI_PIN;
  16. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                          
  17. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  18. <span style="line-height: 27.2000007629395px;">    </span>GPIO_Init(GPIOA, &GPIO_InitStructure);

  19. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Pin =SDO_PIN;
  20. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                          
  21. <span style="line-height: 27.2000007629395px;">    </span>GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  22. <span style="line-height: 27.2000007629395px;">    </span>GPIO_Init(GPIOA, &GPIO_InitStructure);
  23. }       
复制代码
  1. //写函数
  2. void        SPI_Write(u8 address, u32 write_data)
  3. {
  4.         char i;       
  5.         int j;
  6.         u32 temp_data = 1;
  7.        
  8.         GPIO_SetBits(CS_PORT, CS_PIN);
  9.         for (j=50; j>0; j--);

  10.         GPIO_ResetBits(SCLK_PORT, SCLK_PIN);        //确保CLK初始状态是0
  11.         for (j=50; j>0; j--);

  12.         GPIO_ResetBits(CS_PORT, CS_PIN);        //片选置0,生效
  13.                        
  14.         address=address|0x80;
  15.         for(i=8; i>0; i--)
  16.         {
  17.                         GPIO_SetBits(SCLK_PORT, SCLK_PIN);       
  18.                         for (j=50; j>0; j--);       
  19.                        
  20.                         if(((address & (0x01<<(i-1)))>>(i-1)))        //address 地址从0x00到0x7F
  21.                         {
  22.                                 GPIO_SetBits(SDI_PORT, SDI_PIN); //1表示主机向从机写数据
  23.                                 for (j=50; j>0; j--);       
  24.                         }
  25.                         else
  26.                         {
  27.                                 GPIO_ResetBits(SDI_PORT, SDI_PIN);
  28.                                 for (j=50; j>0; j--);
  29.                         }
  30.                        
  31.                         GPIO_ResetBits(SCLK_PORT, SCLK_PIN);        //从机需要在下降沿取数据
  32.                         for (j=50; j>0; j--);       
  33.         }
  34.        
  35.         for (j=50; j>0; j--);       
  36.        
  37.         for(i=23;i>0;i--)
  38.         {
  39.                         GPIO_SetBits(SCLK_PORT, SCLK_PIN);       
  40.                         for (j=50; j>0; j--);       
  41.                        
  42.                         if(((write_data & (temp_data<<i))>>i))        //address 地址从0x00到0x7F
  43.                         {
  44.                                 GPIO_SetBits(SDI_PORT, SDI_PIN);
  45.                                 for (j=50; j>0; j--);       
  46.                         }
  47.                         else
  48.                         {
  49.                                 GPIO_ResetBits(SDI_PORT, SDI_PIN);
  50.                                 for (j=50; j>0; j--);       
  51.                         }
  52.                        
  53.                         GPIO_ResetBits(SCLK_PORT, SCLK_PIN);        //从机需要在下降沿取数据
  54.                         for (j=50; j>0; j--);       
  55.   }
  56.         GPIO_SetBits(CS_PORT, CS_PIN);       
  57.        
  58. }
复制代码

  1. //读函数
  2. u32 SPI_Read(u8 address)
  3. {
  4.         char i;
  5.         int j;
  6.         u32 temp_data;
  7.         u32 miso_val;
  8.        
  9.         temp_data = 0;                       
  10.        
  11.         GPIO_SetBits(CS_PORT,CS_PIN);                //片选初始状态为1
  12.         for (j=50; j>0; j--);

  13.         GPIO_ResetBits(SCLK_PORT, SCLK_PIN);        //确保CLK初始状态是0               
  14.         for (j=50; j>0; j--);       

  15.         GPIO_ResetBits(CS_PORT, CS_PIN);        //片选置0,生效
  16.         for (j=50; j>0; j--)
  17.         {
  18.                
  19.         }
  20.        

  21.         address=address&0x7F;                       
  22.         for(i=8; i>0; i--)
  23.         {
  24.                 GPIO_SetBits(SCLK_PORT, SCLK_PIN);         //CLK置高
  25.                 for (j=50; j>0; j--);       
  26.                
  27.                 if( (address & ( 0x01<<(i-1) )) >> (i-1) )         //address 地址从0x00到0x7F
  28.                 {
  29.                         GPIO_SetBits(SDI_PORT, SDI_PIN); //1表示主机向从机写数据       
  30.                 }
  31.                 else
  32.                 {
  33.                         GPIO_ResetBits(SDI_PORT, SDI_PIN);
  34.                 }
  35.                 for (j=50; j>0; j--);

  36.                 GPIO_ResetBits(SCLK_PORT, SCLK_PIN);         //CLK置低(下降沿),从机需要在下降沿取数据
  37.                 for (j=50; j>0; j--);       
  38.         }//从机接收到命令后,开始送出数据,上升沿送数据


  39.         for(i=24; i>0; i--)
  40.         {
  41.                 GPIO_SetBits(SCLK_PORT, SCLK_PIN); //
  42.        
  43.                 if(GPIO_ReadInputDataBit(SDO_PORT, SDO_PIN))
  44.                         miso_val=0x01;
  45.                 else
  46.                         miso_val=0x00;
  47.                
  48.                 temp_data = temp_data|(miso_val<<(i-1));
  49.                 for (j=50; j>0; j--);       
  50.                 GPIO_ResetBits(SCLK_PORT, SCLK_PIN);        //从机需要在下降沿取数据
  51.                 for (j=50; j>0; j--);       
  52.         }

  53.         GPIO_SetBits(CS_PORT, CS_PIN);       
  54.         return temp_data;
  55. }
复制代码
  1. /*
  2. * 函数名:main
  3. * 描述  :主函数
  4. * 输入  : 无
  5. * 输出  :无
  6. */
  7. int main(void)
  8. {  
  9. <span style="line-height: 27.2000007629395px;">    </span>u32 temp_data = 0;
  10.        
  11. <span style="line-height: 27.2000007629395px;">    </span>/* 配置系统时钟为 70M */      
  12. <span style="line-height: 27.2000007629395px;">    </span>SystemInit();
  13. <span style="line-height: 27.2000007629395px;">    </span>/* USART1 config 9600 8-N-1 */
  14. <span style="line-height: 27.2000007629395px;">    </span>USART1_Config();

  15. <span style="line-height: 27.2000007629395px;">    </span>Init_ATT7053();        //Include SPI_configuration.
  16.        
  17.   
  18. <span style="line-height: 27.2000007629395px;">    </span>while (1){
  19.     <span style="line-height: 27.2000007629395px;">   </span><span style="line-height: 27.2000007629395px;"> </span><span style="line-height: 1.7;">printf("This is test printf ");</span>
复制代码

aaaaaaaaaaaaaaaaaaaaa.png
STM32_USART1_TXD ATT7053BU.rar 下载积分: 积分 -1 分
1.2 MB, 下载次数: 71, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。