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

发布者:心灵之舞最新更新时间:2019-10-17 来源: eefocus关键字:MSP  EXP430F5529LP  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, ¶m);

 

    // 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的方波

关键字:MSP  EXP430F5529LP  PWM库函数  时钟配置 引用地址:MSP-EXP430F5529LP开发板005-PWM库函数+时钟配置

上一篇:msp430f5529 uart pwm adc
下一篇:MSP430点亮led小灯

推荐阅读最新更新时间:2024-11-02 11:07

基于MSP430单片机的低功耗有源RFID标签设计
  引言   射频识别(RFID)技术近年来在国内外得到了迅速发展。对于需要电池供电的便携式系统,功耗也越来越受到人们的重视。本文将具体阐述基于MSP430F2012和CC1100低功耗设计理念的双向有源标签的软硬件实现方法。   低功耗设计   低功耗概述   功耗基本定义为能量消耗的速率,可分为瞬态功耗和平均功耗两类。两者意义不同,有不同的应用背景和优化策略,通常被笼统地概括为低功耗设计。实际研究中可根据不同情况区分为:   (1)瞬态功耗优化:目标是降低峰值功耗,解决电路可靠性问题。   (2)平均功耗优化:目标是降低给定时间内的能量消耗,主要针对电池供电的便携电子设备,以延长电池寿命或减轻设备重量。
[单片机]
基于<font color='red'>MSP</font>430单片机的低功耗有源RFID标签设计
MSP430家族继续扩大 推带DSP功能产品
日前,德州仪器宣布推出两款MSP430产品,分别为MSP430FR5994 MCU,该产品拥有256KB FRAM,同时其性能是其它低功耗MCU的40倍,能够通过全新且易于使用的集成型低能耗加速器(LEA)为开发人员提供数字信号处理(DSP)能力。以及MSP430FR2111 MCU。该产品可利用扩展的TI MCU Value Line产品组合升级原有的8位设计,同时也是首次在小型3mmx3mm QFN封装中包含统一FRAM存储器。 德州仪器MSP430中国区业务拓展经理刁勇,10年前来到德州仪器就开始从事MSP430相关业务,在32位MCU不断推陈出新的今日,MSP430作为老牌16位单片机,依然散发着茂盛的生命力,原因到底
[单片机]
<font color='red'>MSP</font>430家族继续扩大 推带DSP功能产品
stm32变更外部晶振时如何配置时钟、以及HSI的使用
由于stm32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。 如果采用外部晶振12M,配置时钟为72MHZ 。 1)PLL倍频这样改: 8M: RCC- CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72 12M: RCC- CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);//12*6=72 库函数:void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul) 例
[单片机]
MSP430系统时钟 ACLK、MCLK、SMCLK
MSP430基础时钟模块包含以下3个时钟输入源。 一、4个时钟振荡源 1、LFXT1CLK: 外部晶振或时钟1 低频时钟源 低频模式:32768Hz 高频模式:(400KHz-16MHz) 2、XT2CLK: 外部晶振或时钟2 高频时钟源(400KHz-16MHz) 3、DCOCLK: 内部数字RC振荡器,复位值1.1MHz 4、VLOCLK: 内部低功耗振荡器 12KHz 注:MSP430x20xx: LFXT1 不支持 HF 模式, XT2 不支持, ROSC 不支持. (1)LFXT1CLK 低频时钟源:由
[单片机]
MSP430中断参数
1.中断向量入口参数 typedef enum { VECTOR_RTC =41u, /* RTC */ VECTOR_PORT2 , /* Port 2 */ VECTOR_TIMER2_A1 , /* Timer0_A5 CC1-4, TA */ VECTOR_TIMER2_A0 , /* Timer0_A5 CC0 */ VECTOR_USCI_B1 , /* USCI B1 Receive/Transmit */ VECTOR_USCI_A1 , /* USCI A1 Receive/Transmit */ VECTOR_PORT1 , /* Port 1 */ VECTOR_T
[单片机]
MSP430内部上拉电阻的使用
今天用MSP430的IO做按键,没有外部上拉电阻,发现设置内部上拉后有问题,以为只能在输出时才能用内部上拉,后面在网上搜到了这篇帖子,很好。转载一下。 今天帮助一个人测试msp430f2002,他又提出了这样的要求,输入,msp430内部上拉,我又习惯性的说,不行啊,只能输出可以内部上下拉,他是个硬件工程师,很是怀疑,其实我也怀疑。 又仔细看了下430的datasheet。对着内部电路一看,我靠,还真是。。作为一个电信专业出身的人,居然。。没看内部结构就下了那样的结论,大意了。 上下拉是否开启是否REN寄存器决定的,而上拉还是下拉是由OUT寄存器决定的,在作为输出时,随着OUT的高低,自动选择上下拉,作为输入的时候,我们也可
[单片机]
adc12单通道多次转换例程(msp430f5529)
#include msp430f5529.h #define NUM_OF_RESULT 8; volatile unsigned int results ; //开辟8个16位内存空间 void main(void) { WDTCL = WDTPW + WDTHOLD; P6SEL |=BIT0; ADC12CTL0 = ADC12ON + ADC12SHT0_8 + ADC12MSC; //打开adc12,设置采样间隔,设置多次采样转换 ADC12CTL1 = ADC12SHP + ADC12CONSEQ_2; //设置采样定时器作为采样触发信号,采样模式为单通道多次转化 ADC12IE
[单片机]
TI针对智能仪表测量推出16款全新MSP430 MCU
在欧美立法要求日益严格以及各种实施标准不断推出的背景下,公共设施公司正积极寻求符合相关标准的仪表测量解决方案,以充分满足严格的低能耗标准要求。为满足这些需求,德州仪器 (TI) 日前宣布推出 16 款针对电气仪表测量应用的最新超低功耗 MSP430 微处理器(MCU),进一步壮大了其智能仪表测量产品阵营。这些全新 MSP430F4xx 器件是高度集成型解决方案,可支持独立的模拟前端 (AFE) 需求,并可实现业界领先的高准确度,其误差不足 0.1%。 16 款全新 MSP430 仪表测量 MCU 的主要特性与优势: • 不断壮大的仪表测量产品系列新增 F471xx、Fx461x 以及 F44x 系列 MCU,可支持多种实施
[测试测量]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved