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.

[参考译文] CCS/MSP430FR2311:使用 MSP430FR2311的 TDIM FRAM 水表

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/707406/ccs-msp430fr2311-tdim-fram-water-meter-using-msp430fr2311

器件型号:MSP430FR2311
主题中讨论的其他器件:MSP430FR4133TIDM-FRAM-WATERMETER

工具/软件:Code Composer Studio

大家好、

         我正在尝试使用 MSP430FR2311构建水表,并参考使用 MSP430FR4133的 TDIM FRAM 水表。 已提及以下链接...  问题在于 MSP430fr4133具有不同的寄存器集、MSP430FR2311具有不同的寄存器集。 我无法转换适用于 MSP430FR2311的编码。 并且还尝试了另一个示例来计算脉冲,但当我将其与 UART 中断集成时,我在 UART 中没有获得任何中断。 我想计算脉冲,在 UART 中断时,脉冲必须通过 UART 传输到另一个器件。

使用 MSP430FR4133测量水表的参考项目链接:    

用于计算脉冲的源代码..  

#include

//初始化变量
volatile unsigned int counter=0;
volatile unsigned int prev_counter=0;
unsigned int difference = 0;
//double flow_rate = 0.0;

__attribute__(ramfunc);
int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

// P2.1/TB1.2
P2DIR &=~BIT1;//将 P2.1设置为输入方向
P2SEL1 &=~BIT1;
P2SEL0 |= BIT1;

// TB1CCR2;CCI2A 输入;
TB1CCTL2 = CAP + CM_1 + CCIE + SCS + CCIS_0;//捕捉模式+在上升沿+启用中断+同步捕捉源+捕捉输入选择 CCI2A

// SMCLK、控制模式;启动计时器
TB1CTL |= TBSSEL_2 + MC_2 + TBCLR;

while (1){
_bis_SR_register (LPM0_bits + GIE);//进入具有中断使能的低功耗模式0
__no_operation();
__DELAY_CYCLES (1000000);//延迟1秒以在1秒内获得上升脉冲边沿的数量

差值=计数器- prev_counter;//上升脉冲边沿的数量
//flow_rate =((double) difference *60)/4.7;//将上升脉冲边沿相乘以60以获得每分钟的脉冲数 除以数据表中的常数、以获得 L/min

if (TB1CCTL2 & COV)//检查捕捉溢出

TB1CCTL2 &=~COV;//在检测到 COV 位时将其清零


//Timer_B1 TBCCR2中断向量处理程序例程
#pragma vector = Timer1_B1_vector
_interrupt void Timer1_B1_ISR (void)

switch (__event_in_range (TB1IV、TB1IV_TBIFG))

案例 TBIV_none:中断;//Vector 0:无中断
案例 TBIV_TBCCR1:break;//Vector 2:TBCCR1 CCIFG。 中断源:捕捉/比较 R1。 中断标志:TBxCCR1 CCIFG。
案例 TBIV_TBCCR2://Vector 4:TBCCR2 CCIFG
Previ_counter =计数器;
计数器= TB1CCR2;//"计数器"值被复制到 TB1CCR2寄存器
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS + GIE);//退出 LPM0
中断;
案例 TBIV_TBCCR3:break;
案例 TBIV_TBCCR4:中断;
案例 TBIV_TBCCR5:中断;
案例 TBIV_TBCCR6:中断;
案例 TBIV_TBIFG:break;//Vector 6:TBIFG
默认值:break;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的评论! 您能否评论一下您发现的 FR4133和 FR2311之间的寄存器设置有何不同?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >差值=计数器- PREFV_COUNTER;//上升脉冲边沿的数量
    >//flow_rate =((double) difference *60)/4.7;//将上升脉冲边沿乘以60以获得每分钟的脉冲数 除以数据表中的常数即可得到
    升/分

    在"差值"中计算的不是脉冲计数、而是单个脉冲的长度(以节拍为单位=秒)、即 usec/脉冲。 要获得脉冲/分钟、您需要计算类似的值(Pulses_per_minute = 60 sec/min * 1000000个周期/秒/"差"个周期/脉冲)。

    可以使用其他计时器设置进行脉冲计数、但对于实验室水流量计、我建议您使用采集方法。

    展望未来:在实验中您可能会看到(相当低)的流速下、您的计时器将循环多次、然后中断、给出错误的读数。 您可能需要将速度除以至少8 (ID=3)、使节拍为8usec (上面公式中为125000个节拍/秒)。 您最终可能会使用 TB1EX0对其进行更多的分频。