MSP432入门第一节之启动文件(以STM32对比)

文章目录

  • 前言
  • 一、启动文件目录
  • 二、SystemInit()函数分析
    • 1.堆、栈的大小
    • 2.中断向量表
    • 3.SystemInit()分析
    • 4.库函数对时钟进行配置
  • 总结
  • 附录:时钟树


前言

本系列文章是笔者学习MSP432的一些笔记及心得,对比STM32学习的。阅读文章前,需有一些单片机相关基础。

本系列文章均是在Keil环境下利用固件库对MSP432P401R进行开发,关于环境搭建、工程模板以及手册等均可在以下资源中下载(已整理)MSP432P401R-keil模板及例程(含整理的官方手册)-单片机文档类资源-CSDN下载

本文主要从启动文件引入了解MSP432时钟相关操作以及启动初始化相关知识,后续文章记录外设等库函数操作。个人认为在入手一款单片机前,首先了解其时钟很有必要,故先从时钟开始。

笔者第一次写,如有错误,烦请谅解,帮忙指正。

一、启动文件

随便打开一个例程,msp432p401R固件库及中文手册\1.点亮LED\Project\RTE\Device\MSP432P401R042b33342f78474891068ba69b4aeca5.png

 第一个即为启动文件,第二个是系统初始化配置的函数文件。

在Keil中随便打开一个例程,并打开这两个文件。

二、启动文件及SystemInit()分析

1.堆、栈大小(可跳过)

b921681c08f341d5b0ed7b6a8becbd70.jpeg

 如图,第一个箭头所指即为栈大小,这里大小为512个字节。第二个箭头大小为堆大小,这里为0,没有分配,而在STM32F103启动文件中的栈大小为1024字节。值得注意的是,在定义局部变量过程中,要避免定义大容量数组(或递归层数过多),防止栈溢出。

2.中断向量表 

我们接着往下看,可以看到中断向量表,在写中断服务函数时,函数名要与该表中一致。这里与STM32中断服务函数写法类似。函数名别写错即可

28b34d70fda94fedaad76b15b4ae2821.png

3.SystemInit()分析

4f28b7edd7594a4f89abeed9c23a9302.png

跳转到该函数,对其分析,里面共干了四件事:

1.开启浮点运算单元

b297edb1a97744ffb72d9248b1abdc2e.png

由宏定义知(__FPU_USES = 1 ),故该功能默认开启。笔者对此功能目前不了解,不做分析。

2.关闭看门狗

41bc1916ab6647ee85a9a800e3d03dd6.png

c6b2efb1db2f4b708face9829134ee53.png

宏定义(__HALT_WDT = 1),故在启动初始化中,就以及关闭看门狗了,后续不用单独写代码关闭看门狗。若不想关闭,可将HALT_WDT这个宏修改为0。

3.初始化系统时钟

选择系统时钟源,设置主频(MCLK)、HSMCLK、SMCLK、ACLK及BCLK大小。具体时钟含义在文末单独介绍。

在SystemInit中找到框选所示代码块(根据__System_CLOCK的大小定义不同,分为了几种情况,我们看其中一个即可),SYSTEM_CLOCK这个宏的大小即代表系统频率的设置。

90bfa5c6e9fd4a9583afc39978b5b15b.png

下图展示即是通过配置寄存器实现对时钟源、时钟大小的选择

1930e51bfb824a2d92a952682eccbcef.png

即我们可通过修改__SYSTEM_CLOCK的大小,来修改启动后主频(MCLK)的大小。MCLK默认值为3MHZ,选择DCO为时钟源。(后续有个库函数可专门对时钟进行配置,下文提及)

cf7c3efa2cde4359baadb758cbf52439.png

想要了解的更底层,可参考寄存器配置手册CS部分,有详细讲解

44ce4df4292f4df889b6a1ab455bcbd4.png

 4.对时钟配置(库函数)

打开固件库手册cde3d644feef49a59edebfe0122c769d.png

64b7037ff0d642fe804985085622b45b.png

找到这个库函数,手册中有详细讲解dc55a9f4e39741c1ae19c38e176f463c.png

第一个参数是要配置的时钟(MCLK、ACLK等),第二个参数为选择时钟源,第三个参数为分配系数。

懒人操作:直接调用SystemClockInit()函数

e75f3fe161ab4e3194309aa9127256fa.png

直接在main函数写

096cbbe0cf0347af94d7cd8de6326fb8.png

这样直接配置了MCLK选择HFXT(外部稳定晶振)为时钟源,主频为48MHZ(最大就是48Mhz),这与STM32的SystemInit()配置72MHZ的函数类似。

(因为TI系芯片主打低功耗,故启动文件中主频设置的较低(仅3Mhz),可自行修改宏,或调用SystemClockInit()函数)。

总结

本文简单介绍了432启动文件以及时钟的配置,后续将更新各外设的使用。

由于笔者水平有限,如有错误,请指正。

附录:时钟树

在寄存器配置手册的379页有对时钟的详细介绍,读者自行下载阅读,下图为手册中部分中文翻译 

2466f6f5ca434ae2929af771f9f5d350.png

MSP432 低功耗高性能并存10.1 Digital I/O Introduction The digital I/O features include: • Independently programmable individual I/Os • Any combination of input or output • Individually configurable interrupts for ports (available for certain ports only) • Independent input and output data registers • Individually configurable pullup or pulldown resistors • Wake-up capability from ultra-low power modes (available for certain ports only) • Individually configurable high drive I/Os (available for certain I/Os only) Devices within the family may have up to eleven digital I/O ports implemented (P1 to P10 and PJ). Most ports contain eight I/O lines; however, some ports may contain less (see the device-specific data sheet for ports available). Each I/O line is individually configurable for input or output direction, and each can be individually read or written. Each I/O line is individually configurable for pullup or pulldown resistors. Certain ports have interrupt and wake-up capability from ultra-low power modes (see device specific data sheet for ports with interrupt and wake-up capability). Each interrupt can be individually enabled and configured to provide an interrupt on a rising or falling edge of an input signal. All interrupts are fed into an encoded Interrupt Vector register, allowing the application to determine which sub-pin of a port has generated the event. Individual ports can be accessed as byte-wide ports or can be combined into half-word-wide ports. Port pairs P1 and P2, P3 and P4, P5 and P6, P7 and P8, and so on, are associated with the names PA, PB, PC, PD, and so on, respectively. All port registers are handled in this manner with this naming convention. The main exception are the interrupt vector registers, for example, interrupts for ports P1 and P2 must be handled through P1IV and P2IV, PAIV does not exist. When writing to port PA with half-word operations, all 16 bits are written to the port. When writing to the lower byte of port PA using byte operations, the upper byte remains unchanged. Similarly, writing to the upper byte of port PA using byte instructions leaves the lower byte unchanged. When writing to a port that contains less than the maximum number of bits possible, the unused bits are don't care. Ports PB, PC, PD, PE, and PF behave similarly.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大颜u

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值