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.

[参考译文] MSP430FR5969:HF 外部晶振 PWM 代码

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/599261/msp430fr5969-hf-external-crystal-pwm-code

器件型号:MSP430FR5969

嗨、大家好、

我一直在从事一个高频 PWM 项目。 有2个 PWM 信号交替(一个为高电平、另一个为低电平)。 遗憾的是、由于 DCO 的限制、我们无法使信号接近2.5MHz 以满足我们的需求(使用5.33MHz DCO、我们可以获得2.66MHz PWM)。  

为了纠正这一问题、我们购买了一个5MHz 晶体和一些电容器、并将 Y1与其电容器组装在一起。 现在、当我运行更改后的代码时、信号以2.35MHz 的频率运行、因此我们处于2.5MHz 的另一侧。 我要附加的代码应该与外部晶振一起使用、如果您认为我在尝试重新焊接之前就已经有了代码、我希望获得一些反馈。

谢谢、

Kevin

e2e.ti.com/.../5672.main.c

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

    我尝试输出的引脚是 P1.4和 P3.4、PJ.4引脚并不是很重要。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    解决了问题。 我缺少了一些东西、但发现了一些其他 e2e 帖子、这些帖子具有类似的问题。 解决的代码是:

    #include

    void pwminit (void);
    void GPIOinit (void);
    void clockinit (void);

    int main (void){

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

    GPIOinit(); // GPIO 函数调用
    clockinit(); // clockinit 函数调用
    pwminit(); // pwminit 函数调用



    //GPIO 设置
    void GPIOinit (void){

    /* GPIO 设置-表6-49 (数据表的第86页)到表6-61中可以找到描述
    如何为要输出 PWM 的引脚设置 DIR 和 SEL 位并设置外部 xtal */

    P1DIR |= BIT4; //P1.4输出
    P1SEL0 |= BIT4; //P1.4至 TB0.1

    P3DIR |= BIT4; //P3.4输出
    P3SEL0 |= BIT4; //P3.4至 TB0.3

    PJSEL0 |= BIT6 | BIT7;
    PJSEL1 = 0x00;



    void clockinit (void){

    //时钟系统设置-使用 msp430fr5969.h 查找将 SMCLK 设置为 HFXTAL 的定义

    CSCTL0_H = CSKEY >> 8; //解锁 CS 寄存器
    CSCTL2 = SELA_VLOCLK | SELS__HFXTCLK | SELM_HFXTCLK;//设置 SMCLK = MCLK = HFXTAL
    // ACLK = VLOCLK
    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; //将所有分频器设置为1
    CSCTL4 &=~HFXTOFF;
    CSCTL4 |= HFFREQ_1 | HFXTDRIVE_1;
    操作

    CSCTL5 &=~(LFXTOFFG | HFXTOFFG); //清除 LFXT 和 HFXT 故障标志
    SFRIFG1 &=~OFIFG;
    } while (SFRIFG1&OFIFG); //测试振荡器故障标志

    CSCTL0_H = 0; //锁定 CS 寄存器



    //PWM 设置
    void pwminit (void){

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

    /* PWM 设置-使用公式计算频率和 Ton。 将1 PWM 设置为 Toggle / Set、然后
    另一个开关/复位使 PWM 180度异相*/

    TB0CCR0 = 1; // PWM 频率= 5MHz/(TB0CCR0+1)= 2.5MHz
    TB0CCTL1 = OUTMOD_6; // CCR1切换/设置
    TB0CCR1 = 1; // CCR1 PWM 占空比 Ton =(TB0CCR1 + 1)/5MHz
    TB0CTL = TBSSEL_SMCLK | MC__UP | TBCLR;// SMCLK、向上计数模式、清除 TBR
    TB0CCR3 = 1; // CCR3 PWM 占空比 Ton =(TB0CCR3 + 1)/5MHz
    TB0CCTL3 = OUTMOD_2; // CCR3切换/复位

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

    很高兴您能够解决问题、并感谢您发布解决方案。