你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F051C8T6驱使一个灯的慢慢变亮再变暗。

[复制链接]
小石台 提问时间:2016-3-14 22:55 /
            我想用这个芯片来使一个灯慢慢的变亮,之后又慢慢的变暗。
但是我的写的程序,灯亮着,但是一直没有变化,希望大家能帮我找一下原因。
谢谢
下面是我的主程序,还有timer.c程序。
#include "timer.h"
#include "stm32f0xx.h"
#include "sys.h"

void TIM16_PWM_Init(uint16_t arr,uint16_t psc)
{
GPIO_InitTypeDef  GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM16,ENABLE);//使能定时器16时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_Level_2;
GPIO_Init(GPIOB,&GPIO_InitStructure);


GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_2);//映射外设端口

//初始化定时器

TIM_TimeBaseInitStructure.TIM_ClockDivision=0;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period=arr;
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
TIM_TimeBaseInit(TIM16,&TIM_TimeBaseInitStructure);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC1Init(TIM16,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM16,TIM_OCPreload_Enable);

TIM_Cmd(TIM16,ENABLE);
}


#include "stm32f0xx.h"
#include "timer.h"
void  Delay (uint32_t nCount);
int main(void)
{
uint16_t ledpwmval=0;
uint8_t dir=1;
SystemInit();
SysTick_Config(3000);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
TIM16_PWM_Init(299,0);
while(1)
{
  //Delay(10);
  if(dir)
   ledpwmval++;
  else
   ledpwmval--;
  if(ledpwmval>100)dir=0;
  if(ledpwmval==0)dir=1;
  TIM_SetCompare1(TIM16,ledpwmval);
  }
}
void  Delay (uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}




收藏 评论5 发布时间:2016-3-14 22:55

举报

5个回答
xmshao 回答时间:2016-3-15 08:05:52
先保证你的TIMER正常工作了,看看PWM出来没有。

再就是确认下   TIM_SetCompare1(TIM16,ledpwmval); 函数启作用没有,在里面修改CCR吧。
小石台 回答时间:2016-3-15 08:38:53
xmshao 发表于 2016-3-15 08:05
先保证你的TIMER正常工作了,看看PWM出来没有。

再就是确认下   TIM_SetCompare1(TIM16,ledpwmval); 函数 ...

我用示波器测了,没有波形。
这个是F0系列的芯片,配置跟其他有一些不一样。
xmshao 回答时间:2016-3-15 11:07:53
差不多的。
GPIO时钟即复用配置
TIMER时钟
PWM的ARR,CCR,OC模式等。

感觉你在TIM_SetCompare1(TIM16,ledpwmval);调整CCR。

你先给他个合适的CCR,跑起来看到脉冲再说。
木易-357428 回答时间:2016-3-15 17:41:20
Delay(10);
这个不要注销啊,注销了,PWM频率变的太快,你是看不出效果的。这个延时控制在20ms左右,应该就能看到慢慢变灭再变亮的过程。
中山无雪 回答时间:2018-2-7 13:43:48
先要保证有波形输出,再在灯的电源前面加个大点的电容(再串个电感更好),通过改变脉冲的宽度实现降压,当脉冲宽度较大时电压高、减小时电压低,就实现了呼吸灯

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版