发新帖本帖赏金 10.00元(功能说明)我要提问
123下一页
返回列表
打印

MSP432学习心得之时钟配置

[复制链接]
6275|43
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 michael_llh 于 2016-1-29 17:45 编辑

MSP432学习心得之时钟配置
   关于建立工程和导入库函数的方法在这里不在介绍,可以参考MSP430趣谈的前几讲里面有说到,这里我们就直接开始了。
我们第一步来看下在没有配置时钟的情况下我们直接用库函数调用查看默认情况下各个时钟的时间是多少?
   简单的代码实现,在仿真过程中,左键点击即可选中该变量,或者直接右键将各个变量添加到watch Expression,这里有一个前提就是该变量必须是全局变量,否则无法添加。
   通过该表格我们对应到我们相应的时钟中得到:
   我们很明显的看出了,当我们没有进行时钟配置的时候,除了ACLK和BCLK为32K之外,其他四个时钟源都和DCO的频率是一样的,那么我们来看一下数据手册看哪里提到了这一点。
   在这里我们对应到了系统复位时的时钟设置,在没有选择对应外部的高速或者低速时钟的时候,ACLK和BCLK是选择了REFOCLK,其他的四个时钟是选择了DCOCLK。
   这里我们查看板子的原理图可以看到相应的引脚连接。具体如下:
   我们看到输入晶振的引脚都是连接在PJ端口上面。

   错误说明:在上面使用了uint16_t的全局变量,导致了一个错误,就是当整个频率的值小于65535的时候会显示正确的频率值,当大于65535的时候将会导致数据溢出从而导致整个显示值发生错误。所以这里如果我们没有进行修改相应的数据类型,那么我们将会得到一个错误的数据。
   这里是已经对应修改过的数据类型所得到的值,在这里我们看到对应的时钟值,后面四个和我们前面测到的不一样,是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位寄存器的实例,帮助大家理解。
   之后我们对应时钟修改官网的实例代码,可以得到我们想要的时钟设置,下面是我们最终得到的时钟频率,第三个是DCO的频率我们没有进行配置,所以还是原来的3MHz。其他的都相应修改为我们的设置时钟。
   最终代码如下:
   具体的话可以查看附件。
   这里我们看到ACLK和BCLK都是32000Hz,可能有会纳闷说我们接的晶振不是32.768KHz吗,其实是因为我们在初始化话外部时钟的时候写的是32K所以这里导致不同,大家可以改成32768,这样子就可以了。
   今天就说到这里了,上面还存在一个不足的地方,就是变量命名的问题,就是尽量要使用可辨识度比较高的名字作为变量名,如果使用的是temp这种的,还有什么,abc的,这种的不好,辨识度很低,可能今天写的代码,明天就看不懂了,变量的命名也很重要。

MSP432code1_1.rar (2.03 MB)


打赏榜单

21ic小喇叭 打赏了 10.00 元 2016-02-03

评分
参与人数 1威望 +6 收起 理由
dirtwillfly + 6 很给力!

相关帖子

沙发
dirtwillfly| | 2016-1-29 20:35 | 只看该作者
欢迎分享

使用特权

评论回复
板凳
michael_llh|  楼主 | 2016-1-29 21:50 | 只看该作者

多谢支持哈!

使用特权

评论回复
地板
lisingch| | 2016-1-29 23:49 | 只看该作者
我看不到图,不知是什么原因?

使用特权

评论回复
5
michael_llh|  楼主 | 2016-1-30 18:29 | 只看该作者
lisingch 发表于 2016-1-29 23:49
我看不到图,不知是什么原因?

应该可以的,你试着刷新试试,或者换个浏览器试下

使用特权

评论回复
6
lisingch| | 2016-1-30 18:57 | 只看该作者
michael_llh 发表于 2016-1-30 18:29
应该可以的,你试着刷新试试,或者换个浏览器试下

是我电脑的问题,已经可以了。谢谢分享!

使用特权

评论回复
7
michael_llh|  楼主 | 2016-1-30 20:42 | 只看该作者
lisingch 发表于 2016-1-30 18:57
是我电脑的问题,已经可以了。谢谢分享!

恩恩,多多交流了

使用特权

评论回复
8
335340679| | 2016-2-4 13:30 | 只看该作者
哎。。。。。。。。。。。。。。。。。

使用特权

评论回复
9
michael_llh|  楼主 | 2016-2-4 14:43 | 只看该作者
335340679 发表于 2016-2-4 13:30
哎。。。。。。。。。。。。。。。。。

???

使用特权

评论回复
10
Ryze| | 2016-2-13 21:20 | 只看该作者
F432是不是可以参考stm32的一些例程,两者在编程上差别大吗

使用特权

评论回复
11
michael_llh|  楼主 | 2016-2-15 10:14 | 只看该作者
Ryze 发表于 2016-2-13 21:20
F432是不是可以参考stm32的一些例程,两者在编程上差别大吗

对于内核Cotex-M4的相关操作是一样的,外设就各自是各自的了

使用特权

评论回复
12
vivilzb1985| | 2016-2-15 14:41 | 只看该作者
MSP430单片机的时钟配置还是蛮简单的。

使用特权

评论回复
13
michael_llh|  楼主 | 2016-2-15 14:54 | 只看该作者
vivilzb1985 发表于 2016-2-15 14:41
MSP430单片机的时钟配置还是蛮简单的。

恩恩,多看了之后比较容易理解。对于新入门的话还是有点难懂

使用特权

评论回复
14
chuntian2016| | 2016-2-16 17:53 | 只看该作者
采用内部时钟的时候需要多注意单片机外围的硬件方面的设计的。

使用特权

评论回复
15
michael_llh|  楼主 | 2016-2-16 19:46 | 只看该作者
chuntian2016 发表于 2016-2-16 17:53
采用内部时钟的时候需要多注意单片机外围的硬件方面的设计的。

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

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
zxmxx + 1 很给力!
16
mega1702| | 2016-3-28 14:15 | 只看该作者
感谢楼主分享!!!

使用特权

评论回复
17
michael_llh|  楼主 | 2016-3-29 00:42 | 只看该作者

客气咯,多多交流!

使用特权

评论回复
18
turbocharger| | 2016-4-19 23:43 | 只看该作者
感谢楼主分享

使用特权

评论回复
19
michael_llh|  楼主 | 2016-4-20 00:19 | 只看该作者

多谢支持!!

使用特权

评论回复
20
ringlang| | 2016-9-10 21:27 | 只看该作者
不错,谢谢!

使用特权

评论回复
发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

381

帖子

8

粉丝