MSP-EXP430F5529LP开发板005-PWM库函数+时钟配置

从32转到MSP430最让我头大的就是它的时钟配置了,参考了一些网上的资料,看了几天终于大概了解了一点。

上面这6点是关键,在后面的时钟初始化时要参考。

本次实验目的是要实现P2.0口输出10kHz的PWM,这也是应用中电机控制的常用工作频率。要输出准确的频率,了解清楚各个时钟是非常必要的。

首先明确思路,430中有三个时钟:辅助时钟ACLK,频率较低,软件选作各个外围模块的时钟信号,一般用于低速外设;系统主时钟MCLK,频率较高,主要用于CPU和系统,类似于主频;子系统时钟SMCLK,主要用于高速外设模块。这里我们利用TIMER_A产生PWM,选择SMCLK作为模块的时钟源,因此SMCLK的设置就是关键。

LaunchPad为430的XT2外接了一个4MHz的时钟源,T1外接了一个32.768kHz的时钟源,本实验的目标除了输出10kHz的PWM,还要将ACLK配置为32.768kHz,MCLK配置为24MHz,SMCLK配置为4MHz。

整体代码如下:

//*****************************************************************************
#include "driverlib.h"
//*****************************************************************************
//
//Target frequency for MCLK in kHz
//
//*****************************************************************************
#define UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ   24000

//*****************************************************************************
//
//MCLK/FLLRef Ratio
//
//*****************************************************************************
#define UCS_MCLK_FLLREF_RATIO   6

//*****************************************************************************
//
//Variable to store current Clock values
//
//*****************************************************************************
uint32_t clockValue = 0;

//*****************************************************************************
//
//Variable to store status of Oscillator fault flags
//
//*****************************************************************************
//*****************************************************************************
//
//XT1 Crystal Frequency being used
//
//*****************************************************************************
#define UCS_XT1_CRYSTAL_FREQUENCY    32768

//*****************************************************************************
//
//XT2 Crystal Frequency being used
//
//*****************************************************************************
#define UCS_XT2_CRYSTAL_FREQUENCY   4000000
//*****************************************************************************
//
//Desired Timeout for XT1 initialization
//
//*****************************************************************************
#define UCS_XT1_TIMEOUT 50000
#define TIMER_PERIOD 399
#define DUTY_CYCLE  100
#define UCS_XT2_TIMEOUT 50000
uint16_t status;
uint8_t returnValue = 0;
void main (void)
{
    //Stop WDT
    WDT_A_hold(WDT_A_BASE);

    //Set VCore = 1 for 12MHz clock
    PMM_setVCore(PMM_CORE_LEVEL_1);//主频提高后,VCore电压也需要随之配置
    
    //Initializes the XT1 and XT2 crystal frequencies being used
    UCS_setExternalClockSource(UCS_XT1_CRYSTAL_FREQUENCY,UCS_XT2_CRYSTAL_FREQUENCY);//设置外部时钟源的频率,没什么实际设定

    //Initialize XT1. Returns STATUS_SUCCESS if initializes successfully
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN4 + GPIO_PIN5);//XT1口不作为普通IO
    returnValue = UCS_turnOnLFXT1WithTimeout(UCS_XT1_DRIVE_0,UCS_XCAP_3,UCS_XT1_TIMEOUT);//启动XT1

    //Startup HF XT2 crystal Port select XT2
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5,GPIO_PIN2 + GPIO_PIN3);//XT2口不作为普通IO

    //Initialize XT2. Returns STATUS_SUCCESS if initializes successfully
    returnValue = UCS_turnOnXT2WithTimeout(UCS_XT2_DRIVE_4MHZ_8MHZ,UCS_XT2_TIMEOUT);//启动XT2
    
    //Set DCO FLL reference = REFO
    UCS_initClockSignal(UCS_FLLREF,UCS_XT2CLK_SELECT,UCS_CLOCK_DIVIDER_1);//XT2作为FLL参考
    
    //Set Ratio and Desired MCLK Frequency  and initialize DCO
    UCS_initFLLSettle(UCS_MCLK_DESIRED_FREQUENCY_IN_KHZ,UCS_MCLK_FLLREF_RATIO);//MCLK设置为24MHz
    
    //Set ACLK = REFO
    UCS_initClockSignal(UCS_ACLK,UCS_REFOCLK_SELECT,UCS_CLOCK_DIVIDER_1);//ACLK设置为32.768kHz
    
    UCS_initClockSignal(UCS_SMCLK,UCS_XT2CLK_SELECT,UCS_CLOCK_DIVIDER_1);//SMCLK设置为4MHz

    //P2.0 as PWM output
    GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,GPIO_PIN0);

    //Generate PWM - Timer runs in Up mode
    Timer_A_outputPWMParam param = {0};
    param.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
    param.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;
    param.timerPeriod = TIMER_PERIOD;
    param.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;
    param.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;
    param.dutyCycle = DUTY_CYCLE;
    Timer_A_outputPWM(TIMER_A1_BASE, &param);

    // Enable global interrupt
    __bis_SR_register(GIE);

    //Verify if the Clock settings are as expected
    clockValue = UCS_getMCLK();
    clockValue = UCS_getACLK();
    clockValue = UCS_getSMCLK();

    //Loop in place
    while (1) ;
}

运行结果如下,输出占空比25%,10kHz的方波。

 

 

  • 12
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
MSP-EXP430F5529LP是TI最新的一款LaunchPad,采用了eZ-FET lite。在安装驱动方面可能存在一些问题。通常情况下,安装了CCS之后,MSP430LaunchPad的驱动会自动安装好,主要是MSP Application UART和MSP Debug Interface。但如果驱动安装失败,可能会出现"Error initializing emulator: No USB FET was found"的错误提示。解决方法是安装最新的CCSv5.5,并按照CCS的提示进行更新或修复固件操作。如果在Windows 7系统下遇到串口驱动安装问题,可能是因为缺少usbser.sys文件。可以将usbser.sys文件复制到C:\Windows\System32\drivers目录中,并手动升级驱动程序,指向附件中的oem51.inf文件,即可成功安装驱动。\[1\] MSP430单片机具有多种低功耗模式,不同的低功耗模式下需要选择不同的时钟信号。在使用低功耗模式3(LPM3)时,需要避免看门狗定时器的参考时钟选择为DCO、高频模式下的XT1或XT2作为时钟源的SMCLK或ACLK。当不需要看门狗定时器时,可以使用WDTHOLD控制位关闭看门狗计数器(WDTCNT),以减少单片机功耗。看门狗定时器控制寄存器可以进行软件编程,选择不同的时间间隔和模式,并具有口令保护功能。\[2\]\[3\] 总结来说,MSP-EXP430F5529LP是TI的一款LaunchPad开发板,使用eZ-FET lite。在安装驱动时可能会遇到一些问题,但可以通过安装最新的CCS版本和手动升级驱动程序来解决。此外,MSP430单片机还具有看门狗定时器功能,可以在不同的低功耗模式下进行配置,并通过软件编程进行控制。 #### 引用[.reference_title] - *1* [MSP-EXP430F5529LP: Error initializing emulator: No USB FET was found](https://blog.csdn.net/wanruoqingkong/article/details/19924281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MSP430F5529 DriverLib 库函数学习笔记(十四)看门狗定时器 (WDT)](https://blog.csdn.net/weixin_44457994/article/details/119281069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值