搜索
bottom↓
回复: 30

adis16350调试不成功

[复制链接]

出0入0汤圆

发表于 2009-6-1 09:07:59 | 显示全部楼层 |阅读模式
请教adis16350调试问题,用msp430口模拟SPI接口与其通讯不上

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2009-6-1 09:15:53 | 显示全部楼层
哪位指教一下啊,万分着急

出0入0汤圆

 楼主| 发表于 2009-6-1 09:24:00 | 显示全部楼层
这个芯片是三轴角加速度传感器,接口是SPI,总是通讯偶尔对,调试时间周期也没用

出0入0汤圆

发表于 2009-6-1 09:39:55 | 显示全部楼层
16350没用过 16130做过测试 模拟和硬件的spi都用过 都没问题
你再看看技术手册,应该是时序或者是初始化没有成功,再说这是没有使能,再也不会有什么其他的问题了吧

初始化有没有成功你用示波器看一下 数据处理结束的那个低电平有没有就知道了

出0入0汤圆

 楼主| 发表于 2009-6-1 10:00:05 | 显示全部楼层
谢谢3楼,请您能否说的具体点,是16350还需要初始化么?还是我的单片机初始化?

出0入0汤圆

发表于 2009-6-1 10:13:03 | 显示全部楼层
adis16130 是要初始化的

出0入0汤圆

发表于 2009-6-1 10:18:25 | 显示全部楼层
adis16350 datasheetourdev_449609.pdf(文件大小:412K) (原文件名:ADIS16350.pdf)

你看看这个技术手册 上面有控制指令

出0入0汤圆

 楼主| 发表于 2009-6-1 10:23:52 | 显示全部楼层
是不是说上电后,先用SPI给adis16130的某个寄存器写数值?

出0入0汤圆

发表于 2009-6-1 10:28:40 | 显示全部楼层
恩是的  上面的那个技术手册你好好看看 里面有各个寄存器的参数

我一上午没干活了 下了

晚上再上来 看看

出0入0汤圆

 楼主| 发表于 2009-6-1 10:33:22 | 显示全部楼层
我现在是编了一个测试程序,单片机初始化后就读adis16350的一个寄存器,默认值是0402,但读出来的偶尔是这个值,还有别的值,不固定

出0入0汤圆

 楼主| 发表于 2009-6-1 10:34:17 | 显示全部楼层
谢谢,是要先写控制寄存器,然后才能读?

出0入0汤圆

 楼主| 发表于 2009-6-1 10:35:59 | 显示全部楼层
不能一上电就直接读某个寄存器?

出0入0汤圆

 楼主| 发表于 2009-6-1 10:41:16 | 显示全部楼层
#include <msp430x14x.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>



#define   comm    150
/////  管脚定义/////
#define  CS_1    P3OUT |=0x01;
#define  CS_0    P3OUT &=~0x01;
#define  DOUT_1  P3OUT |=0x02;
#define  DOUT_0  P3OUT &=~0x02;
#define  SCLK_1  P3OUT |=0x08;
#define  SCLK_0  P3OUT &=~0x08;

#define  DIN_IN   ((P3IN & 0x04)==0x04);










static  unsigned char   comm_data0[comm];
static  unsigned char   comm_data1[comm];


static unsigned int semiseconde;//,test1,test2;///half_sseconde,,seconde







//////port ini/////
void   init_ioport(void)
{
  P1DIR=0Xff;  //输出
  P1IE=0X00;   //禁止中断
  P1SEL=0X00;  // IO端口
  P1OUT=0X00;  // 初始值为0   为青云液晶的数据口

  P2DIR=0X00;  //输入
  P2SEL=0X00;  //IO端口
  P2IE=0X00;   //禁止中断

  P3DIR=0X7b;  //p3.7,p3.2为输入, 其他为输出
  P3SEL=0Xc0;  //p3.6 p3.7 用作232 spi 通讯,其他作为IO端口

  P4DIR=0XFF;  //输出
  P4SEL=0X00;  //IO端口
  P4OUT=0X00;  //端口初始值

  P5DIR=0XFF;  //输出
  P5SEL=0X00;  //IO端口
  P6OUT=0X00;  //端口初始值

  P6DIR=0XFC;  //p6.0 ,p6.1 输入,其他输出
  P6SEL=0X55;  //p6.0, p6.1 用作模数转换输入,其他输出
}
//////end/////////


//////timer_A ini/////
void  init_timerA(void)
{
  TACTL=MC_0;               //停止模式,用于定时器暂停  
  CCTL0 &=~CCIE;            //中断位为0,表示中断禁止
  TAR=0X0000;               //16位计数器内容,执行计数单元
  CCR0=0;                   //定时数据    调试用
  TACTL = TASSEL_2 + MC_1;  //选择系统主时钟SMCLK,增计数模式,计数器计数到CCR0,再清零计数
}

//////end////////////

//////timer_B  ini/////
void  init_timerB(void)
{
  TBCTL=MC_0;                //停止模式,用于定时器暂停
  TBCTL=CNTL_0;              //16位,最大计数值为0FFFFH
  TBCCTL0 &=~CCIE;           //中断位为0,表示中断禁止
  TBR=0X0000;                //16位计数器内容,定时器得计数值存放单元
  TBCTL=TBSSEL_2+MC_1;       // 择系统主时钟SMCLK,增计数模式
}
//////end_timer_B//////



/////ADC ini ////////
void  init_ADC(void)
{
  ADC12CTL0 &= ~ENC;                  //模块处于初始状态,不能启动AD转换
  ADC12CTL0=SHT0_8+MSC+ADC12ON;       //890  n=64,采样周期=4*t*n,第一次转换由SHI上升沿触发定时器,打开ADC内核
  ADC12CTL1=SHP+CONSEQ_2+ADC12SSEL_2; // 采样信号源自采样定时器,单通道多次转换模式,ADC12内核时钟是MCLK//?????????
  ADC12MCTL0=SREF_2;                  //通道0参考电压V+选外部,V-选地,选择模拟输入通道0
  ADC12MCTL1=SREF_2+INCH_1;           //通道1参考电压V+选外部,V-选地,选择模拟输入通道1
  ADC12IE=0X0000;                     //禁止ADC中断
}
/////end adc ini ///////////



/////UART1 ini//////
void  init_UART1(void)
{
  ME2 = UTXE1 + URXE1;   // 允许USART1 异步串行工作
  UCTL1 &=~SWRST;        // 允许USART1模块工作
  UCTL1 &=~SYNC;         //  USART1异步模式UART
  UCTL1 |= CHAR;         // 字符长度为为8位
  UTCTL1 |=SSEL1;//0;//1;        // 波特率发生器时钟选择SMCLK,8M
  UBR01 = 0xa0;//41;      //  32k/9600 - 0003  8M/9600 341  8M/19200
  UBR11 = 0x01;//03;      //  3.41             833.333        416.6667
  UMCTL1 = 0xdb;//4a;     //  32k/9600 - 4A    8M/9600  91    4A


  //UTCTL1 |=SSEL0;        // 波特率发生器时钟选择ACLK

  
  
  
  }  

/////end init_UART//////////




/////UART1 ini//////
void  init_UART0(void)
{
  ME1 |=UTXE0 + URXE0;// USPIE0;         // 允许USART0 同步串行工作  
  UCTL0 &=~SWRST;        // 允许USART0模块工作
  UCTL0 |=SYNC;         //  USART0同步模式SPI
  UCTL0 |= CHAR;         // 字符长度为为8位
  UCTL0 |=MM;            //SPI主机模式
// UTCTL0 |=SSEL1;        //
// UTCTL0 |=STC;          //
  UTCTL0=CKPH+CKPL+SSEL1+STC;//波特率发生器时钟选择SMCLK,8M,3线模式,STE在主从机模式中不起作用
                             //下降沿输出,数据在上升沿所存,UCLK延迟半个周期
  UBR00 = 0x3b;//41      // 波特率为14K
  UBR10 = 0x02;//03      //  571.43
  UMCTL0 = 0x4A;//91     //  

  
  
  
   
  }  

/////end init_UART//////////




////delay ms///// 内循环10次延时时间是11微秒,加上外部循环语句12.8微秒
///delay(1)延时12.8微秒
delay1(unsigned char time_ms)
{unsigned char i;
unsigned int j;
  for(j=0;j<time_ms;j++)
  {
   for(i=0;i<8;i++);//10次延时12.8微秒,1次11.2微秒
  }
}

////end/////
void delay (signed int length) 延时5.9微秒
{
        while (length >0)
            length--;
}







///////SPI 写命令给16350 /////address,value
void write16350()//(unsigned char camm_data1[0] ,unsigned char comm_data1[1])
{
  unsigned char i,temp;
// temp=comm_data1[0] | 0x80;
  temp=0xb7;
    SCLK_1;
    delay(1);
    CS_1;
    delay(1);
    CS_0;
    delay(1);
  for(i=0;i<8;i++)
  {
     SCLK_0;
     if((temp & 0x80)==0x80)
      {
        DOUT_1;
      }
     else
      {
        DOUT_0;
      }  
      
     delay(1);
     SCLK_1;
     delay(1);
     temp=temp<<1;
   
  }
  temp=comm_data1[1];
  temp=0x0a;
  for(i=0;i<8;i++)
  {
     SCLK_0;
     if((temp & 0x80)==0x80)
     {
       DOUT_1;
     }
     else
     {
       DOUT_0;
     }
     delay(1);
     SCLK_1;
     delay(1);
     temp=temp<<1;
  
  }
  CS_1;
  delay(4000);
  delay(4000);
  delay(4000);

}

/////// end ///////






/////
void read16350()
{
unsigned char i,j,temp,temp1;
unsigned char receivedata=0;
    for(j=0;j<2;j++)
    {

      temp=0x38;//38;//comm_data1[j];
      SCLK_1;
      delay(1);//(1);
      CS_1;
      delay(1);
      CS_0;
      delay(1);
      for(i=0;i<8;i++)
      {
        SCLK_0;
        //_NOP();
        if((temp & 0x80)==0x80)
        {
         DOUT_1;
        }
        else
        {
         DOUT_0;
        }
       delay(1);
       SCLK_1;
      _NOP();
     // _NOP();
       receivedata=receivedata<<1;
        temp1=P3IN;
       if((temp1 & 0x04)==0x04)
       {
        receivedata |=1;
       }
       delay(1);
       temp=temp<<1;
     }
     comm_data0[j]=receivedata;

   

     for(i=0;i<8;i++)
      {
       SCLK_0;
       delay(1);
       SCLK_1;
       _NOP();
       //_NOP();
       receivedata=receivedata<<1;
       temp1=P3IN;
       if((temp1 & 0x04)==0x04)   ///( DIN_IN )
       {
        receivedata |=1;
       }
            
       delay(1);
     
   
     }
     comm_data0[1]=receivedata;
     
   
     CS_1;
     delay(4000);
     delay(4000);
     
   
  }
}

/////end///////






///---------------------------------main

int main( void )
{
    unsigned char n;  
   
   WDTCTL=WDTPW+WDTHOLD;
  
   BCSCTL1 &=~(XTS+XT2OFF);         // 启动XT2晶振8M,ACLK为XT1低频32768
  
    do
    {
     IFG1 &=~OFIFG;               //清OSCFault标志
        
     for(n=0xFF;n>0;n--);        //延时等待
   
    }
   
    while((IFG1 & OFIFG)!=0);      //查OSCFault,为0时转换完成
   BCSCTL2 |=SELS;                 //SMCLK 为XT2  调试用
   // BCSCTL2 &=~SELS;                 //SMCLK 为DCO
   BCSCTL2 |= SELM1;                // MCLK = XT2 8M
   BCSCTL2 |=DIVM_0;                //分频系数为1
   
   
   init_ioport();
   init_timerA();
   init_timerB();
  // init_ADC();
   init_UART1();
   init_UART0();
   IE2|=URXIE1;
   IE1|=URXIE0;
   _EINT();                     //允许中断
            
  
     _NOP();
// write16350();  
  //0;
  while(1)   
  {
    //channel=0x02;    ////   select channel,  0 is A0,1 is A1 ,2 is  A0 and A1
   
    //ADC12IE=0X002;   /// enable adc  interrupt
    //ADC12CTL0 |=ENC;   ////enable  adc
    //ADC12CTL0 |= ADC12SC;  ///start adc
    WDTCTL=WDTPW+WDTHOLD; ////关闭看门狗定时器
         
      
        /////-------------------------celiang ad0
         while (1)
         {
         
          comm_data1[0]=0x38;
           comm_data1[1]=0x00;
           read16350();
           _NOP();
          // SCLK_1;
          // delay(1);
          // SCLK_0;
          // delay(1);
           //while(1);
         
         }
   
      
  }  
   
  
}









////////============================/////中断

////232接收中断//// USART1

#pragma vector=USART1RX_VECTOR
__interrupt void UART1RX (void)
{unsigned char rcv_len,temp=1;////BCC_sum=0,index,,temp;
    _EINT();
    IE2 &=~URXIE1;
    _NOP();
     
               
    comm_data1[0]=RXBUF1;
   
   
       TACTL=MC_0;                       //停止模式,用于定时器暂停
       CCTL0 |=CCIE;                     //中断位为1,表示中断允许
       CCR0=8000;                        //   定时1毫秒  
       TAR=0;
       TACTL = TASSEL_2 + MC_1;           //选择子系统时钟SMCLK(SMCLK选 MCLK),增计数模式,计数器计数到CCR0,再清零计数
         
      /// comm_data[0]=0xff;  //rcv_len-1原来是变量,为了将来可能改数量 借用0元素,存放计算接收数据的校验和
         
       for(rcv_len=1;rcv_len<3;rcv_len++)
        { _NOP();
           while(1)
           {
             if(IFG2 & URXIFG1)                // 如果接收到数据if((IFG2 & URXIFG1)==1)
              {
               comm_data1[rcv_len]=RXBUF1;                        //接收数据存在临时变量temp
               semiseconde=0;                    //定时计时变量清零
               TAR=0X0000;                       //16位计数器内容,执行计数单元
               temp=1;  
               break;                            //跳出while循环
              }
             else
              {
               if(semiseconde>1000)                 //如果没接收到数据,而且超过1秒
               {
                TACTL=MC_0;                       //停止模式,用于定时器暂停  
                CCTL0 &=~CCIE;                    //中断位为0,表示中断禁止
                TAR=0X0000;                       //16位计数器内容,执行计数单元
                CCR0=0;                           //定时数据清零    调试用
                semiseconde=0;
                P5OUT |=BIT0;                     //点亮通讯故障指示灯
                temp=0;
                break;                           //跳出while循环
               }
        
              }   
           }
         
               
           if(temp==0)
           {  
             IE2|=URXIE1;
             break;                     //跳出for 循环
           }
        }   
        
        if(temp==1)
        {           
               
              //status=0;//1;
              TACTL=MC_0;                       //停止模式,用于定时器暂停  
              CCTL0 &=~CCIE;                    //中断位为0,表示中断禁止
              TAR=0X0000;                       //16位计数器内容,执行计数单元
              CCR0=0;                           //定时数据清零    调试用
              semiseconde=0;
              while ((IFG2 & UTXIFG1) == 0);        // USART0 TX buffer ready?
              TXBUF1 = 0XFF;                     //通讯正确返回FF
              P5OUT &=~BIT0;                     //熄灭通讯故障指示灯
              IE2|=URXIE1;
                      
            
        
        }
                  
      
     
        //========IE2 |=URXIE1;
        ///P5OUT |=BIT0;                     //点亮通讯故障指示灯
        
         
}       



///// end接收中断 /////





////SPI接收中断//// USART0

#pragma vector=USART0RX_VECTOR
__interrupt void UART0RX (void)
{ unsigned char rcv_len,temp=1;////BCC_sum=0,index,,temp;
    _EINT();
    IE1 &=~URXIE0;
    _NOP();
     
               
    comm_data0[0]=RXBUF0;
   
   
       TACTL=MC_0;                       //停止模式,用于定时器暂停
       CCTL0 |=CCIE;                     //中断位为1,表示中断允许
       CCR0=8000;                        //   定时1毫秒  
       TAR=0;
       TACTL = TASSEL_2 + MC_1;           //选择子系统时钟SMCLK(SMCLK选 MCLK),增计数模式,计数器计数到CCR0,再清零计数
         
      
         
       for(rcv_len=1;rcv_len<2;rcv_len++)
        {
           while(1)
           {
             if(IFG1 & URXIFG0)                // 如果接收到数据if((IFG2 & URXIFG1)==1)
              {
               comm_data1[rcv_len]=RXBUF0;                        //接收数据存在临时变量temp
               semiseconde=0;                    //定时计时变量清零
               TAR=0X0000;                       //16位计数器内容,执行计数单元
               TACTL=MC_0;                       //停止模式,用于定时器暂停  
               CCTL0 &=~CCIE;                    //中断位为0,表示中断禁止
               TAR=0X0000;                       //16位计数器内容,执行计数单元
               CCR0=0;                           //定时数据清零    调试用
               semiseconde=0;
               P5OUT &=~BIT0;                     //熄灭通讯故障指示灯
               temp=1;  
               break;                            //跳出while循环
              }
             else
              {
               if(semiseconde>1000)                 //如果没接收到数据,而且超过1秒
               {
                TACTL=MC_0;                       //停止模式,用于定时器暂停  
                CCTL0 &=~CCIE;                    //中断位为0,表示中断禁止
                TAR=0X0000;                       //16位计数器内容,执行计数单元
                CCR0=0;                           //定时数据清零    调试用
                semiseconde=0;
                P5OUT |=BIT1;                     //点亮通讯故障指示灯
                temp=0;
                break;                           //跳出while循环
               }
        
              }   
           }
         
           if(temp==1)
           {
            //status=2;
           
           }
           if(temp==0)
           {  
            // status=0;
             break;                     //跳出for 循环
           }
        }   
        
   
       IE1|=URXIE0;
       //P3OUT |=BIT0;      
      
     
         
}       


///// end接收中断 /////





#pragma vector=TIMERA0_VECTOR    ////Ta 的中断程序
__interrupt void TimerA0 (void)
{
  
  semiseconde=semiseconde+1;  ///Ta的计时变量加1,过1毫秒就加一
  
}

出0入0汤圆

发表于 2009-6-1 10:59:22 | 显示全部楼层
能不能上点直接就读 我没试过
下面是我的初始化
void ADIS16130_Init( void )
{
    SPI0_Write(IOP);
        SPI0_Write(0x38);         //data-ready signal low when unread data on all channels;
                        //synchronization disabled;
        SPI0_Write(RATECS);
        SPI0_Write(0x0A);         //channel enable;

        SPI0_Write(RATECONV);
        SPI0_Write(0x05);         //        00000101

        SPI0_Write(TEMPCS);         //channel enable;
        SPI0_Write(0x0A);

        SPI0_Write(TEMPCONV);
        SPI0_Write(0x05);         //        00000101

        SPI0_Write(MODE);
        SPI0_Write(0x22);        //24-bit resolution;
}
你的代码我没看
但是如果偶尔能读到 那估计是时序问题吧
或者是哪些线路接触不良

出0入0汤圆

 楼主| 发表于 2009-6-1 12:15:19 | 显示全部楼层
我现在也怀疑时序,请问你用过相位为1,极性为1的SPI通讯么?按照定义,是下降沿发送,上升沿接收,可是是先准备数据还是先给沿呢?我也分别试了,还是不行

出0入0汤圆

发表于 2009-6-1 13:35:41 | 显示全部楼层
发送的时候 我的习惯是先给数据 后给沿

出0入0汤圆

发表于 2009-6-1 13:47:58 | 显示全部楼层
/*************************
*模拟spi
*SPI发送控制指令
*************************/
void SPI_Stop( void )
{
    CLK = 1;
    CSB = 1;
    Delay_us(delay_stop);
}

void SPI_Start(void)
{
    CLK = 1;
    CSB = 1;
    Delay_us(delay_start);
}

//主机写一个BYTE到器件
void SPI_WriteByte( uchar wdata )
{
    uchar i;

    for( i = 0 ; i < 8 ; ++i )
        {
        CLK = 1;
        MOSI = wdata & 0x80;
        wdata = wdata << 1;
        Delay_us(delay_time);
        CLK = 0;
        Delay_us(delay_time);
    }
    CLK = 1;
   
}

//主机读入N个比特
//n 限制为16及其以下
//结束状态 CLK = 0
uchar SPI_ReadByte(  )
{
    uint rtemp=0;
    uchar n=8;
    uchar i;
    MOSI=0;
    Delay_us(delay_time);
    for( i = 0 ; i < n ; i++ )
        {
            Delay_us(delay_time);
           rtemp <<= 1    ;
            if( MISO == 1 )
            {
                 rtemp |= 0x0001;
             }else
           {
                 rtemp &= 0xFFFE;
            }
          CLK = 0;
          Delay_us(delay_time);
          CLK = 1;
          Delay_us(delay_time);
      }
    return rtemp;
}

这段代码 是我的 比较旧的模拟spi的程序,新版的是硬件spi的已应用到产品。
延迟可以根据单片机的io速度适当调整,我现在不加延时。

我发现我的那个传感器的spi时序跟你写的不一样,似乎反着的!

出0入0汤圆

 楼主| 发表于 2009-6-1 14:05:10 | 显示全部楼层
谢谢,我再认真看看你的程序,我也是这么写的,只是延时可能不一样,就是不行

出0入0汤圆

 楼主| 发表于 2009-6-1 14:07:07 | 显示全部楼层
能麻烦你看一下16350的时序图,帮我说一下是不是下降沿发送数据,上升沿接收数据?因为第三页的时序图上写着极性=1,相位=1,我就是不太理解相位=1

出0入0汤圆

 楼主| 发表于 2009-6-1 15:22:59 | 显示全部楼层
你的程序是在下降沿发送,上升沿接收么?可是我看adis16130的时序图,数据是在低电平的时候改变的啊

出0入0汤圆

发表于 2009-6-1 16:19:02 | 显示全部楼层
wo的程序是在下降沿发送,上升沿接收

出0入0汤圆

 楼主| 发表于 2009-6-3 11:41:50 | 显示全部楼层
请高手指点一下啊,

出0入0汤圆

 楼主| 发表于 2009-6-3 17:16:41 | 显示全部楼层
是不是硬件有问题?用的msp430单片机,接口芯片用了74ls4245,将3V转到5V

出0入0汤圆

发表于 2009-6-4 10:38:48 | 显示全部楼层
74弄个高速的试试

出0入0汤圆

 楼主| 发表于 2009-6-5 09:50:17 | 显示全部楼层
现在是通讯有3种情况,1正常,2数据左移1位,3是00,总是这3种情况,请问这是怎么回事?

出0入0汤圆

发表于 2009-6-5 10:15:29 | 显示全部楼层
现在只有两种可能
1  时序问题 (可能性不大)
2  接口问题  你可以把16350给单片机的信号线加上分压电阻 测试一下就知道是不是由于接口芯片导致的通讯异常

还有就是我上面说的那个把接口芯片换个高速的

出0入0汤圆

 楼主| 发表于 2009-6-5 10:24:18 | 显示全部楼层
谢谢
怎样把16350给单片机的信号线加分压电阻?那样不是电压不到5v,读取不到了吗?还有如果换个高速的接口芯片,只是提高通讯频率,还有什么作用呢?

出0入0汤圆

 楼主| 发表于 2009-6-5 11:16:44 | 显示全部楼层
我用的接口芯片是74lvs4245a,电平变化沿的时间都是ns级的

出0入0汤圆

发表于 2009-6-5 13:58:29 | 显示全部楼层
行与不行试过就知道了 只是调试方法而已

出0入0汤圆

 楼主| 发表于 2009-6-8 09:04:31 | 显示全部楼层
谢谢。我把SCLK /MOSI直接从单片机接口接线,就好了,可是我的接口芯片是ns极的,怎么会影响呢?

出0入0汤圆

发表于 2009-8-1 17:29:34 | 显示全部楼层
我用ARM和ADIS16355进行通信,刚开始还能正常的读写数据,后来读出的数据全是0,这是怎么回事?请给予指点,谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 19:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表