前言
本系列文章是笔者学习MSP432的一些笔记及心得,对比STM32学习的。阅读文章前,需有一些单片机相关基础。
本系列文章均是在Keil环境下利用固件库对MSP432P401R进行开发,关于环境搭建、工程模板以及手册等均可在以下资源中下载(已整理)MSP432P401R-keil模板及例程(含整理的官方手册)-单片机文档类资源-CSDN下载
本文主要从启动文件引入了解MSP432时钟相关操作以及启动初始化相关知识,后续文章记录外设等库函数操作。个人认为在入手一款单片机前,首先了解其时钟很有必要,故先从时钟开始。
笔者第一次写,如有错误,烦请谅解,帮忙指正。
一、启动文件
随便打开一个例程,msp432p401R固件库及中文手册\1.点亮LED\Project\RTE\Device\MSP432P401R
第一个即为启动文件,第二个是系统初始化配置的函数文件。
在Keil中随便打开一个例程,并打开这两个文件。
二、启动文件及SystemInit()分析
1.堆、栈大小(可跳过)
如图,第一个箭头所指即为栈大小,这里大小为512个字节。第二个箭头大小为堆大小,这里为0,没有分配,而在STM32F103启动文件中的栈大小为1024字节。值得注意的是,在定义局部变量过程中,要避免定义大容量数组(或递归层数过多),防止栈溢出。
2.中断向量表
我们接着往下看,可以看到中断向量表,在写中断服务函数时,函数名要与该表中一致。这里与STM32中断服务函数写法类似。函数名别写错即可
3.SystemInit()分析
跳转到该函数,对其分析,里面共干了四件事:
1.开启浮点运算单元
由宏定义知(__FPU_USES = 1 ),故该功能默认开启。笔者对此功能目前不了解,不做分析。
2.关闭看门狗
宏定义(__HALT_WDT = 1),故在启动初始化中,就以及关闭看门狗了,后续不用单独写代码关闭看门狗。若不想关闭,可将HALT_WDT这个宏修改为0。
3.初始化系统时钟
选择系统时钟源,设置主频(MCLK)、HSMCLK、SMCLK、ACLK及BCLK大小。具体时钟含义在文末单独介绍。
在SystemInit中找到框选所示代码块(根据__System_CLOCK的大小定义不同,分为了几种情况,我们看其中一个即可),SYSTEM_CLOCK这个宏的大小即代表系统频率的设置。
下图展示即是通过配置寄存器实现对时钟源、时钟大小的选择
即我们可通过修改__SYSTEM_CLOCK的大小,来修改启动后主频(MCLK)的大小。MCLK默认值为3MHZ,选择DCO为时钟源。(后续有个库函数可专门对时钟进行配置,下文提及)
想要了解的更底层,可参考寄存器配置手册CS部分,有详细讲解
4.对时钟配置(库函数)
打开固件库手册
找到这个库函数,手册中有详细讲解
第一个参数是要配置的时钟(MCLK、ACLK等),第二个参数为选择时钟源,第三个参数为分配系数。
懒人操作:直接调用SystemClockInit()函数
直接在main函数写
这样直接配置了MCLK选择HFXT(外部稳定晶振)为时钟源,主频为48MHZ(最大就是48Mhz),这与STM32的SystemInit()配置72MHZ的函数类似。
(因为TI系芯片主打低功耗,故启动文件中主频设置的较低(仅3Mhz),可自行修改宏,或调用SystemClockInit()函数)。
总结
本文简单介绍了432启动文件以及时钟的配置,后续将更新各外设的使用。
由于笔者水平有限,如有错误,请指正。
附录:时钟树
在寄存器配置手册的379页有对时钟的详细介绍,读者自行下载阅读,下图为手册中部分中文翻译