CC2541的P2_0输入为0的时候,休眠唤醒后手机链接CC2541成功后PWM控制的电机会转一下。哪里会影响PWM啊?PWM代码如下:
不管将P2_0设置为下降沿触发中断还是不初始化,只要拉倒0就会影响PWM,其他IO没发现这种情况
#include <ioCC2540.h>
#include "PWM.h"
/*********************宏定义************************/
#ifndef BV
#define BV(n) (1 << (n))
#endif
/*********************内部变量************************/
static U8 sPWM_P10 = 0; //P10
static U8 sPWM_P11 = 0; //P11
//******************************************************************************
//name: PWM_Init
//introduce: PWM 的初始化
//parameter: none
//return: none
//author://email://changetime: 2018.03.15
//******************************************************************************
void PWM_Init(void)
{
P1DIR |= BV(0)|BV(1); //P11 和 P10 定义为输出
P1SEL |= BV(0)|BV(1); //将 P11 和 P10 设置为外设功能;
T4CTL = 0x80; //16 分频(8K)、关 timer、自由运行模式
T4CC0 = 255 – sPWM_P10; //P10 的初始化值, warm
T4CC1 = 255 – sPWM_P11; //P11 的初始化值, cold
T4CCTL0 = 0x2C; //00 101 100 无中断、 Clear output on compare, set on 0x00、比较模式、 No Capture
T4CCTL1 = 0x2C; //00 101 100 无中断、 Clear output on compare, set on 0x00、 比较模式、 No Capture
T4CTL |= BV(4); //开始定时器
}
//******************************************************************************
//name: PWM_SetLed
//introduce: PWM 的两通道值设置
//parameter: nPWM_P10: p10 的 pwm 值
// nPWM_P11: p11 的 pwm 值
//return: none
//author://email://changetime: 2018.03.15
//******************************************************************************
void PWM_SetLed(U8 nPWM_P10, U8 nPWM_P11)
{
sPWM_P10 = nPWM_P10;
sPWM_P11 = nPWM_P11;
}
//******************************************************************************
//name: PWM_GetLed
//introduce: PWM 的两通道值读取
//parameter: nPWM_P10: p10 的 pwm 值
// nPWM_P11: p11 的 pwm 值
//return: none
//author: 甜
//email: 8
//changetime: 2018.03.15
//******************************************************************************
void PWM_GetLed(U8 *nPWM_P10, U8 *nPWM_P11)
{
*nPWM_P10 = sPWM_P10;
*nPWM_P11 = sPWM_P11;
}
//******************************************************************************
//name: PWM_ControlData_Deal
//introduce: 将占空比的数据与电机控制情况,转换成 p10、 p11 的 pwm 数
//parameter: nPWM_P10: p10 的 pwm 值
// nPWM_P11: p11 的 pwm 值
// nDuty_Cycle:占空比
// nMotor_Status:停止、正转、反转
//return: none
//author://email://changetime: 2018.03.15
//******************************************************************************
void PWM_ControlData_Deal(U8 *nPWM_P10, U8 *nPWM_P11, U8 nMotor_Duty_Cycle, U8 nMotor_Status)
{
switch(nMotor_Status)
{
case sMotor_Status_OFF:
*nPWM_P10 = 0;
*nPWM_P11 = 0;
break;
case sMotor_Status_POSITIVE:
*nPWM_P10 = (U8)(0xFF*nMotor_Duty_Cycle*0.01);
*nPWM_P11 = 0;
break;
case sMotor_Status_negative:
*nPWM_P10 = 0;
*nPWM_P11 = (U8)(0xFF*nMotor_Duty_Cycle*0.01);
break;
default:
*nPWM_P10 = 0;
*nPWM_P11 = 0;
break;
}
}
//******************************************************************************
//name: PWM_Pulse
//introduce: PWM 的值更新
//parameter: none
//return: none
//author://email://changetime: 2018.03.15
//******************************************************************************
void PWM_Pulse(void)
{
// Set up the timer registers
T4CC0 = 255 – sPWM_P10; //P10 的初始化值, warm
T4CC1 = 255 – sPWM_P11; //P11 的初始化值, cold
// Reset timer
T4CTL &= ~BV(2);
// start timer
T4CTL |= BV(4);
}
Susan Yang:
您的代码部分并未有什么问题。请问您的P2_0是如何配置的呢?电路部分P2_0又是如何连接的呢?
YiKai Chen:
有沒有用示波器看一下休眠唤醒后手机链接CC2541時看一下P2.0的波形呢?
TI中文支持网


