16202|38

2144

帖子

3

TA的资源

五彩晶圆(中级)

楼主
 

事无巨细——MSP430 学习(想来个标题党,可惜语文学的不好,估计好资料要石沉大海了) [复制链接]

时钟初始化和GPIO
作者:lyzhangxiang
学习单位:安徽师范大学
完成时间:2011-11-25
联系方式:hardware1989@163.com

概述:
本实验的目的是了解用于执行对MSP430 Value Line设备的初始化过程的步骤。在这个练习中,您将编写初始化代码,并运行该设备使用各种时钟资源。
1、写初始化代码
2、运行CPU的MCLK的来源方式:VLO 、32768晶体、DCO
3、主体程序部分
4、观察LED闪光灯速度

MSP430时钟:
1、在MSP430单片机中一共有三个时钟源:
一个LFXT1CLK,为低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz);
一个为XT2CLK,外接标准高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz);     
还有一个叫DCOCLK,为内部晶振,有RC震荡回路构成。
2、在MSP430单片机内部一共有三个时钟系统 :
一个为ACLK,通常由LFXT1CLK作为时钟源,可以通过软件控制改时钟的分频系数树;    
一个为MCLK(Main CLK)一听就知道是主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择;
还有一个为SMCLK,称作辅助主时钟,也是可以由软件选择时钟源。
Basic Clock Module Registers(基础时钟寄存器)
DCO control register                         DCOCTL
Basic clock system control 1                   BCSCTL1
Basic clock system control 2                   BCSCTL2
Basic clock system control 3                   BCSCTL3
SFR interrupt enable register 1                 IE1
SFR interrupt flag register 1                   IFG1
3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3
 
DCOCTL,DCO控制寄存器,地址为56H,初始值为60H
DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0
DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。
MOD0~MOD4: Modulation Bit,频率的微调。
一般不需要DCO的场合保持默认初始值就行了。
BCSCTL1,Basic Clock System Control 1,地址为57H,初始值为84H
XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0
RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。
XT5V: 1.
DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;
XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。
XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。
正常情况下把XT2OFF复位就可以了.
BCSCTL2,Basic Clock System Control 2,地址为58H,初始值为00H
SEM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR
DCOR: Enable External Resistor. 0,选择内部电阻;1,选择外部电阻
DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8
SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.
DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.
SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK
我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。
其它:
1. LFXT1: 一次有效的PUC信号将使OSCOFF复位,允许LFXT1工作,如果LFXT1信号没有用作SMCLK或MCLK,可软件置OSCOFF关闭LFXT1.
2. XT2: XT2产生XT2CLK时钟信号,如果XT2CLK信号没有用作时钟MCLK和SMCLK,可以通过置XT2OFF关闭XT2,PUC信号后置XT2OFF,即XT2的关闭的。
3. DCO振荡器:振荡器失效时,DCO振荡器会自动被选做MCLK的时钟源。如果DCO信号没有用作SMCLK和MCLK时钟信号时,可置SCG0位关闭DCO直流发生器。
4. 在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下:
(1)清OSCOFF/XT2
(2)清OFIFG
(3)延时等待至少50uS
(4)再次检查OFIFG,如果仍置位,则重复(1)-(4)步,直到OFIFG=0为止。
(5)设置BCSCTL2的相应SELM。

实例分析
1、CPU运行在VLO时钟下:
这是最慢的时钟,在约12千赫兹下运行。因此,我们将通过可视化的LED闪烁的红色慢慢地在约每3秒钟率。我们可以让时钟系统默认这种状态,设置专门来操作VLO。我们将不使用任何ALCK外设时钟在此实验室工作,但你应该认识到,ACLK来自VLO时钟。
#include <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;           // 关闭看门狗定时器
P1DIR = 0x40;                          // P1.6 配置输出
P1OUT = 0;                            // 关闭LED
BCSCTL3 |= LFXT1S_2;                   // LFXT1 = VLO
IFG1 &= ~OFIFG;                       // 清除OSCFault 标志
__bis_SR_register(SCG1 + SCG0);          // 关闭 DCO
BCSCTL2 |= SELM_3 + DIVM_3;           // MCLK = VLO/8
while(1)
{
P1OUT = 0x40;                       // 开启LED
_delay_cycles(100);
P1OUT = 0;                          // 关闭 LED
_delay_cycles(5000);
}
}
2、CPU运行在晶振(32768Hz)时钟下:
晶体频率为32768赫兹,约3倍的VLO。如果我们在前面的代码中使用晶振,指示灯应闪烁大约每秒一次。你知道为什么32768赫兹是一个标准?这是因为这个数字是2的15次方,因此很容易用简单的数字计数电路,以每秒一次获得率 ——手表和其他时间时基。认识到ACLK来自外部晶振时钟。
#include <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;        // 关闭看门狗定时器
P1DIR = 0x41;                       // P1.0 和P1.6配置输出
P1OUT = 0x01;                      // 开启P1.0
BCSCTL3 |= LFXT1S_0;                // LFXT1 = 32768Hz 晶振
while(IFG1 & OFIFG)
{
IFG1 &= ~OFIFG;                   // 清除 OSCFault 标志
_delay_cycles(100000);             // 为可见的标志延时
}
P1OUT = 0;                      // 关闭P1
__bis_SR_register(SCG1 + SCG0);     // 关闭 DCO
BCSCTL2 |= SELM_3 + DIVM_3;      // MCLK = 32768/8
while(1)
{
P1OUT = 0x40;                   // 开启 LED
_delay_cycles(100);
P1OUT = 0;                     / / 关闭LED
_delay_cycles(5000);
}
}
3、CPU运行在晶振(32768Hz)和DCO时钟下:
最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望ACLK上运行的VLO或32768赫兹晶振。由于ACLK在我们目前的代码是在晶体上运行,我们会打开DCO计算。
#include <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;            // 关闭看门狗定时器
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1);                               // If cal const erased, 挂起
}
BCSCTL1 = CALBC1_1MHZ;                // Set range
DCOCTL = CALDCO_1MHZ;                //设置DCO模式
P1DIR = 0x41;                          // P1.0 和P1.6配置输出
P1OUT = 0x01;                         // P1.0 开启
BCSCTL3 |= LFXT1S_0;                   // LFXT1 = 32768Hz
while(IFG1 & OFIFG)
{
IFG1 &= ~OFIFG;                       // 清除OSCFault 标志
_delay_cycles(100000);                 // 为可见标志延时
}
P1OUT = 0;                           // P1.6 关闭
// __bis_SR_register(SCG1 + SCG0);       // 关闭DCO
BCSCTL2 |= SELM_0 + DIVM_3;          // MCLK = DCO
while(1)
{
P1OUT = 0x40;                       // P1.6 开启
_delay_cycles(100);
P1OUT = 0;                         / / P1.6 关闭
_delay_cycles(5000);
}
}
4、CPU运行在DCO时钟下:
最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望在VLO或者是晶振下运行ACLK。由于ACLK在我们目前的代码是在VLO上运行,我们会打开DCO运行。
#include <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;                // 关闭看门狗定时器
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1);                                   // If cal const erased,挂起
}
BCSCTL1 = CALBC1_1MHZ;                     // Set range
DCOCTL = CALDCO_1MHZ;                     // 设置DCO模式
P1DIR = 0x40;                               // P1.6 配置输出
P1OUT = 0;                                 // P1关闭
BCSCTL3 |= LFXT1S_2;                        // LFXT1 = VLO
IFG1 &= ~OFIFG;                             // 清除 OSCFault 标志
//__bis_SR_register(SCG1 + SCG0);              // 关闭DCO
BCSCTL2 |= SELM_0 + DIVM_3;                 // MCLK = DCO/8
while(1)
{
P1OUT = 0x40;                          // P1.6 关闭
_delay_cycles(100);
P1OUT = 0;                            // P1.6 开启
_delay_cycles(5000);
}
}

 

事无巨细——MSP430学习之时钟.pdf

275.36 KB, 下载次数: 1080

最新回复

我能说下这是官方资料的翻译么。。。但还是顶一个,楼主不错  详情 回复 发表于 2016-10-7 00:13

点评

学习学习,谢谢!!  详情 回复 发表于 2013-3-30 12:54
 
点赞 关注(1)

回复
举报

1万

帖子

16

TA的资源

版主

沙发
 

学习了

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

板凳
 

回复 沙发 ddllxxrr 的帖子

还没完呢 发了一半就进入审核了 哎 等了一天才出来,看来是标题惹的祸,大家说什么标题好,当然内容我觉得还是很不错的,个人原创加整理!
 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

4
 

未完待续

以下将会分析上面4个例子的代码细微差别:
首先让我们看一下msp430x20x2.h这个文件中的内容,由于头文件信息量很大这里就只简单说明和以上四个代码有关的部分,其余请大家自行阅读。

一、WDTCTL = WDTPW + WDTHOLD;                // 关闭看门狗定时器(例1、2、3、4)
头文件中的相关说明如下:
/************************************************************
* WATCHDOG TIMER
************************************************************/
#define __MSP430_HAS_WDT__      /* Definition to show that Module is available */
SFR_16BIT(WDTCTL);                /* Watchdog Timer Control */
/* The bit names have been prefixed with "WDT" */
#define WDTIS0                 (0x0001)
#define WDTIS1                 (0x0002)
#define WDTSSEL                (0x0004)
#define WDTCNTCL              (0x0008)
#define WDTTMSEL               (0x0010)
#define WDTNMI                 (0x0020)
#define WDTNMIES               (0x0040)
#define WDTHOLD                (0x0080)
#define WDTPW                  (0x5A00)
这个指令设置密码(WDTPW)和停止位定时器(WDTHOLD),所有的WatchDog配置都需要在WDTPW的辅助下完成。
举例如下:
A、间隔时间由Bit0-2位编码:
1、看门狗的时钟由FSMCLK(假设为1MHz)
#define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTCNTCL)                         /* 32ms interval (default) */
#define WDT_MDLY_8          (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0)                  /* 8ms     " */
#define WDT_MDLY_0_5        (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1)                  /* 0.5ms   " */
#define WDT_MDLY_0_064      (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0)           /* 0.064ms " */

2、看门狗的时钟由FACLK(假设为32KHz)
#define WDT_ADLY_1000       (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL)                 /* 1000ms  " */
#define WDT_ADLY_250        (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0)          /* 250ms   " */
#define WDT_ADLY_16         (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1)          /* 16ms    " */

B、看门狗模式——在过期时间后重启:
1、看门狗的时钟由FSMCLK(假设为1MHz)
#define WDT_MRST_32         (WDTPW+WDTCNTCL)                                  /* 32ms interval (default) */
#define WDT_MRST_8          (WDTPW+WDTCNTCL+WDTIS0)                           /* 8ms     " */
#define WDT_MRST_0_5        (WDTPW+WDTCNTCL+WDTIS1)                           /* 0.5ms   " */
#define WDT_MRST_0_064      (WDTPW+WDTCNTCL+WDTIS1+WDTIS0)                    /* 0.064ms " */

2、看门狗的时钟由FACLK(假设为32KHz)
#define WDT_ARST_1000       (WDTPW+WDTCNTCL+WDTSSEL)                          /* 1000ms  " */
#define WDT_ARST_250        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0)                   /* 250ms   " */
#define WDT_ARST_16         (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1)                   /* 16ms    " */
#define WDT_ARST_1_9        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)            /* 1.9ms   " */

二、P1DIR = 0x40;                               // P1.6 配置输出
    P1OUT = 0;                                 // P1关闭      (例1、2、3、4)
其中DIR 和P1OUT分别配置IO口的方向和输出值,这里不在赘述,请参考手册。

三、BCSCTL3 |= LFXT1S_2;                   // LFXT1 = VLO       (例1和例4)
    BCSCTL3 |= LFXT1S_0;                   // LFXT1 = 32768Hz    (例2和例3)
/************************************************************
* Basic Clock Module
************************************************************/
#define __MSP430_HAS_BC2__                   
/* Definition to show that Module is available */

SFR_8BIT(DCOCTL);                         /* DCO Clock Frequency Control */
SFR_8BIT(BCSCTL1);                        /* Basic Clock System Control 1 */
SFR_8BIT(BCSCTL2);                        /* Basic Clock System Control 2 */
SFR_8BIT(BCSCTL3);                        /* Basic Clock System Control 3 */

#define MOD0                   (0x01)         /* Modulation Bit 0 */
#define MOD1                   (0x02)         /* Modulation Bit 1 */
#define MOD2                   (0x04)         /* Modulation Bit 2 */
#define MOD3                   (0x08)         /* Modulation Bit 3 */
#define MOD4                   (0x10)         /* Modulation Bit 4 */
#define DCO0                   (0x20)         /* DCO Select Bit 0 */
#define DCO1                   (0x40)         /* DCO Select Bit 1 */
#define DCO2                   (0x80)         /* DCO Select Bit 2 */
                                                                                 
#define LFXT1OF                (0x01)        
/* Low/high Frequency Oscillator Fault Flag */
#define XT2OF                  (0x02)        
/* High frequency oscillator 2 fault flag */
#define XCAP0                  (0x04)       /* XIN/XOUT Cap 0 */
#define XCAP1                  (0x08)       /* XIN/XOUT Cap 1 */
#define LFXT1S0                (0x10)       /* Mode 0 for LFXT1 (XTS = 0) */
#define LFXT1S1                (0x20)       /* Mode 1 for LFXT1 (XTS = 0) */
#define XT2S0                  (0x40)       /* Mode 0 for XT2 */
#define XT2S1                  (0x80)       /* Mode 1 for XT2 */

#define XCAP_0                 (0x00)         /* XIN/XOUT Cap : 0 pF */
#define XCAP_1                 (0x04)         /* XIN/XOUT Cap : 6 pF */
#define XCAP_2                 (0x08)         /* XIN/XOUT Cap : 10 pF */
#define XCAP_3                 (0x0C)         /* XIN/XOUT Cap : 12.5 pF */

#define LFXT1S_0               (0x00)        
/* Mode 0 for LFXT1 : Normal operation */
#define LFXT1S_1               (0x10)     /* Mode 1 for LFXT1 : Reserved */
#define LFXT1S_2               (0x20)     /* Mode 2 for LFXT1 : VLO */
#define LFXT1S_3               (0x30)    
/* Mode 3 for LFXT1 : Digital input signal */

#define XT2S_0                 (0x00)    /* Mode 0 for XT2 : 0.4 - 1 MHz */
#define XT2S_1                 (0x40)    /* Mode 1 for XT2 : 1 - 4 MHz */
#define XT2S_2                 (0x80)    /* Mode 2 for XT2 : 2 - 16 MHz */
#define XT2S_3                 (0xC0)       
 /* Mode 3 for XT2 : Digital input signal */

 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

5
 

未完待续

四、__bis_SR_register(SCG1 + SCG0);          // 关闭 DCO

__bis_SR_register()是在intrinsics.h这个头文件中定义了,实现的功能是将SR中的位置零。
关于头文件中的代码作用
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef __cplusplus
}
#endif /* extern "C" */
一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。

五、BCSCTL2 |= SELM_3 + DIVM_3;           // MCLK = VLO/8
    BCSCTL2 |= SELM_3 + DIVM_3;           // MCLK = 32768/8
    BCSCTL2 |= SELM_0 + DIVM_3;          // MCLK = DCO
    BCSCTL2 |= SELM_0 + DIVM_3;          // MCLK = DCO/8
MSP430中有如下定义:
#define RSEL0                  (0x01)         /* Range Select Bit 0 */
#define RSEL1                  (0x02)         /* Range Select Bit 1 */
#define RSEL2                  (0x04)         /* Range Select Bit 2 */
#define RSEL3                  (0x08)         /* Range Select Bit 3 */
#define DIVA0                  (0x10)         /* ACLK Divider 0 */
#define DIVA1                  (0x20)         /* ACLK Divider 1 */
#define XTS                    (0x40)       
 /* LFXTCLK 0:Low Freq. / 1: High Freq. */
#define XT2OFF                 (0x80)         /* Enable XT2CLK */

#define DIVA_0                 (0x00)         /* ACLK Divider 0: /1 */
#define DIVA_1                 (0x10)         /* ACLK Divider 1: /2 */
#define DIVA_2                 (0x20)         /* ACLK Divider 2: /4 */
#define DIVA_3                 (0x30)         /* ACLK Divider 3: /8 */

#define DIVS0                  (0x02)         /* SMCLK Divider 0 */
#define DIVS1                  (0x04)         /* SMCLK Divider 1 */
#define SELS                   (0x08)       
 /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */
#define DIVM0                  (0x10)         /* MCLK Divider 0 */
#define DIVM1                  (0x20)         /* MCLK Divider 1 */
#define SELM0                  (0x40)         /* MCLK Source Select 0 */
#define SELM1                  (0x80)         /* MCLK Source Select 1 */

#define DIVS_0                 (0x00)         /* SMCLK Divider 0: /1 */
#define DIVS_1                 (0x02)         /* SMCLK Divider 1: /2 */
#define DIVS_2                 (0x04)         /* SMCLK Divider 2: /4 */
#define DIVS_3                 (0x06)         /* SMCLK Divider 3: /8 */

#define DIVM_0                 (0x00)         /* MCLK Divider 0: /1 */
#define DIVM_1                 (0x10)         /* MCLK Divider 1: /2 */
#define DIVM_2                 (0x20)         /* MCLK Divider 2: /4 */
#define DIVM_3                 (0x30)         /* MCLK Divider 3: /8 */

#define SELM_0                 (0x00)    /* MCLK Source Select 0: DCOCLK */
#define SELM_1                 (0x40)    /* MCLK Source Select 1: DCOCLK */
#define SELM_2                 (0x80)   
/* MCLK Source Select 2: XT2CLK/LFXTCLK */
#define SELM_3                 (0xC0)        
/* MCLK Source Select 3: LFXTCLK */

六、BCSCTL1 = CALBC1_1MHZ;                //设置值     (例3、4)
#ifndef __DisableCalData
SFR_8BIT(CALDCO_16MHZ);          /* DCOCTL  Calibration Data for 16MHz */
SFR_8BIT(CALBC1_16MHZ);          /* BCSCTL1 Calibration Data for 16MHz */
SFR_8BIT(CALDCO_12MHZ);          /* DCOCTL  Calibration Data for 12MHz */
SFR_8BIT(CALBC1_12MHZ);          /* BCSCTL1 Calibration Data for 12MHz */
SFR_8BIT(CALDCO_8MHZ);           /* DCOCTL  Calibration Data for 8MHz */
SFR_8BIT(CALBC1_8MHZ);           /* BCSCTL1 Calibration Data for 8MHz */
SFR_8BIT(CALDCO_1MHZ);           /* DCOCTL  Calibration Data for 1MHz */
SFR_8BIT(CALBC1_1MHZ);           /* BCSCTL1 Calibration Data for 1MHz */
#endif                              /* #ifndef __DisableCalData */

关于SFR_8BIT的相关说明:
External references resolved by a device-specific linker command file
(外部引用解决的特定于设备的连接器命令文件)
#define SFR_8BIT(address)   extern volatile unsigned char address
#define SFR_16BIT(address)  extern volatile unsigned int address

七、if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
    {
     while(1);                            // If cal const erased,挂起
}                                     (例3、例4)
请注意这里的陷阱。它可以清除内存段信息。

八、IFG1 &= ~OFIFG;                       // 清除OSCFault 标志   (例1、例4)
时钟系统将强制使用的MCLK作为其源的DCO在一个时钟故障的存在。因此,我们必须清除故障标志。
FG1中断标志寄存器是1。寄存器中的位域是唯一的振荡器故障中断标志 - OFIFG。

九、while(IFG1 & OFIFG)
{
IFG1 &= ~OFIFG;                       // 清除OSCFault 标志
_delay_cycles(100000);                 // 为可见标志延时
}                                    (例2、例3)
在上面的代码我们把OSCFault标志继续做我们的任务,由于时钟系统将默认为VLO。现在,我们希望确保该标志保持清零,这意味着晶体是启动并运行着的。
如果该故障标志是明确的,我们就退出循环。我们需要等待清算后的标志,直到我们再次测试50微秒。该_delay_cycles(100000)。我们需要它是那么长的时间,所以我们可以看到在代码开头的LED灯。否则,它会这么快,我们的光将无法看到它。


首先申明一下我也是才刚刚开始接触MSP430的片子,算是和大家一起学习吧,很多地方也不是很清楚。总之希望大家好好体会一下MSP430的头文件(名为:msp430x20x2.h),如果文章中有错误的话希望大家发邮件给我。纯属菜鸟入门级别文档,只是简单的分析了一下MSP430的时钟配置问题,对于一个单片机系统而言时钟可谓是重中之重,可能刚入门多是采用51系列的片子(不包括C8051f系列)所以对时钟也就没有过多的接触,只是涉及速度以及延时程序的时候才会去关心。其实芯片越是高端越是对时钟有很高的要求,不管是PIC、AVR还是C8051F这些8位的片子,在32位的领域更是这样,像我所熟悉的Cortex-M3系列包括STM32f103、Stellaris、NXP都是这样,片子内部的时钟都是相当的复杂。
最后在来唠叨几句,记得以前玩51的时候那个头文件真是小儿科,只有寄存器的定义还有一些位操作。程序写起来相当的麻烦,很多东西都需要去记忆或者干脆去看文档,所以那个时候还特地写了一个驱动库(效仿STM32f103给STC12C5A60S2写的,取名为Easy Hw OS,其实还是很方便的直接调用函数就可以啦),看到430的头文件才豁然开朗,这样做好,虽然没有驱动库方便但是很灵活也不需要去记忆那些寄存器的,真的很不错。喜欢上了430为文以记之。

 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

6
 

回复 5楼 lyzhangxiang 的帖子

为何出现了两个笑脸   估计是某些代码导致的 希望大家下载那个pdf直接阅读。带来的不便望您谅解 也由于字数限制问题发了三个独立的部分。
 
 
 

回复

2万

帖子

71

TA的资源

管理员

7
 

回复 6楼 lyzhangxiang 的帖子

笑脸的原因看这个:https://bbs.eeworld.com.cn/viewthread.php?tid=78536
一般带有链接的帖子会自动进入审核区,有时也会因为一些词语,我们会尽快减少审核时间。因为是周末,所以帖子审核通过的时间有些延误,不好意思。
楼主是不是直接从WORD复制过来的文字,因为WORD本身带有很多格式和编码,所以复制过来会受到限制,这时可以在记事本去下格式,基本就可以在一个帖子中搞定,下次可以试试
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

8
 

回复 7楼 soso 的帖子

已经是在txt里面的了 不然完全不行的soso姐  想是在word里面算是手记的形式,一边写一遍改改,然后在发上来的,可惜格式不见了。呵呵 我做了pdf可以下来看看。
 
 
 

回复

2万

帖子

71

TA的资源

管理员

9
 

回复 8楼 lyzhangxiang 的帖子

呵呵 好的 谢谢啦  我们也尽快想想办法看看能否改善一下
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

10
 

不错,学习了

 
 
 

回复

996

帖子

0

TA的资源

一粒金砂(高级)

11
 
打算以后自己做板子学习~!!~
 
 
 

回复

499

帖子

0

TA的资源

一粒金砂(初级)

12
 
写得很详细啊,真有耐心
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

13
 
很好,LZ辛苦了
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

14
 
正在学430,下来学习下
 
 
 

回复

185

帖子

0

TA的资源

一粒金砂(初级)

15
 
很好的帖呢,谢谢分享
 
个人签名加油学习,努力提高
 
 

回复

746

帖子

0

TA的资源

纯净的硅(高级)

16
 
支持楼主!好人呐!
 
 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

17
 
不错,谢谢分享!!!
 
 
 

回复

272

帖子

0

TA的资源

一粒金砂(中级)

18
 
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(初级)

19
 

谢谢楼主

希望以后还有更好的资料分享
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

20
 
楼主用心整理的,下来收藏学习啦~~~~
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表