总结:选SMCLK(可以测出来)
         若选ACLK,经示波器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的更多相关文章

  1. MSP430G2553 TimerA中断说明

    一.TimerA中断向量. G2553一共有2个TimerA,分别是TimerA0和TimerA1,中断入口地址分别是: TimerA0中断向量名称     <--> 中断源 ------ ...

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

    1.Abstract     做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比 ...

  3. MSP430:定时器学习TimerA

    4. 定时器TA 一.时钟源1.时钟源:ACLK/SMCLK 外部TACLK/INCLK2.分频:1/2/4/8 当 (注:TACLR 置位时,分频器复位) 二.计数模式通过设置MCx可以设置定时器的 ...

  4. STM32之PWM君

    PWM..英语好的人估计又知道这三个大写字母代表哪三个英语单词了.小弟不才,就说中文意思好了:脉冲宽度调制,玩过飞思卡尔的人估计对PWM非常的不陌生吧.电机驱动需要PWM,控制舵机的转向需要PWM,总 ...

  5. [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM

    一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...

  6. Windows on Device 项目实践 1 - PWM调光灯制作

    在前一篇文章<Wintel物联网平台-Windows IoT新手入门指南>中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演 ...

  7. 用Arduino剖析PWM脉宽调制

    PWM(Pulse Width Modulation)简介 PWM,也就是脉冲宽度调制,用于将一段信号编码为脉冲信号,也就是方波信号.多用于在数字电路中驱动负载随时间变化的电子元件,如LED,电机等. ...

  8. Arduino学习经验(一)之解决舵机库和pwm输出冲突

    一.前言 最近在公司学习Arduino uno ,用它实现小车超声波避障功能.实现的功能很简单,就是在小车前方挂一个超声波模块,当碰到障碍物时,会通过舵机进行摆头,判断两边的距离,进行左右转弯.但是碰 ...

  9. stm8s103 PWM

    stm8s103 PWM的设置不难,但是很多人不注意选项字节这个问题,PWM是IO口的第二功能,要用ST Visual Programmer 修改选项字节. 只需要修改AFR0的功能就可以了

随机推荐

  1. PostgreSQL 8.1 中文文档(转)

    PostgreSQL 8.1 中文文档(转) http://www.php100.com/manual/PostgreSQL8/ 或者点击下面链接 PostgreSQL 8.1 中文文档

  2. python linux 磁盘操作

    #coding:utf-8 ''' __author__ = 'similarface' connection:841196883@qq.com 磁盘操作 ''' import psutil impo ...

  3. css读书笔记1:HTML标记和文档结构

    块级元素和行内元素:块级元素:上下堆叠,每个块级元素都独立占一行.块级元素的盒子宽度与父元素同宽.行内元素:左右堆叠,只有在空间不足的情况下才会折到下一行显示.行内元素的盒子会收缩包裹其内容,并尽可能 ...

  4. NOIP 2014 普及组 T4 子矩阵

    [题意] 已知:n,m,r,c,a[i][j] (1 ≤ n ≤ 16, 1 ≤ m ≤ 16,1 ≤ a[i][j] ≤1000,1 ≤ r ≤ n, 1 ≤ c ≤ m) 条件:矩阵的分值定义为每 ...

  5. SSM-配置文件标签随笔-概要

    xmlns: xmlns是web.xml文件用到的命名空间xmlns:xsi是指web.xml遵守xml规范xsi:schemaLocation是指具体用到的schema资源

  6. jQuery clone()方法绑定事件

    先看如下代码: (function ($) { var div = $("<div></div>").css({width: "100px&quo ...

  7. media query ie8- 兼容实现总结

    虽然说响应式设计的理想状态是,需对pc/移动各种终端进行响应:但是现实是高分辨率的pc端与手机终端屏幕相差太大,像电商这样有大量图片和文字信息的同时排版要求精准的页面,设计一个同时适应高分辨率pc又适 ...

  8. robotframework笔记7

    内部资源 *** Settings *** Library BuiltIn 外部资源 *** Settings *** Library com.mycompany.myproject.MyLib WI ...

  9. [mondrian] 分析一个简单的schema文件

    <?xml version="1.0" encoding="UTF-8"?> <Schema name="Mondrian" ...

  10. JavaScript实现冒泡排序

    思想:从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置.n个数, ...