This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

3200产生pwm

Other Parts Discussed in Thread: CC3200

你好,我使用下面的代码产生38kHz的pwm 发现每3个下降沿就会有一个低于38kHz的脉冲存在,

#define TIMER_INTERVAL_RELOAD   2105 
#define DUTYCYCLE_GRANULARITY   1052
    while(1)
    {
            MAP_UtilsDelay(8000);
            MAP_TimerDisable(TIMERA2_BASE,TIMER_B);
        	MAP_UtilsDelay(80000);

            MAP_TimerLoadSet(TIMERA2_BASE,TIMER_B,TIMER_INTERVAL_RELOAD);/*TIMER_INTERVAL_RELOAD = 80Mhz/38khz = 2105*/
            MAP_TimerMatchSet(TIMERA2_BASE,TIMER_B,DUTYCYCLE_GRANULARITY);/*DUTYCYCLE_GRANULARITY = 1052   占空比50%*/

            MAP_TimerEnable(TIMERA2_BASE,TIMER_B);
    }

下面是我用逻辑分析仪得到的结果:每3组下降沿就会有一个不是38Khz的脉冲存在,请问是我的程序有什么问题吗?

  • 1、参考TI的\examples\CC32xx_PWM的例子进行验证PWM的配置,关于PWM例程中需要注意的几点我列在下面,在你的程序中会不会有CC3200进入低功耗模式的情况?

    2、在PWM的例子中需要注意以下几点:

    SetupTimerPWMMode()函数中

    MAP_TimerControlLevel(ulBase,ulTimer,ucInvert);

    //输出高低电平 1=ture-低电平 0=False-高电平
    //当LoadSet=MatchSet值时,PWM输出的电平是高电平还是低电平
    // 1=ture-低电平 当LoadSet≥MatchSet 时PWM输出低电平 ---Green/Yellow LED
    // 当LoadSet<MatchSet 是PWM输出高电平
    // 0=False-高电平
    // 当LoadSet≥MatchSet 时PWM输出高电平 ---RED LED
    // 当LoadSet<MatchSet 是PWM输出低电平

    // 修改自己的PWM引脚可以通过以下步骤-(1)先用PinMux-PWM -->PIN_02 for TimerPWM7 GT_PWM07
    // (2)通过PWM_OUT7--在TRM中Table 9-1. Available CCP Pins and PWM Outputs/Signals Pins 找到对应的定时器 --- Timer3->Timer B
    // (3)配置TIMERA3_BASE TIMER_B TIMER_CFG_SPLIT_PAIR/TIMER_CFG_B_PWM 及默认PWM输出电平 ---测试OK
    // 注意:如果PWM_OUT6和PWM_OUT7同时使用的话必须在在最后一个TIMER_B配置中打开TIMER_CFG_A_PWM配置,否则会将TIMER_A的配置清除!
    // TIMER_CFG_A_PWM 0x0000000A
    // TIMER_CFG_B_PWM 0x00000A00 ---最终的配置如下:
    // HWREG(ulBase + TIMER_O_TAMR) = ulConfig & 255; //取低八位
    // HWREG(ulBase + TIMER_O_TBMR) = (ulConfig >> 8) & 255; //取低八位的前八位 ---可以加个判断来避免这个问题
    SetupTimerPWMMode(TIMERA3_BASE, TIMER_B, (TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PWM | TIMER_CFG_B_PWM), 1); //保留低八位数据 并配置--TIMER_B --测试OK

    在PWM程序中并未使用分频功能,如果使用分频功能注意
    // 设置分频,记得一定要修改这个寄存器,这个寄存器包含了比较值的高 8bit,请记住 CC3200 的 PWM 的计数器其实 24bit的。不是 16bit 的。
    // 下面给出修改这个寄存器的库函数
    // TimerPrescaleMatchSet(ulBase,ulTimer,n);