初级会员

- 积分
- 186
- 金钱
- 186
- 注册时间
- 2015-1-22
- 在线时间
- 57 小时
|
10金钱
在裸机上TIM3_CH3上能产生PWM,移植到UCOSII上怎么就产生不了,是不是UCOSII上还需配置什么其他细节的地方,请坛内各位大神指点,以下是UCOSII的PWM代码。
任务内设置PWM输出的函数,目前仅删除剩下这个任务。
void showdata_task(void *pdata)
{
while(1)
{
if(dir == 1 )
pwmval1 = pwmval1 + 10;
if(dir == 0 )
pwmval1 = pwmval1 - 10;
if(pwmval1>2000)
dir=0;
if(pwmval1 ==0 )
dir=1;
TIM_SetCompare3(TIM3,pwmval1);
OSTimeDlyHMSM(0,0,0,10);
}
}
PWM的初始化函数。
void steering_init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; //TIM3的3通道
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period =9999; //自动重载周期值
TIM_TimeBaseStructure.TIM_Prescaler =143; //预分频值 ,这里是50HZ
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数摸式为向上计数
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
//设定占空比
TIM_OCStructInit(& TIM_OCInitStructure); //恢复初始
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //定时器模式为pwm模式1
TIM_OCInitStructure.TIM_Pulse =0; //脉冲值,即输出都是低电平
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //极性为高
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //将配置数据写入TIM3的通道1
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //预装载使能
TIM_Cmd(TIM3, ENABLE);
TIM_CtrlPWMOutputs(TIM3, ENABLE); //使能PWM模式
}
|
|