MSP432学习心得之时钟配置

2019-07-17 13:45发布

本帖最后由 michael_llh 于 2016-1-29 17:45 编辑

MSP432学习心得之时钟配置   关于建立工程和导入库函数的方法在这里不在介绍,可以参考MSP430趣谈的前几讲里面有说到,这里我们就直接开始了。我们第一步来看下在没有配置时钟的情况下我们直接用库函数调用查看默认情况下各个时钟的时间是多少? 图片1.png    简单的代码实现,在仿真过程中,左键点击即可选中该变量,或者直接右键将各个变量添加到watch Expression,这里有一个前提就是该变量必须是全局变量,否则无法添加。 图片2.png    通过该表格我们对应到我们相应的时钟中得到: 图片3.png    我们很明显的看出了,当我们没有进行时钟配置的时候,除了ACLK和BCLK为32K之外,其他四个时钟源都和DCO的频率是一样的,那么我们来看一下数据手册看哪里提到了这一点。 图片4.png    在这里我们对应到了系统复位时的时钟设置,在没有选择对应外部的高速或者低速时钟的时候,ACLK和BCLK是选择了REFOCLK,其他的四个时钟是选择了DCOCLK。   这里我们查看板子的原理图可以看到相应的引脚连接。具体如下: 图片5.png    我们看到输入晶振的引脚都是连接在PJ端口上面。
   错误说明:在上面使用了uint16_t的全局变量,导致了一个错误,就是当整个频率的值小于65535的时候会显示正确的频率值,当大于65535的时候将会导致数据溢出从而导致整个显示值发生错误。所以这里如果我们没有进行修改相应的数据类型,那么我们将会得到一个错误的数据。 图片6.png    这里是已经对应修改过的数据类型所得到的值,在这里我们看到对应的时钟值,后面四个和我们前面测到的不一样,是3000000,也就是3MHz的频率。这里我们来解释一下前面我们测到的为什么是50880这里数字。首先对于一个16位的寄存器,他所能够代表的数字应该是多大呢?大家可能会比较清楚的知道,16位寄存器能够表示最大的是FFFF,对应数值是65535,那我们对3_000_000 ÷ 65535 ≈ 45,然后我们用3_000_000 - 65535 × 45 = 50925 和我们的测到的值50880有点差距,那这是为什么呢,所以我们在这里要明白两个的区别,65535代表的是16位的寄存器所能代表的最大数字,在这其中我们忽略了数字0,所以如果将一个寄存器用来数数,那么对应最大能够数的数是65536个数,是2的16次方。所以最终我们得到的数值应该是这样算出来的。3_000_000 - 65536 × 45 = 50880   下面举了个3位寄存器的实例,帮助大家理解。 图片7.png    之后我们对应时钟修改官网的实例代码,可以得到我们想要的时钟设置,下面是我们最终得到的时钟频率,第三个是DCO的频率我们没有进行配置,所以还是原来的3MHz。其他的都相应修改为我们的设置时钟。 图片8.png    最终代码如下: 图片9.png    具体的话可以查看附件。   这里我们看到ACLK和BCLK都是32000Hz,可能有会纳闷说我们接的晶振不是32.768KHz吗,其实是因为我们在初始化话外部时钟的时候写的是32K所以这里导致不同,大家可以改成32768,这样子就可以了。 图片10.png    今天就说到这里了,上面还存在一个不足的地方,就是变量命名的问题,就是尽量要使用可辨识度比较高的名字作为变量名,如果使用的是temp这种的,还有什么,abc的,这种的不好,辨识度很低,可能今天写的代码,明天就看不懂了,变量的命名也很重要。
MSP432code1_1.rar (2.03 MB, 下载次数: 31) 2016-1-29 17:45 上传 点击文件名下载附件
代码


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
michael_llh
2019-07-19 05:18
chuntian2016 发表于 2016-2-16 17:53
采用内部时钟的时候需要多注意单片机外围的硬件方面的设计的。

恩恩,对于采用内部时钟一般是时钟精度要求不高的情况下使用,对于MSP430来说,TI对内部时钟进行了校准,满足一定条件的话精度还是很高的。外部硬件电路的设计和主控的配合还是很重要的

一周热门 更多>