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/MSP430FR4133:P1.0或 P4.0的 PWM

Guru**** 2589265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/627480/ccs-msp430fr4133-pwm-for-p1-0-or-p4-0

器件型号:MSP430FR4133

工具/软件:Code Composer Studio

int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P1DIR |= 0x00;//将引脚1.0设置为输出方向。
P1SEL0 |= 0x00;//选择引脚1.0作为 PWM 输出。
TA0CCR0 = 1000-1;//在定时器 A0捕捉/比较0寄存器中将周期设置为1000us。
TA0CCTL1 = OUTMOD_7;
TA0CCR1 = 800;//电源开启的周期(以微秒为单位)。 它是时间的一半、这相当于50%的占空比。
TA0CTL = tassel_2 + MC_1;//tassel_2选择 SMCLK 作为时钟源、并且 MC_1告诉它向上计数到 TA0CCR0中的值。
_bis_SR_register (LPM0_bits);//切换到低功耗模式0
。} 

LED 1.0在 PWM 模式下不工作。 此外、如果我将代码更改为:

int main (void){
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
P1DIR |= 0x04;//将引脚1.2设置为输出方向。
P1SEL0 |= 0x04;//选择引脚1.2作为 PWM 输出。
TA0CCR0 = 1000-1;//在定时器 A0捕捉/比较0寄存器中将周期设置为1000us。
TA0CCTL1 = OUTMOD_7;
TA0CCR1 = 800;//电源开启的周期(以微秒为单位)。 它是时间的一半、这相当于50%的占空比。
TA0CTL = tassel_2 + MC_1;//tassel_2选择 SMCLK 作为时钟源、并且 MC_1告诉它向上计数到 TA0CCR0中的值。
_bis_SR_register (LPM0_bits);//切换到低功耗模式0
。} 

...连接的 LED 没有功能。

MSPFR4133是否支持此输出的 PWM 模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在阅读数据表时看到、P1.0未连接到任何计时器、因此不能用于(硬件) PWM 输出。

    P4.0是 TA1.1、即它使用 TA1CCR1/TA1CCTL1进行控制、并通过设置 P4DIR 和 P4SEL0的 BIT0连接到 TimerA1 (根据 SLAS865B 表6-17):

    TA1CCR0 = 1000-1;
    TA1CCTL1 = OUTMOD7;// TA1.1
    TA1CCR1 = 800;
    TA1CTL = tassel_2 | MC_1;
    P4DIR |= BIT0;// P4.0
    P4SEL0 |= BIT0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢您的回复、但它不起作用。 也许我应该根据 TA0-1的表6-14来尝试 P1.5 tp P1.7…
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦、我忘记了

    PM5CTL0 &=~LOCKLPM5;

    示例代码提醒了我这一点;产品页面上有一个指向它的链接。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bruce、
    这是我的完整代码、但即使有最后的提示、它也不起作用。 发生的唯一情况是 P4.0被激活并保持此状态。

    #include
    #include
    #include "main.h"
    #include "hal_lcd.h"
    #include
    #include

    void main (void)

    while (1)

    WDTCTL = WDTPW + WDTHOLD;//停止 WDT
    PM5CTL0 &=~LOCKLPM5;

    TA1CCR0 = 512-1;
    TA1CCR1 = 200;
    TA1CTL = tassel_2 | MC_1;
    TA1CCTL1 = OUTMOD_7;

    P4DIR |= BIT0;// P4.0
    P4SEL0 |= BIT0;
    _bis_SR_register (LPM0_bits);//切换到低功耗模式0。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定你会期待什么。

    我预计 P4.0 LED 将以大约40%(200/512)的亮度点亮并无限期地停留在那里。 听起来就像在发生这种情况一样。

    如果您希望 LED 亮度变化、则需要更改 TA1CCR1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的代码、它会增加亮度。 我对带 LED 的 PWM 有误的理解。

    #include 
    #include 
    #include "main.h"
    #include "hal_lcd.h"
    #include 
    #include 
    
    void main (void)
    {
    while (1)
    {
    WDTCTL = WDTPW + WDTHOLD;//停止 WDT
    PM5CTL0 &=~LOCKLPM5;
    
    TA1CCR0 = 1000-1;
    TA1CCR1 = 0;
    TA1CTL = tassel_2 | MC_1;
    TA1CCTL1 = OUT900 = OPT0+
    
    TR0
    
    
    
    
    
    ;TA1CCTR1 = 0
    
    + TR1 + TR0;TA1TR1 + TR0 + TR0 + TR1 (TA4TR1)| TA1CCTR1 + TR1 + TR0 + TR0 + TR0 + TR0 + TR0 + TRI + TRI + TR0 + TRI + TRI + TR0 + TRI + TRI + TRUTRI + TRI + TRI + TR //切换到低功耗模式0
    。}
    }