《智能仪表开发》实验一
时钟操作
实验目的:
学会配置F5438 时钟,了解F5438 一体化时钟系统,与F4 系列的单片机时钟比较有什么区别。 实验要求1 :
1.编程要求:利用C 语言完成SMCLK,MCLK,ACLK 按指定频率进行输出,FLL+源自RERO。
2.实现功能:ACLK = REFO,MCLK = ~2MHz,SMCLK = ~1MHZ。
3.实验现象:ACLK 接近32768Hz 稍有偏差,MCLK = ~2MHz,SMCLK = ~1MHZ,LED1不停闪烁。 实验要求2:
实现功能:分别实现1) ACLK = XT1, MCLK = ~4MHz, SMCLK=~4MHZ, 和2)ACLK = XT1, MCLK = ~16MHz, SMCLK=~8MHZ, DCO参考频率来自REFO,LED1不停闪烁。观察上述两种实验结果与实验要求1中的LED1闪烁频率的区别。
实验原理:
1.F5XX 系列的时钟MCLK,SMCLK,ACLK 均可以选择XT1,REFO XT2 时钟源,时钟配置寄存器丰富,用户可以根据需要设置相应得寄存器,来输出用户需要的频率。由于DCO是由RC 电路组成频率输出电路,因此需要调节,
DCORSELX 提供用户满足需要的标称频率,可以理解为一个粗调。因此用户在调节频率过程中必须要正确配置该位。
2.在默认状态下XT1 是关闭状态的,如果模块时钟选择XT1 提供时钟源,那么系统内部时钟REFO 就会暂时替代XT1 提供时钟,但是REFO 精度和稳定性比XT1 要差,因此要求比较高场所建议使用XT1。如果将XIN,XOUT 引脚设置为特殊引脚,那么晶体就会起振。 3.DCORSELX 的配置与设置的频率要保持统一,如果不统一就可能出现OFIFG 为1,或者频率数值达不到所需要的频率值大小。
4.XT1DRIVE1 设置在为0 的时候低驱动能力,将XT1 失效,XT1 停止振荡
实验程序:
实验一代码:
#include
//*******************************************************************************
void Init_Clk(void); void main(void) {
1
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
P11DIR = BIT0 + BIT1 + BIT2; // ACLK ,MCLK ,MCLK 输出方向 P11SEL = BIT0 + BIT1 + BIT2; P1DIR |= BIT0; // LED1 输出 Init_Clk(); while(1) {
P1OUT ^= BIT0; //LED 闪烁,说明没有晶体失效 for(unsigned int i=60000;i>0;i--); // 延迟 } }
void Init_Clk(void) {
UCSCTL1 = DCORSEL_2; // 设置DCO 范围
UCSCTL3 |= SELREF_2; // 选择FLL 参考源自REFO
UCSCTL4 = SELM_3 + SELA_2 + SELS_4; //MCLK = DCOC,SMCLK =DCODIV,ACLK=REFO
while (SFRIFG1 & OFIFG) //清除 OFIFG,and XT1OFFG ,DCOFFG {
UCSCTL7 &= ~( XT1LFOFFG + DCOFFG); SFRIFG1 &= ~OFIFG; } }
实验二代码: 1)
#include
//*******************************************************************************
void Init_Clk(void); void main(void) {
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
P11DIR = BIT0 + BIT1 + BIT2; // ACLK ,MCLK ,MCLK 输出方向 P11SEL = BIT0 + BIT1 + BIT2; P1DIR |= BIT0; // LED1 输出 Init_Clk(); while(1) {
P1OUT ^= BIT0; //LED 闪烁,说明没有晶体失效 for(unsigned int i=60000;i>0;i--); // 延迟 } }
void Init_Clk(void)
2
{
UCSCTL1 = DCORSEL_2; // 设置DCO 范围
UCSCTL3 |= SELREF_2; // 选择FLL 参考源自REFO UCSCTL2 &=FDEO;
UCSCTL2 |=FLLN5+FLLN4+FLLN3+FLLN2+FLLN0; UCSCTL2 |=FLLD_0;
UCSCTL4 = SELM_3 + SELA_0 + SELS_3; //MCLK = DCOC,SMCLK =DCOC,ACLK=XT1
while (SFRIFG1 & OFIFG) //清除 OFIFG,and XT1OFFG ,DCOFFG {
UCSCTL7 &= ~( XT1LFOFFG + DCOFFG); SFRIFG1 &= ~OFIFG; } } 2)
#include
//*******************************************************************************
void Init_Clk(void); void main(void) {
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
P11DIR = BIT0 + BIT1 + BIT2; // ACLK ,MCLK ,MCLK 输出方向 P11SEL = BIT0 + BIT1 + BIT2; P1DIR |= BIT0; // LED1 输出 Init_Clk(); while(1) {
P1OUT ^= BIT0; //LED 闪烁,说明没有晶体失效 for(unsigned int i=60000;i>0;i--); // 延迟 } }
void Init_Clk(void) {
UCSCTL1 = DCORSEL_5; // 设置DCO 范围
UCSCTL3 |= SELREF_2; // 选择FLL 参考源自REFO UCSCTL2 &=FDEO;
UCSCTL2 |=FLLN7+FLLN6+FLLN5+FLLN4+FLLN2; P7SEL|=BIT0+BIT1;
UCSCTL4 = SELM_3 + SELA_0 + SELS_4; //MCLK = DCOC,SMCLK =DCODIV,ACLK=XT1
while (SFRIFG1 & OFIFG) //清除 OFIFG,and XT1OFFG ,DCOFFG {
UCSCTL7 &= ~( XT1LFOFFG + DCOFFG);
3
SFRIFG1 &= ~OFIFG; } }
实验总结: 通过本次试验,学会了配置F5438 时钟,了解了F5438 一体化时钟系统,与F4 系列的单片机时钟比较有什么区别。
4
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库智能仪表开发 实验一在线全文阅读。
相关推荐: