MSP430G2553之timerA产生PWM

#include <MSP430G2553.h>

#define CPU_F ((double)12000000)//cpu frequency12000000

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

//功能:TA0.1输出PWM
//说明:TA0.1由P1.2 p1.6输出
void timerA0_1_init()
{
  TACTL |= TASSEL_2 + MC_1; //选SMCLK(可以测出来),增计数
                            //若选ACLK,经示波器PWM时有时无
  CCTL1 = OUTMOD_7; //输出模式为复位/置位
  CCR0 = 1115000/1000; //SMCLK时钟频率为1.115MHZ,PWM(频率):1.115MHZ/CCR0
  CCR1 = (1115000/1000) * 30/100; //占空比:CCR1/CCR0 ;
}

//功能:TA1.1输出PWM
//说明:TA1.1由P2.1 P2.2输出;
//TA1.1与TA1.2共用TA1CCR0,TA1CTL
void timerA1_1_init()
{
  TA1CCTL1 = OUTMOD_7;
  TA1CCR1 = (1115000/200) * 10/100; ; //占空比:TACCR1/TACCR0
}

//功能:TA1.2输出PWM
//说明:TA1.2由P2.4 P2.5输出
void timerA1_2_init()
{
  TA1CTL |= TASSEL_2 + MC_1;  //选SMCLK,增计数
                            //若选ACLK,经示波器PWM时有时无
  TA1CCTL2 = OUTMOD_7;  //输出模式为复位/置位
  TA1CCR0 = 1115000/200;  ///SMCLK时钟频率为1.115MHZ,PWM(频率):1.115MHZ/CCR0
  TA1CCR2 = (1115000/200) * 60/100; //占空比: CCR2/CCR0
}

void port_init()
{
  P1SEL |= BIT2 + BIT6;
  P1DIR |= BIT2 + BIT6;
  //P1.2/6 设为输出TA0.1  
 
  P2SEL |= BIT1 + BIT2;
  P2DIR |= BIT1 + BIT2;
  //P2.1/2设为输出TA1.1
 
  P2SEL |= BIT4 + BIT5;
  P2DIR |= BIT4 + BIT5;
  //P2.4/5 设为输出TA1.2
    
}

void main()
{
  WDTCTL = WDTPW + WDTHOLD;
 
  port_init();

timerA0_1_init();
  timerA1_2_init();
  timerA1_1_init();
  _BIS_SR(CPUOFF); // Enter LPM0  进入低功耗模式0 SMCLK ON,ACLK ON
  //while(1);
}

举例2:

  #include <MSP430G2553.h>

  void set_timerA(void) {
          P2DIR |= 0x12;                    // P2.1 and P2.4 output
          P2SEL |= 0x12;                    // P2.1 and P2.4 TA1 options
          TA1CCR0 = 1000000/1000-1;            // PWM Period
          TA1CCTL1 = OUTMOD_7;              // CCR1 reset/set
          TA1CCTL2 = OUTMOD_7;

   TA1CCR1 =(1115000/1000)*80/100;
          TA1CCR2 = (1115000/1000)*20/100;
          TA1CTL = TASSEL_2 + MC_1;                // SMCLK, up mode
//        CCTL0 = CCIE;                       // CCR0 interrupt enabled
}

//参数说明:duty是占空比,50是代表百分之50,范围1-100
void pwm_sinit(unsigned char duty)
{
  TACTL = TASSEL_2 + MC_1;
  CCR0 = 1115000/500;   //通过示波器观察此时SMLK=1115000
  CCTL1 = OUTMOD_7;         
  CCR1 = (1115000*duty)/(100*500);
  P1DIR |= 0x44;              //P1.2/6 output
  P1SEL |= 0x44;     //通过特殊功能口输出
  
}
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
Set_TimerA();
pwm_sinit(50);
while(1);
}

MSP430G2553之timerA产生PWM

时间: 2024-10-13 08:33:37

MSP430G2553之timerA产生PWM的相关文章

(1)MSP430F5529学习入门

为想学MSP430单片机的初学者,或者,你是刚转到电子硬件嵌入式开发,如果你的电子基础课程已经完成,想尽快掌握MSP430单片机,又纠结于怎样尽快闯入MSP430学习过程的问题,现总结整理出新手开始学习MSP430的一些问题,和学习中有关注意事项和方法. 供有心学习MSP430单片机的童鞋参考吧. 当然,闯入MSP430学习,你需要有一些单片机的理论基础,和比较强的C语言功底,学习MSP430单片机最好的方法是文武并进:“文”指学好片内模块的资源知识:“武”则指动手能能力.基础知识+动手实操,是

MSP432--TimerA (主要说明如何实现可调PWM)

---恢复内容开始--- 16位定时器 Timer_A 输出精密PWM 1.模式操作 Timer_A 支持     :多路捕获/比较 .PWM输出 . 定时        同时支持 :中断 Timer_A 特点: 异步16位具有四种模式的定时器/计数器               可选择.可配置的时钟资源               多达7个可配置的 捕获/比较 寄存器               具有配置PWM的功能               异步输入和输出自锁              

(原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)

1.Abstract     做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比0~99%范围内,二者均可调.抄下指标以后,回到实验室,细细分析以后,决定用MCU来实现一下,毕竟只分析,无实际结果也不是一个好的交代. 2.Content   2.1 理论分析     归根结底来说,是一个时序逻辑,即PWM输出波形是随着时间的推移而变化.用时序图的方式解释更明晰些. FIG2.1

基于tiny4412的Linux内核移植 -- PWM子系统学习(八)

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

CC1310生成PWM波

工作中因为时间紧迫,我不得不抛开TI提供的TI-RTOS.sdk和xdctools等工具,采用ucos + 库函数的方式去开发.最开始一头扎进去,碰见的就PWM的生成. PWM方面,TI自带封装好了PWM函数进行pwm的生成. 假如:我的需求是PWM的周期是2s,占空比50%,MCU主频是48MHz.于是我直接设置 params.periodUnits = PWM_PERIOD_US; params.periodValue = pwmPeriod; params.dutyUnits = PWM_

HAL之PWM

PWM是定时器的一个输出功能,要分配在有对应输出的管脚上.分频和定时值决定了周期,捕获寄存器的值就是占空比,当计数寄存器的值小于捕获值时输出固定电平(H),当大于时翻转电平,当计数器值溢出时将重载值载入,此时继续翻转电平. 一 在stm32cubeMX中线在有对应PWM输出的引脚设置PWM功能 二 在外设功能TIMx的对应通道上设置PWM模式 三在定时器配置时设置分频值,定时值,如果设置paulse则为固定pwm输出:或者这里不设置写一个设置函数,然后在while中不断修改paulse,则Pau

STM32定时器输出PWM频率和步进电机控制速度计算

1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线(2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知: 当APB1和APB

51单片机模拟PWM调制控制实验

-------------------------------------------- PWM(脉冲宽度调制) 对模拟信号电平进行数字编码的方法 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 设计要求: 由于AT89系列单片机没有PWM控制器,所以

51单片机PWM

由定时器产生PWM信号,可手动按键调节PWM的占空比,按键由外部中断实现 #include <reg51.h> #include <intrins.h> #define CYCLE 6000 //周期6000 * 1us = 6ms #define SCALE (CYCLE / 100) //比例 1% #define ONE 0x10 #define TWO 0x01 #define THREE 0x40 #define FOUR 0x04 typedef unsigned ch