打印

MSP430F5529 关于UCS的疑问,见鬼了。实在找不到问题出在哪里了。

[复制链接]
956|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

我使用的是MSP430F5529的红色开发板。外部晶振是4MHz。主要是调试串口为115200的波特率。  选择的是SMCLK。
在时钟配置时,SMCLK选择的是XT2.没有分频。 XT1是32768的外部晶振。
如果不把下面代码中关于XT1起振的代码注释掉。这样配置已经用串口测试没有问题。
但是我将XT1起振的代码注释掉。串口就出现问题了,但是串口和XT1又没有关系。而且我也没有用到DCO。
XT2外部晶振应该是独立的才对。一直不知道问题在哪?所以请教一下论坛里的朋友。
void Clock_init(void)
{

               //  P5SEL |=BIT4+BIT5;       //XT1晶振引脚
                     P5SEL |=BIT2+BIT3;       //XT2晶振引脚
                     SetVCore(0);   //共有1.4V(0-12MHZ),1.6V(0-16MHZ),1.8V(0-20MHZ)和1.9V(0-25MHZ)四个级别.
                  // LFXT_Start(XT1DRIVE_0);     //XT1低频模式
                     XT2_Start(XT2DRIVE_0);      //外部晶振选择4M
                     SELECT_MCLK_SMCLK(SELM__XT2CLK + SELS__XT2CLK);//先选择XT2,无效后转DCO
        

}
void AppUart_init_1(void)
{

    P4SEL |= BIT5 + BIT4;                    // P4.4,5 = USCI_A1 TXD/RXD
    UCA1CTL1 |= UCSWRST;                    // **Put state machine in reset**
    UCA1CTL0 = 0x00;  //默认即全为0
    UCA1CTL1 = UCSSEL__SMCLK + UCSWRST;                   // Use SMCLK, keep RESET
    UCA1BR0 = 34;                         // 4MHz/115200=34
    UCA1BR1 = 0x00;                         //
    UCA1MCTL = UCBRS_6 + UCBRF_0;
    UCA1CTL1 &= ~UCSWRST;                   // **Initialize USCI state machine**
    UCA1IE |= UCRXIE;                // 使能接收中断
}

相关帖子

沙发
dirtwillfly| | 2016-7-28 14:56 | 只看该作者
使能XT2 了没有?

使用特权

评论回复
板凳
dirtwillfly| | 2016-7-28 14:56 | 只看该作者
                     SetVCore(0);   //共有1.4V(0-12MHZ),1.6V(0-16MHZ),1.8V(0-20MHZ)和1.9V(0-25MHZ)四个级别.
                  // LFXT_Start(XT1DRIVE_0);     //XT1低频模式
                     XT2_Start(XT2DRIVE_0);      //外部晶振选择4M
                     SELECT_MCLK_SMCLK(SELM__XT2CLK + SELS__XT2CLK);//先选择XT2,无效后转DCO
这几句用的什么库?还是自己编写的函数?貌似不是官方的库

使用特权

评论回复
地板
leonmiao|  楼主 | 2016-7-28 15:29 | 只看该作者
dirtwillfly 发表于 2016-7-28 14:56
SetVCore(0);   //共有1.4V(0-12MHZ),1.6V(0-16MHZ),1.8V(0-20MHZ)和1.9V(0-25MHZ)四 ...

XT2,是使能过的。我把函数贴出来。  
void LFXT_Start(uint16_t xtdrive) {
        // If the drive setting is not already set to maximum
        // Set it to max for LFXT startup
        if ((UCSCTL6 & XT1DRIVE_3) != XT1DRIVE_3) {
                UCSCTL6_L |= XT1DRIVE1_L + XT1DRIVE0_L; // Highest drive setting for XT1startup
        }

        while (SFRIFG1 & OFIFG) {   // Check OFIFG fault flag
                UCSCTL7 &= ~(DCOFFG + XT1LFOFFG + XT1HFOFFG + XT2OFFG); // Clear OSC flaut Flags fault flags
                SFRIFG1 &= ~OFIFG;        // Clear OFIFG fault flag
        }

        UCSCTL6 = (UCSCTL6 & ~(XT1DRIVE_3)) | (xtdrive); // set requested Drive mode
}

使用特权

评论回复
5
leonmiao|  楼主 | 2016-7-28 15:30 | 只看该作者
dirtwillfly 发表于 2016-7-28 14:56
SetVCore(0);   //共有1.4V(0-12MHZ),1.6V(0-16MHZ),1.8V(0-20MHZ)和1.9V(0-25MHZ)四 ...

我贴出来了LFXT_Start这个函数。有这个函数就没有问题,如果注释掉,LT2都不能用。不知道为什么

使用特权

评论回复
6
dirtwillfly| | 2016-7-28 16:30 | 只看该作者
BCSCTL1 &= ~XT2OFF

xt2的运行需要这一句使能

使用特权

评论回复
7
米尔豪斯| | 2016-7-28 21:24 | 只看该作者
XT2需要打开才能用

使用特权

评论回复
8
liutongda| | 2016-7-28 21:33 | 只看该作者
表示430纯寄存器操作,根本看不懂的。

使用特权

评论回复
9
Ryze| | 2016-7-28 22:09 | 只看该作者
熟悉430的内部资源就能看懂了,挺好用的

使用特权

评论回复
10
dirtwillfly| | 2016-7-29 10:10 | 只看该作者
除了注释掉的这个函数里,你还在哪里使能了?至少你提供的代码里都没有。

使用特权

评论回复
11
leonmiao|  楼主 | 2016-7-29 10:56 | 只看该作者
dirtwillfly 发表于 2016-7-29 10:10
除了注释掉的这个函数里,你还在哪里使能了?至少你提供的代码里都没有。
...

void XT2_Start(uint16_t xtdrive) {
        // Check if drive value is the expected one
        if ((UCSCTL6 & XT2DRIVE_3) != xtdrive) {   
                UCSCTL6 &= ~XT2DRIVE_3;                 
                UCSCTL6 |= xtdrive;                  
        }

        UCSCTL6 &= ~XT2OFF;

        while (SFRIFG1 & OFIFG) {                 // Check OFIFG fault flag
                UCSCTL7 &= ~(DCOFFG + XT1LFOFFG + XT1HFOFFG + XT2OFFG); // Clear OSC flaut Flags
                SFRIFG1 &= ~OFIFG;                      // Clear OFIFG fault flag

使用特权

评论回复
12
dirtwillfly| | 2016-7-29 11:25 | 只看该作者
leonmiao 发表于 2016-7-29 10:56
void XT2_Start(uint16_t xtdrive) {
        // Check if drive value is the expected one
        if ((UCSCTL6 & XT ...

建议你先运行一下官网提供的例程。
你的程序里好多自己定义的东西,看不明白。比如这个xtdrive,又不知道是什么东东

使用特权

评论回复
13
pmp| | 2016-7-29 23:17 | 只看该作者
这个还是跑一跑开发板的例程。

使用特权

评论回复
14
pmp| | 2016-7-29 23:19 | 只看该作者
f552x没有用过usb设计过。

使用特权

评论回复
15
Garen2| | 2016-7-30 20:02 | 只看该作者
可能是哪里出现了小错误,不好找,楼主得耐心找

使用特权

评论回复
16
饭饭哈| | 2019-6-29 17:00 | 只看该作者
dirtwillfly 发表于 2016-7-28 14:56
SetVCore(0);   //共有1.4V(0-12MHZ),1.6V(0-16MHZ),1.8V(0-20MHZ)和1.9V(0-25MHZ)四 ...

请问官方的库区哪里找

使用特权

评论回复
17
饭饭哈| | 2019-6-29 17:01 | 只看该作者
leonmiao 发表于 2016-7-28 15:30
我贴出来了LFXT_Start这个函数。有这个函数就没有问题,如果注释掉,LT2都不能用。不知道为什么 ...

这个例程官网上有吗

使用特权

评论回复
18
dirtwillfly| | 2019-6-29 21:47 | 只看该作者
饭饭哈 发表于 2019-6-29 17:00
请问官方的库区哪里找

官方库和例程都在msp430ware里

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝