-
来学习,谢谢楼主分享
-
是来学习的,哈哈
-
新手来学习,求教了
-
谢谢大哥,由于原来的电路无法调速,需要重新设计进行调速,我正在研究原来的电路遇到了这个问题,谢谢大哥指点
-
很需要谢谢,学习了
-
不好意思,上面的程序还有点小问void IO_config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void TIM_config(void)
{
TIM_TimeBaseInitTypeDef timInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
timInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 使用系统基础时钟
timInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
timInitStruct.TIM_RepetitionCounter = 0;
timInitStruct.TIM_Prescaler = 71; // 不再对时钟预分频了 Prescaler 给了psc
timInitStruct.TIM_Period = 999; // 用计数器来控制通道的输出频率 PERIOD 的值给了ARR
TIM_TimeBaseInit(TIM3, &timInitStruct); //基本初始化 //??????????????????????????????
}
void PWM_config(void)
{
TIM_OCInitTypeDef timOCInitStructure;
timOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 输出模式
timOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
timOCInitStructure.TIM_Pulse = 500; // 占空比参数
timOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &timOCInitStructure);
// TIM_CtrlPWMOutputs(TIM1,ENABLE);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);
}
int main(void)
{
// GPIOA->CRL&=0X0FFFFFFF;//PA7输出
//GPIOA->CRL|=0XB0000000;//复用功能输出
//SystemInit();
IO_config();
TIM_config();
PWM_config();
//TIM_ARRPreloadConfig(TIM3, ENABLE); // 这个记得要开
TIM_Cmd(TIM3, ENABLE);
// while(1);
}题,重新贴一下程序吧
-
经过摸索问题已解决,下面配上修正后的例子吧,希望跟我一样的新手有个参照。
void IO_config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void TIM_config(void)
{
TIM_TimeBaseInitTypeDef timInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
timInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 使用系统基础时钟
timInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
timInitStruct.TIM_RepetitionCounter = 0;
timInitStruct.TIM_Prescaler = 71; // 不再对时钟预分频了
timInitStruct.TIM_Period = 999; // 用计数器来控制通道的输出频率
//TIM_TimeBaseInit(TIM3, &timInitStruct); //基本初始化 //??????????????????????????????
}
void PWM_config(void)
{
TIM_OCInitTypeDef timOCInitStructure;
timOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 输出模式
timOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
timOCInitStructure.TIM_Pulse = 30000; // 占空比参数
timOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &timOCInitStructure);
// TIM_CtrlPWMOutputs(TIM1,ENABLE);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);
}
int main(void)
{
// GPIOA->CRL&=0X0FFFFFFF;//PA7输出
//GPIOA->CRL|=0XB0000000;//复用功能输出
//SystemInit();
IO_config();
TIM_config();
PWM_config();
//TIM_ARRPreloadConfig(TIM3, ENABLE); // 这个记得要开
TIM_Cmd(TIM3, ENABLE);
// while(1);