新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2019-6-9
- 在线时间
- 6 小时
|
1金钱
本实验使用 PB1/TIM3_CH4作为PWM的输出引脚*/
/* TIMx:定时器。arr:自动装载值。prescale:预分频值。pulse比较值,写CCRx*/
void Init_PWM(TIM_TypeDef *TIMx, uint16_t arr, uint16_t prescale)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_Structure;
TIM_OCInitTypeDef TIM_OCInitStruct;
if(TIMx == TIM3){
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
/*将 PB1 定义为TIM3_CH4的输出通道*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
/*定时器3初始化*/
TIM_Structure.TIM_Period = arr-1;//自动装载值
TIM_Structure.TIM_Prescaler = prescale-1;//分频值
TIM_Structure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频因子
TIM_Structure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIMx, &TIM_Structure);//定时器初始化
/*初始化TIM3 Channel4 PWM模式*/
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2; //PEM模式2,CNT>CCR时输出高电平
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse = arr/2-1;
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性高
TIM_OC4Init(TIMx, &TIM_OCInitStruct);
/*使能输出比较预装载*/
TIM_OC4PreloadConfig(TIMx, TIM_OCPreload_Enable);
/*允许或禁止在定时器工作时向ARR的缓冲器中写入新值,以便在更新事件发生时载入覆盖以前的值。*/
TIM_ARRPreloadConfig(TIMx, ENABLE);
/* 使能定时器的输出*/
TIM_CtrlPWMOutputs(TIMx, ENABLE);
/*使能定时器 */
TIM_Cmd(TIMx, ENABLE);
}
int main(void)
{
Init_PWM(TIM3,36000,1);
while (1)
{
TIM_SetCompare4(TIM3,36000/4);
}
}
为什么输出的波形仿真图低电平的时间占3/4,高电平的时间占1/4,是反的呢?
不是应该占空比3/4吗?
|
-
|