OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2142|回复: 7

第一次配置PWM,LED根本没变化

[复制链接]

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-12-13
在线时间
15 小时
发表于 2018-12-13 14:58:33 | 显示全部楼层 |阅读模式
1金钱
用#IF不编译其他初始化外设的函数,但是下载了还是变化。(板子STM32F103ZET6)
自己写了一边不行,复制粘贴过来还是不行。





void RCC_Config(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
  {
   RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK)为系统时钟
   RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(APB2)为HCLK时钟
   
   
   RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(APB1)为HCLK的2分频
   //(TIM2-TIM5输入TIMxCLK频率将为72MHZ/2x2=72MHZ输入)
   
   FLASH_SetLatency(FLASH_Latency_2);//设置FLASH代码延时
   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能预取指缓存
   RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz
   RCC_PLLCmd(ENABLE);//使能PLL
   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//等待PLL准备就绪
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置PLL为系统时钟源
   while(RCC_GetSYSCLKSource()!=0x08);//判断PLL是否是系统时钟   
  }
}
/*-----------------------
Function name:TIM3_Init
Description:定时器3配置(PWM输出)
Input:None
Output:None
Return:None
-----------------------*/
void TIM3_PWM_Init(u16 arr,u16 psc)
{
    GPIO_InitTypeDef     GPIO_InitStrue;
    TIM_OCInitTypeDef     TIM_OCInitStrue;
    TIM_TimeBaseInitTypeDef     TIM_TimeBaseInitStrue;
   
   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3和相关GPIO时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 使能GPIOB时钟(LED在BP5引脚),使能AFIO时钟(定时器3通道2需要重映射到BP5引脚)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
   
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5;     // TIM_CH2
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;    // 复用推挽
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;    //设置最大输出速度
    GPIO_Init(GPIOB,&GPIO_InitStrue);                //GPIO端口初始化设置
   
    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
   
    TIM_TimeBaseInitStrue.TIM_Period=arr;    //设置自动重装载值
    TIM_TimeBaseInitStrue.TIM_Prescaler=psc;        //预分频系数
    TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up;    //计数器向上溢出
    TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1;        //时钟的分频因子,起到了一点点的延时作用,一般设为TIM_CKD_DIV1
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue);        //TIM3初始化设置(设置PWM的周期)
   
    TIM_OCInitStrue.TIM_OCMode=TIM_OCMode_PWM2;        // PWM模式2:CNT>CCR时输出有效
    TIM_OCInitStrue.TIM_OCPolarity=TIM_OCPolarity_High;// 设置极性-有效为高电平
    TIM_OCInitStrue.TIM_OutputState=TIM_OutputState_Enable;// 输出使能
    TIM_OC2Init(TIM3,&TIM_OCInitStrue);        //TIM3的通道2PWM 模式设置
    TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);        //使能预装载寄存器
   
    TIM_Cmd(TIM3,ENABLE);        //使能TIM3
}


这里是主函数的:
int main(void)
{
   u8 i=1;         // 设置方向 0:变暗 1:变亮
  u16 led0pwmval;        // 设置CCR值
  RCC_Config();//系统时钟:

   TIM3_PWM_Init(899,0);
  while(1)
  {
   if(i)led0pwmval++;        // 由暗变亮
     else led0pwmval--;        // 由亮变暗
     if(led0pwmval==0)i=1;        // 已达到最亮,开始变暗
     if(led0pwmval>100)i=0;    // 已达到最暗,开始变亮
     TIM_SetCompare2(TIM3,led0pwmval);        //改变比较值TIM3->CCR2达到调节占空比的效果
  }
}


最佳答案

查看完整内容[请看2#楼]

1.循环里加延时,2。PWM值最高就到100,太低了,现象不明显
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
发表于 2018-12-13 14:58:34 | 显示全部楼层
1.循环里加延时,2。PWM值最高就到100,太低了,现象不明显
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-12-14 02:37:25 | 显示全部楼层
参考我们例程,继续努力
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-12-14 02:37:37 | 显示全部楼层
while里面加delay
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-12-14 02:37:39 | 显示全部楼层
while里面加delay
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-12-13
在线时间
15 小时
 楼主| 发表于 2018-12-14 11:47:54 | 显示全部楼层
多谢大佬
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2018-12-13
在线时间
15 小时
 楼主| 发表于 2018-12-14 12:03:32 | 显示全部楼层
宫本无三四 发表于 2018-12-14 09:20
1.循环里加延时,2。PWM值最高就到100,太低了,现象不明显

请问这个延时的作用是什么呢?
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
发表于 2018-12-14 13:29:03 | 显示全部楼层
jiajiabusy 发表于 2018-12-14 12:03
请问这个延时的作用是什么呢?

PWM值改变的间隔,就是led明暗变化的速度
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 13:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表