MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED

这篇具有很好参考价值的文章主要介绍了MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

平台:Code Composer Studio 10.3.1

MSP430F5529 LaunchPad™ Development Kit
(MSP‑EXP430F5529LP)


一、新建工程

msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

二、时钟树

msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

时钟系统结构

(1)5个时钟来源
        时钟系统模块具有5个时钟来源。
XT1CLK:低频/高频振荡器,可以使用32768Hz的手表晶振、标准晶体、谐振器或4~32MHz的外部时钟源;
VLOCLK:内部超低功耗低频振荡器,典型频率12kHz;
REFOCLK:内部调整低频参考振荡器,典型值为32768Hz;
DCOCLK:内部数字时钟振荡器,可由FLL稳定后得到;
XT2CLK:高频振荡器,可以是标准晶振、谐振器或4~32MHz的外部时钟源。
(2)3个时钟信号
        时钟系统模块可以产生3个时钟信号供CPU和外设使用。
ACLK:辅助时钟(Auxiliary Clock)。可以通过软件选择XT1CLK、REFOCLK、VLOCLK、DCOCLK、DCOCLKDIV或XT2CLK(当XT2CLK可用时)。DCOCLKDIV是FLL模块内DCOCLK经过1/2/4/8/16/32分频后获得的。ACLK主要用于低速外设。ACLK可以再进行1/2/4/8/16/32分频,ACLK/n 就是ACLK 经过1/2/4/8/16/32分频后得到的,也可以通过外部引脚进行输出。
MCLK:主时钟(Master Clock)。MCLK的时钟来源与ACLK相同,MCLK专门供CPU使用,MCLK配置得越高,CPU的执行速度就越快,功耗就越高。一旦关闭MCLK,CPU也将停止工作,因此在超低功耗系统中可以通过间歇启用MCLK的方法降低系统功耗。MCLK也可经1/2/4/8/16/32分频后供CPU使用。
SMCLK:子系统时钟(Subsystem Master Clock)。SMCLK的时钟来源与ACLK相同,SMCLK主要用于高速外设,SMCLK也可以再进行1/2/4/8/16/32分频。

时钟系统的原理

(1)内部超低功耗低频振荡器(VLO)
        内部超低功耗低频振荡器在无须外部晶振的情况下,可提供12kHz的典型频率。VLO为不需要精确时钟基准的系统提供了一个低成本、超低功耗的时钟源。当VLO被用作ACLK、MCLK或SMCLK时(SELA={1}、SELM={1}或SELS={1}),VLO被启用。
(2)内部调整低频参考时钟振荡器(REFO)
        在不要求或不允许使用晶振的应用中,REFO可以用作高精度时钟。经过内部调整,REFO的典型频率为32768Hz,并且可以为FLL模块提供一个稳定的参考时钟源。REFOCLK与FLL的组合,在无须外部晶振的情况下,提供了灵活的大范围系统时钟。当不使用REFO时,REFO不消耗电能。
(3)XT1振荡器(XT1)
        如图所示。MSP430单片机的每种器件都支持XT1振荡器,MSP430F5xx/6xx系列单片机的XT1振荡器支持两种模式:LF(低频模式)和HF(高频模式)。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

(4)XT2振荡器(XT2)

        如图所示,XT2振荡器用来产生高频的时钟信号XT2CLK,其工作特性与XT1振荡器工作在高频模式相似,晶振的选择范围为4 ~32MHz,具体范围由XT2DRIVE控制位进行设置。高频时钟信号XT2CLK可以分别作为辅助时钟ACLK、主时钟MCLK和子系统时钟SMCLK的基准时钟信号,也可提供给锁频环模块(FLL),可以利用XT2OFF控制位实现对XT2模块的启用(0)和关闭(1)。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

(5)锁频环(FLL)
        如图所示,FLL的参考时钟FLLREFCLK可以来自于XT1CLK、REFOCLK或XT2CLK中的任何一个时钟源,通过SELREF控制位进行选择。由于这3种时钟的精确度都很高,倍频后仍然能够得到准确的频率。FLL能够产生两种时钟信号:DCOCLK和DCOCLKDIV,其中DCOCLKDIV信号为DCOCLK时钟经1/2/4/8/16/32分频后得到(分频系数为D)。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

        锁频环是一种非常巧妙的电路,它的核心部件是数控振荡器和一个频率积分器。数控振荡器能够产生DCOCLK时钟,频率计数器实际上是一个加减计数器,“+”输入端上的每个脉冲将使计数值加1,“-”输入端上的每个脉冲将使计数值减1。FLLREFCLK经过1/2/4/8/12/16分频后输入频率积分器的“+”输入端(分频系数为n),DCOCLKDIV经过(N+1)分频后输入频率积分器的“-”输入端,频率积分器的运算结果又输出给数控振荡器,改变数控振荡器的输出频率DCOCLK,构成反馈环。经过反馈调整,最终的结果使频率积分器的“+”输入端的频率与“-”输入端的频率相同,即
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
        所以,数控振荡器的最终输出频率为
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
        其中,D由3位FLLD控制位确定,取值为1,2,4,8,16,32;
        N由10位FLLN控制位确定,取值范围为1~1023;
        n由3位FLLREFDIV控制位确定,取值为1,2,4,8,12,16。
(6)内部模块振荡器(MODOSC)
        如图所示,UCS时钟模块还包含一个内部模块振荡器MODOSC,能够产生约4.8MHz的MODCLK时钟。Flash控制器模块、ADC_12模块等片内外设都可使用MODCLK作为内部参考时钟。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

        为了降低功耗,当不需要使用MODOSC时,可将其关闭。当产生有条件或无条件启用请求时,MODOSC可自动开启。设置MODOSCREQEN控制位,将允许有条件启用请求使用MODOSC模块。对于利用无条件启用请求的模块无须置位MODOSCREQEN控制位,例如Flash控制器、ADC_12等。
(7)时钟模块失效及安全操作
        MSP430单片机的时钟模块包含检测XT1、XT2和DCO振荡器故障失效的功能。振荡器故障失效检测逻辑如图所示。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

        晶振故障失效条件有以下4种。
① XT1LFOFFG:XT1振荡器在低频模式(LF)下失效;
② XT1HFOFFG:XT1振荡器在高频模式(HF)下失效;
③ XT2OFFG:XT2振荡器失效;
④ DCOFFG:DCO振荡器失效。

时钟树配置实战

        这里我打算将MCLK、SMCLK配置为25MHz,它们的时钟源设为倍频后的DCOCLK,FLL时钟源设为XT2CLK。
        由原理图可知,XT2输入引脚为P5.2、P5.3
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
复用P5.2、P5.3

    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);
    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);

根据自己的开发板,选择合适的参数启用XT2
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
MSP430F5529 LaunchPad™ Development Kit 板载XT2晶振为CSTCR4M00G15L99,4MHz

UCS_turnOnXT2 (UCS_XT2_DRIVE_4MHZ_8MHZ);

MSP430为了省电默认状态下核心电压默认设置为1.8V来节省功耗,高频工作需要较高的核心电压,本次实验不需要低功耗模式,故我们直接将核心电压设为最高级。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

PMM_setVCore(PMM_CORE_LEVEL_3);

UCS_initClockSignal用于设置各时钟的时钟源和分频系数。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
UCS_initFLLSettle用于设置锁相环倍频系数。
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
故将XT2的4MHz经8分频进入锁相环,再倍频50倍后即可得到25MHz的DCOCLK
(4MHz经4分频再倍频24倍、25倍只能得到24MHz,26倍得到26MHz,我暂且蒙在鼓里)
最后将MCLK、SMCLK的时钟源选为DCOCLK

    UCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);
    UCS_initFLLSettle(25000, 50);

    UCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_initClockSignal(UCS_SMCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);

综上,最后将MCLK和SMCLK通过P7.7、P2.2复用输出

#include "driverlib.h"

int main(void)
{
    WDT_A_hold(WDT_A_BASE);

    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);
    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);

    UCS_turnOnXT2 (UCS_XT2_DRIVE_4MHZ_8MHZ);

    PMM_setVCore(PMM_CORE_LEVEL_3);

    UCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);
    UCS_initFLLSettle(25000, 50);

    UCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);
    UCS_initClockSignal(UCS_SMCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);

    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN2);   //SMCLK Output
    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P7, GPIO_PIN7);   //MCLK Output

    while(1)
    {

    }
}

测得对应时钟已升至25MHz
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件

三、点灯工程师

msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件
如原理图所示,P4.7控制LED2,高电平点亮

在程序中加入

#define MCLK_IN_HZ      25000000

#define delay_us(x)     __delay_cycles((MCLK_IN_HZ/1000000*(x)))
#define delay_ms(x)     __delay_cycles((MCLK_IN_HZ/1000*(x)))

将P4.7设为输出模式

    GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN7);

    while(1)
    {
        GPIO_toggleOutputOnPin (GPIO_PORT_P4, GPIO_PIN7);
        delay_ms(500);
    }

即可观察到LED2以1Hz的频率闪烁
msp4305529时钟,# MSP430F5529,单片机,嵌入式,c语言,mcu,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-600214.html

封装好的初始化函数

void SystemClock_Init(void)
{
    PMM_setVCore(PMM_CORE_LEVEL_3);     //高主频工作需要较高的核心电压

    //XT1引脚复用
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN4);
    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN5);

    //起振XT1
    UCS_turnOnLFXT1(UCS_XT1_DRIVE_3,UCS_XCAP_3);

    //XT2引脚复用
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN2);
    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN3);

    //起振XT2
    UCS_turnOnXT2(UCS_XT2_DRIVE_4MHZ_8MHZ);

    //XT2作为FLL参考时钟,先8分频,再50倍频 4MHz / 8 * 50 = 25MHz
    UCS_initClockSignal(UCS_FLLREF, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_8);
    UCS_initFLLSettle(25000, 50);

    //XT1作为ACLK时钟源 = 32768Hz
    UCS_initClockSignal(UCS_ACLK, UCS_XT1CLK_SELECT, UCS_CLOCK_DIVIDER_1);

    //DCOCLK作为MCLK时钟源 = 25MHz
    UCS_initClockSignal(UCS_MCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);

    //DCOCLK作为SMCLK时钟源 = 25MHz
    UCS_initClockSignal(UCS_SMCLK, UCS_DCOCLK_SELECT, UCS_CLOCK_DIVIDER_1);

    //设置外部时钟源的频率,使得在调用UCS_getMCLK, UCS_getSMCLK 或 UCS_getACLK时可得到正确值
    UCS_setExternalClockSource(32768, 4000000);
}

到了这里,关于MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MSP430F5529库函数GPIO学习

    导入MSP430Ware,查看例程;数据手册以及原理图获取 建议不是很了解寄存器的看完我的MSP430F5529学习笔记  目录 GPIO_setAsOutputPin() 函数声明 作用 参数 selectedPort selectedPins 修改的寄存器 使用 与GPIO_setAsOutputPin()参数一致的函数  GPIO_setOutputHighOnPin() GPIO_setOutputLowOnPin()

    2024年02月15日
    浏览(70)
  • MSP430f5529初学第一天 关于ccs环境的搭建解决driverlib.h库找不到问题

    在学我这个的文章的前提是软件已经安装好了,本来我想的使用keil开发msp430的 但是我发现官网的sdk没有keil的版本的 所以就直接放弃了,改为官方的ccs开发。 其实ccs跟keil差不多都是写库然后导入到自己的工程里来,下面我们要想实现板子的点灯就得先搭建一下ccs的环境 不然

    2024年02月12日
    浏览(80)
  • MSP430F5529学习笔记(五)——串口|UART

            我们在使用MSP430的时候大家会发现插上usb线后电脑上有两个端口标识,那么在进行串口通信时选择哪个呢。其实如图所示,上面的端口是用来进行串口通信的,下面的则是用来进行程序的下载,大家在使用的时候多加分辨即可。          当然熟悉单片机操作的

    2024年02月16日
    浏览(50)
  • MSP430F5529学习笔记(6)——导入MSP430Ware,查看例程

    MSP430WARE下载; 目录 在线版本 下载MSP430Ware 查看例程 导入例程  离线版本 下载MSP430Ware  查看例程 导入例程 MSP430Ware里面有很多例程和库函数使用手册,我们可以查看学习。非常重要 (1) 打开CCS——view——Resource Explorer  之后我们会进入如下界面 (2)  点击MSP430——Embe

    2024年02月13日
    浏览(58)
  • 【2023电赛备赛】msp430f5529学习笔记(一)

    【写在前】 本人目前是大二在读生,第一次参加电赛,准备不充分,结果熬了四天,最后成绩却不如人意。有51和32的基础,然后想立一个flag系统的学习一下主打超低功耗的msp430f5529单片机为比赛做准备(毕竟电赛限制TI的板子)。另一方面也是给电协的后继者留下一些参考的

    2024年02月11日
    浏览(50)
  • MSP430F5529单片机入门学习笔记1

    本笔记整理自B站教程 MSP430F5529单片机学习视频汇总 右边部分写错了,看的时候注意 注意#include“driverlib.h”头文件时要注意: 添加MSP430F5xx_6xx文件夹到当前工程下 MSP430F5xx_6xx文件夹是在导入的msp430ware_3_80_13_03包中找 把上述MSP430F5xx_6xx文件夹的路径包含进来 有三个系统时钟可

    2024年02月06日
    浏览(50)
  • MSP430学习笔记(四)丨I2C通信(MSP430F5529驱动OLED显示屏)

    ​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。 ​  笔者拥有一定的STM32基础,在学习MSP430的过程中,最开始苦于没有合适的OLED显示驱动代码,所以花了很多时间钻研。综合网上的各种代码,笔者认为江协科技的STM32课程中提供的OLED代码使用方便,

    2024年02月16日
    浏览(51)
  • MSP430F5529库函数定时器A——捕获实验

    需提前学习:MSP430F5529库函数学习——串口;MSP430F5529库函数定时器A——硬件PWM 目录 引脚手册获取 实验目的 代码 代码解析 串口数据发送部分 数据捕获部分 定时器部分可选参数 设置定时器部分 捕获部分可选参数 设置捕获引脚部分 中断处理 TA2IV_TACCR2解析 TA2IV_TAIFG解析 主函

    2024年02月13日
    浏览(42)
  • MSP430F5529库函数——模数转换模块(ADC12)软件触发

    需提前观看:MSP430F5529库函数学习——串口   目录 代码 ADC初始化部分 引脚复位 ADC12_A_init() 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSelec clockSourceDivider ADC12_A_enable() ADC12_A_setupSamplingTimer() ADC12_A_configureMemory() memoryBufferControlIndex  inputSourceSelect positiveRefVolta

    2024年02月16日
    浏览(53)
  • MSP430F5529库函数定时器A——硬件PWM

    需提前学习:MSP430F5529库函数定时器A——定时中断;引脚手册获取; 目录 先上代码 详解 引脚复用 选择引脚 获取引脚手册 看手册  时钟选择 分频 周期 REGISTER选择 比较输出模式 模式类型  增计数模式下的比较输出 连续计数模式下的比较输出 增减计数模式下的比较输出 占

    2024年02月16日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包