Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all 3634 articles
Browse latest View live

MSP430FR2433: 固件升级问题

$
0
0
Part Number: MSP430FR2433

现在电机头有个蓝牙芯片,管体里面为msp430主控电机,之间通过串口连接。用以实现电机的蓝牙控制。

 现在想做无线升级,构想是通过蓝牙的无线升级功能,蓝牙芯片读取msp430的升级包,通过串口,实现对msp430FR2433的程序升级。 

以下需要支持,谢谢!

1、msp430FR2433串口升级功能的实现,是否有串口升级的DEMO程序。

2、串口升级对msp430芯片的程序空间大小要求,目前使用的为msp430fr2433,共15k,电机控制程序已使用10K


MSP430F5529: 资源库示例程序无法导入

$
0
0
Part Number: MSP430F5529

 资源库内的示例程序无法导入为新工程,只能拖至某一已有工程下。

MSP430F5529: msp430f5529

$
0
0
Part Number: MSP430F5529

您好,我想将存在430中的数据从10进制转换成二进制放入数组中,我用的下面这个函数在c语言的编辑器中可以使用,但是在ccs里我查看参数不论怎么数组都是0.我还另外定义了一个式子e=n+i;结果也是0,不知道是什么原因

MSP430FR5043: BSL频率问题

$
0
0
Part Number: MSP430FR5043

我现在正在用MSP430FR5043做一个项目,需要用到BSL功能。在TI官方文档中提到了BSL必需运行在8MHz的主频率以下,但是我在板子上调试的结果是如果芯片一直运行再8MHz频率以内,包括8MHz,那么BSL毫无问题。但是如果芯片先运行在16MHz的频率,然后在BSL之前降低到8MHz以内,那么BSL就会失败,表现为在发送default password的时候显示:[ACK_ERROR_MESSAGE]Unknown ACK value!

请问如何解决这个问题?谢谢

MSP430I2021: 程序开始时初始化 看门狗, 在while循环中喂狗, 为什么程序还是重启

$
0
0
Part Number: MSP430I2021

int main()

{

    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer

   //初始化看门狗
   WDTCTL = WDT_ARST_1000; // Set Watchdog Timer timeout 1s
   

   while(1)

   {

      //喂狗
       WDTCTL = WDTPW | WDTCNTCL;

   }

}

MSP430F5529: msp430f5529

$
0
0
Part Number: MSP430F5529

您好,我想利用msp430f5529的flash存储数据,一共有3000个4位的16进制数据,但是我从0x1800地址开始load memory,好像存储空间不够,只能存储大概200个左右数据,但是我看5529flah应该可以存储的,我应该怎么设置才能存进这些数据

MSP430F5529: msp430f5529

$
0
0
Part Number: MSP430F5529

您好,请问一下msp430f'5529flah存储器每个扇区的起始地址是多少呢

EVM430-FR6047: EVM430-FR6047开发板的说明书

$
0
0
Part Number: EVM430-FR6047

你好,能否提供一下EVM430-FR6047评估模块的说明书,我想知道各个按键和LED灯的相关信息。


MSP430F5438A: ADC的多通道采样

MSP-GANG: 转接板坏了,请问转接板能否单独购买?型号是什么

$
0
0
Part Number: MSP-GANG

转接板坏了,请问转接板能否单独购买?型号是什么

MSP430FR2673: IIC 升级异常

$
0
0
Part Number: MSP430FR2673

您好!

我在使用MSP430自带的BSL进行升级时遇到了固件传输问题。430从机进入BSL后的rx_password写入正常,id读取正常,固件大小约6kB。从下载地址0xC000开始传输到0xC0f0时一切传输正常,但在地址0xc0f4时,出现IIC通信超时,且之后一直无法正常通信。使用示波器捕获波形后发现SDA电平一直为低,只有MSP430断电重启后才能恢复。

我尝试过:
(1)将IIC通信频率从200k一直降低到1k,;

(2)将每包固件从200bytes减少到4bytes.

(3)在每次IIC写入后添加10~1000ms的延时。

以上方法均未能解决此问题,且当我以每包4btes固件传输时,通信总是在地址0xcof4这一包出现失败。

请问通过IIC使用BSL对430进行升级还有什么必须注意的地方吗?这个问题可以提供一些解决方法吗?谢谢!

MSP430F5529: msp430f5529

$
0
0
Part Number: MSP430F5529

您好,我在使用timer_A计时器输出一个数组m[10],每次中断输出a[k] (k从0到9),我想当k=10时,关闭中断,重新从内存中读取新的数值赋给数组a,不清楚如何关闭定时器a的中断,并在数组重置赋值后打开

MSP430F5529: msp430f5529

$
0
0
Part Number: MSP430F5529

您好,我在使用5529的定时器timer_a时,设置了TA0CCR0为9,我想设置一个变量n,每次计数器计数到9了,n就加一,请问我该怎么设置呢

MSP430FR2422: MSP430FR2422IPW16R

$
0
0
Part Number: MSP430FR2422

 各位大神好!MSP430FR2422IPW16R这个微控制器能用什么型号替代呢?请求大神们帮帮忙,谢谢!

MSP430F5529: adc12采样率设置


MSP430F5438A: 定时器B,用作捕捉和计数时,计数值有时不正确,误差较大

$
0
0
Part Number: MSP430F5438A

void TIMEB_init( void )

       //P4.7 为时钟输入,P4.0为上下沿捕捉
      TB0CTL = TBSSEL_0 + ID_0 + TBCLR ; //TB0CLK输入,不分频,自动清0和分频参数

      TB0CCTL0 = CM_3 | CAP | CCIE | CNTL_0 | CCIS_0 ;
                        //上下沿捕捉,捕捉模式,有中断, 16位模式,P4.0输入,必须是异步捕捉

       //P4.0 :1K频率的方波输入
      P4DIR &= ( ~BIT0 ); // P4.0 input
      P4SEL |= BIT0 ; // P4.0 配为TB0.0输入

      / /P4.7 : 156K的信号计数输入
     P4DIR &= ( ~BIT7 ); // P4.0 input
     P4SEL |= BIT7 ; // P4.7 配为 TB0CLK 输入

     TB0CTL |= MC_2 ; //增计数模式,到65535

     TB0R = 0 ; //初始化计数值


}

//TIMERB 口中断服务程序,U8_1Q中断程序
#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
       if(   TB0CCTL0 & CCI   ){    //捕捉到高电平 数据
              Counter_156K = TB0CCR0 ; //保存数据
       }else{                                  //捕捉到低电平
              TB0CTL |= TBCLR ; //计数器清0
        }
        TB0CCTL0 &= (~CCIFG) ; //清中断标志
}

程序目的:捕捉的信号是P4.0,上下沿都捕捉,并且产生中断信号,当捕捉到P4.0的上升沿时,把此刻的P4.7输入的方波信号的计数值保存起来

结论: 有时保存的计数值会不正确,大部分是正确的。

请问什么情况下,会不正确。

我把中断程序修改成下面的程序时,计数就正确了,没发现计数错误。

//TIMERB 口中断服务程序,U8_1Q中断程序
#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
       if(   TB0CCTL0 & CCI   ){    //捕捉到高电平 数据
              Counter_156K = TB0R ;   //保存数据,采用了计数寄存器,而不是捕捉寄存器
       }else{                                      //捕捉到低电平
              TB0CTL |= TBCLR ; //计数器清0
        }
        TB0CCTL0 &= (~CCIFG) ; //清中断标志
}

请问:我修改后的中断程序,这样来捕捉计数值,可以吗?会有什么问题,谢谢

MSP430F5438A: 定时器B,捕捉计数的问题

$
0
0
Part Number: MSP430F5438A

程序目的:捕捉的信号是P4.0,上下沿都捕捉,并且产生中断信号,当捕捉到P4.0的上升沿时,把此刻的P4.7输入的方波信号的计数值保存起来

void TIMEB_init( void )

       //P4.7 为时钟输入,P4.0为上下沿捕捉
      TB0CTL = TBSSEL_0 + ID_0 + TBCLR ; //TB0CLK输入,不分频,自动清0和分频参数

      TB0CCTL0 = CM_3 | CAP | CCIE | CNTL_0 | CCIS_0 ;
                        //上下沿捕捉,捕捉模式,有中断, 16位模式,P4.0输入,必须是异步捕捉

       //P4.0 :1K频率的方波输入
      P4DIR &= ( ~BIT0 ); // P4.0 input
      P4SEL |= BIT0 ; // P4.0 配为TB0.0输入

      / /P4.7 : 156K的信号计数输入
     P4DIR &= ( ~BIT7 ); // P4.0 input
     P4SEL |= BIT7 ; // P4.7 配为 TB0CLK 输入

     TB0CTL |= MC_2 ; //增计数模式,到65535

     TB0R = 0 ; //初始化计数值


}

下面是P4.0信号的中断程序,下面是中断程序的两种写法,请问:有什么不同,都可以正确运行吗?

///////////////////////////////////////////// 第一种写法  /////////////////////////////////////////////////////

//TIMERB 口中断服务程序,U8_1Q中断程序
#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
       if(   TB0CCTL0 & CCI   ){    //捕捉到高电平 数据
              Counter_156K = TB0CCR0 ; //保存数据,采用了捕捉寄存器
       }else{                                  //捕捉到低电平
              TB0CTL |= TBCLR ;   //计数器清0
        }
        TB0CCTL0 &= (~CCIFG) ; //清中断标志
}

///////////////////////////////////////////// 第二种写法  /////////////////////////////////////////////////////

//TIMERB 口中断服务程序,U8_1Q中断程序
#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
       if(   TB0CCTL0 & CCI   ){    //捕捉到高电平 数据
              Counter_156K = TB0R ;   //保存数据,采用了计数寄存器,而不是捕捉寄存器
       }else{                                      //捕捉到低电平
              TB0CTL |= TBCLR ; //计数器清0
        }
        TB0CCTL0 &= (~CCIFG) ; //清中断标志
}

///////////////////////////////////////////// 测试结论  /////////////////////////////////////////////////////

我测试时,发现,第一种写法,有时计数不正确,误差会有3个方波左右,计数出错时,往往是输入的时钟信号,发生跳变的时候,这时刚好进入中断。

MSP430F5438A: 关于捕捉程序的写法

$
0
0
Part Number: MSP430F5438A

void TimrA1Init_captrue(void)
{

undefined
     TA0CTL = TASSEL0+TACLR+TAIE+MC1; //时钟信号选择MCLK,计数模式为连续增计模式
     TA0CCTL1 = CM1+SCS+CAP+CCIE; //输入下降沿捕获,CCI1A为捕获信号源
     P1SEL |=BIT2; //设置P1.2端口为功能模块CCI1A输入捕获
}

unsigned int TimeGap=0;
#pragma vector=TIMER0_A1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
      switch(TA0IV) //向量查询
     {
         case 2:
               TimeGap=TA0R;//获取脉冲间隔
               TA0R=0;

                break;
         default:
                break;
     }
}
请问: 

TimeGap=TA0R;//获取脉冲间隔,这个正确吗?还是下面的语句是正确的:

TimeGap = TA1CCR0 ;

MSP430F5438A: 关于捕捉程序的写法

$
0
0
Part Number: MSP430F5438A

 Timer B使用了捕捉功能,设置成上升沿捕捉,下面是中断程序的两种写法:

///////////////////第一种/////////////////////

#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
   if(  TB0CCTL0 & CCI  ){ //捕捉到低电平

      //进行处理
      TB0CCTL0 &= (~CCIFG) ; //清中断标志

  }

}

///////////////////第二种/////////////////////

#pragma vector = TIMER0_B0_VECTOR
__interrupt void timer_b0_isr(void)
{
      //进行处理
      TB0CCTL0 &= (~CCIFG) ; //清中断标志

}

请问: 

如果设置成只有上升沿捕捉,在中断程序里面,就可以不用再判断了,直接进行处理就可以了?也就是说,可以不使用  if(  TB0CCTL0 & CCI  ),这个语句了?谢谢

MSP430F5529: msp430f5529

$
0
0
Part Number: MSP430F5529

您好,请问ccs可以使用c++吗,要怎么配置环境呢

Viewing all 3634 articles
Browse latest View live