打印

PWM输出程序问题

[复制链接]
3050|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinxing619|  楼主 | 2011-5-19 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下程序是要实现LED以一秒闪烁,但是调试后一直是亮的。。。找了很久,但还是不知错误在哪,请高手指点。。。用TIM3做PWM输出,
void main()
{
   Init();
while(1);
}
/***************init**********************/
void Init()
{
RCC_Config();
GPIO_Config();
TIM_Config();
PWM_Config();
}
/***************RCC config*****************/
void RCC_Config()
{
RCC_DeInit(); //RCC reset
RCC_HSEConfig(RCC_HSE_ON); //HSE she zhi
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //config HSE
if (SUCCESS == HSEStartUpStatus) //wait for qi zheng
{
  FLASH_SetLatency(FLASH_Latency_2); //set FLASH
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1 , RCC_PLLMul_9);  //set PLL
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //set SYSCLK source
  RCC_HCLKConfig(RCC_SYSCLK_Div1); //set HCLK = SYSCLK
  RCC_PCLK1Config(RCC_HCLK_Div2);  //set PCLK1 = HCLK/2
  RCC_PCLK2Config(RCC_HCLK_Div1);  //set PCLK2 = HCLK
  RCC_PLLCmd(ENABLE);  //shi neng PLL   
}
}
/*************************time config*********************/
void TIM_Config()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
TIM_DeInit(TIM3);
TIM_InternalClockConfig(TIM3); //设置为内部时钟
TIM_TimeBaseInitStructure.TIM_Period = 4000;
TIM_TimeBaseInitStructure.TIM_Prescaler = 0; //预分频后为2KHz
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数
TIM_TimeBaseInit(TIM2 , &TIM_TimeBaseInitStructure);
// TIM_SetCounter(TIM2 , 1000);
// TIM_CounterModeConfig(TIM3 , TIM_CounterMode_Up); //向上计数
// TIM_SetAutoreload(TIM2 , 4000);  //自动重装载值
TIM_PrescalerConfig(TIM2 , (36000 -1) ,TIM_PSCReloadMode_Immediate); //PSC值为0以及方式设置为直接装载
TIM_ARRPreloadConfig(TIM2 , DISABLE);  //使用预装载 在更新事件发生时装载,若不使能,则为直接装载
// TIM_Cmd(TIM3 , ENABLE);  //开启定时器2

}
void PWM_Config()
{
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; //输出模式
TIM_OCInitStructure.TIM_Channel = TIM_Channel_1; //输出通道选择
TIM_OCInitStructure.TIM_Pulse = 2000; //设置占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //设置输出极性
TIM_OCInit(TIM3 , &TIM_OCInitStructure);
TIM_Cmd(TIM3 , ENABLE);
}
/****************GPIO config**************/
void GPIO_Config()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO , ENABLE);
/********GPIOC  Init***********************************/
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3 , ENABLE); //将TIM3设置为完全复用
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //C jiao tuiwan shuchu
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOC , &GPIO_InitStructure);
}
沙发
jisyu_cy| | 2011-5-19 20:46 | 只看该作者
没这复杂吧,它就通过占空比的调节,让电路在周期内一开一关,就完事了,

使用特权

评论回复
板凳
jisyu_cy| | 2011-5-19 20:48 | 只看该作者
当然,这只是脉宽调制的一种方式——改变电压,

使用特权

评论回复
地板
jinxing619|  楼主 | 2011-5-19 20:58 | 只看该作者
恩,,可以帮我看下是哪里的问题吗,谢啦

使用特权

评论回复
5
jinxing619|  楼主 | 2011-5-19 21:21 | 只看该作者
解决了,,谢谢啦!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

38

帖子

1

粉丝