新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2021-8-3
- 在线时间
- 3 小时
|
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
TIM_HandleTypeDef TIM3_PWM_handler;
TIM_OC_InitTypeDef TIM3_OC_init;
void TIM3_PWM_Init(void)
{
TIM3_PWM_handler.Instance=TIM3;
TIM3_PWM_handler.Init.Prescaler=90-1;
TIM3_PWM_handler.Init.CounterMode=TIM_COUNTERMODE_UP;
TIM3_PWM_handler.Init.Period=500-1; //周期
TIM3_OC_init.OCMode=TIM_OCMODE_PWM1;
TIM3_OC_init.Pulse=250; //占空比
TIM3_OC_init.OCPolarity=TIM_OCPOLARITY_LOW;
HAL_TIM_PWM_Init(&TIM3_PWM_handler);
HAL_TIM_PWM_ConfigChannel(&TIM3_PWM_handler,&TIM3_OC_init,TIM_CHANNEL_4);
HAL_TIM_PWM_Start(&TIM3_PWM_handler,TIM_CHANNEL_4); //使能定时器,通道
}
void SETTIM3compare4(u32 compare)
{
TIM3->CCR4=compare;
}
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) //回调函数
{
if(htim->Instance==TIM3)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM3_CLK_ENABLE(); //使能定时器时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB时钟
GPIO_Initure.Pin=GPIO_PIN_1; //PB1
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速
GPIO_Initure.Alternate= GPIO_AF2_TIM3; //复用为TIM3
HAL_GPIO_Init(GPIOB,&GPIO_Initure); //初始化PB1
}
}
int main(void)
{
u8 dir=1;
u16 ledpwmvalue=0;
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
delay_init(180); //初始化延时函数
uart_init(115200); //初始化USART
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
TIM3_PWM_Init();
while(1)
{
if(dir)ledpwmvalue++;
else ledpwmvalue--;
if(ledpwmvalue>300)dir=0; //改变方向
if(ledpwmvalue==0)dir=1;
SETTIM3compare4(ledpwmvalue);
}
}
为啥这代码没有实现led0由暗到亮再到暗的功能啊 一直是常亮的
|
|