新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2020-7-22
- 在线时间
- 12 小时
|
1金钱
看了原子哥pwm的视频后,就也想写一个pwm程序。看到开发指南里说频率低于50赫兹就会有肉眼可见的闪烁。于是我就想用pwm输出一个低频率的波,看看闪烁现象。然后我就用Template模板写了一个程序,但LED怎么都不闪。我很苦恼,于是把这个程序复制到了pwm源码模板里,把相应的函数名更改对应好后,LED竟然开始闪了。我代码一点都没没变,是完完全全复制过去的,但Template模板里不行,pwm模板里就可以。而且两个模板的导入速度有明显的区别,但明明里面的程序是一样的。为什么会出现这种情况呢?我怎么都想不通,恳请各位大佬帮忙看看。复制过去的所有程序如下:
main.c:
#include "TIMER.h"
#include "led.h"
#include "delay.h"
#include "sys.h"
int main()
{
delay_init();
LED_init();
timer_init(4999,7999);
TIM_SetCompare2(TIM3,1000);
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TIMER.c:
#include "TIMER.h"
void timer_init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC2Init(TIM3,&TIM_OCInitStruct);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_Cmd(TIM3,ENABLE);
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
led.c:
#include "led.h"
void LED_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruct);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TIMER.h:
#ifndef __timer_h
#define __timer_h
#include "sys.h"
void timer_init(u16 arr,u16 psc);
#endif
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
led.h:
#ifndef __led_h
#define __led_h
#include "sys.h"
#define LED1 PEout(5)
#define LED0 PBout(5)
void LED_init(void);
#endif
|
|