|
#include "timer.h"
#include "led.h"
//修改說明
//V1.1 20160106
//新增TIM3_PWM_Init函數(shù),用于PWM輸出
//////////////////////////////////////////////////////////////////////////////////
TIM_HandleTypeDef TIM3_Handler; //定時器3PWM句柄
TIM_OC_InitTypeDef TIM3_CH4Handler; //定時器3通道4句柄
//TIM3 PWM部分初始化
//PWM輸出初始化
//arr:自動重裝值
//psc:時鐘預(yù)分頻數(shù)
void TIM3_PWM_Init(u16 arr,u16 psc)
{
TIM3_Handler.Instance=TIM3; //定時器3
TIM3_Handler.Init.Prescaler=psc; //定時器分頻
TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上計數(shù)模式
TIM3_Handler.Init.Period=arr; //自動重裝載值
TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&TIM3_Handler); //初始化PWM
TIM3_CH4Handler.OCMode=TIM_OCMODE_PWM1; //模式選擇PWM1
TIM3_CH4Handler.Pulse=arr/2; //設(shè)置比較值,此值用來確定占空比,默認(rèn)比較值為自動重裝載值的一半,即占空比為50%
TIM3_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW; //輸出比較極性為低
HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH4Handler,TIM_CHANNEL_4);//配置TIM3通道4
HAL_TIM_PWM_Start(&TIM3_Handler,TIM_CHANNEL_4);//開啟PWM通道4
}
int main(void)
{
u8 dir=1;
u16 led0pwmval=0;
HAL_Init(); //初始化HAL庫
Stm32_Clock_Init(360,25,2,8); //設(shè)置時鐘,180Mhz
delay_init(180); //初始化延時函數(shù)
uart_init(115200); //初始化USART
LED_Init(); //初始化LED
TIM3_PWM_Init(500-1,90-1); //90M/90=1M的計數(shù)頻率,自動重裝載為500,那么PWM頻率為1M/500=2kHZ
while(1)
{
delay_ms(10);
if(dir)led0pwmval++; //dir==1 led0pwmval遞增
else led0pwmval--; //dir==0 led0pwmval遞減
if(led0pwmval>300)dir=0; //led0pwmval到達(dá)300后,方向為遞減
if(led0pwmval==0)dir=1; //led0pwmval遞減到0后,方向改為遞增
TIM_SetTIM3Compare4(led0pwmval); //修改比較值,修改占空比
}
}
//定時器底層驅(qū)動,時鐘使能,引腳配置
//此函數(shù)會被HAL_TIM_PWM_Init()調(diào)用
//htim:定時器句柄
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM3_CLK_ENABLE(); //使能定時器3
__HAL_RCC_GPIOB_CLK_ENABLE(); //開啟GPIOB時鐘
GPIO_Initure.Pin=GPIO_PIN_1; //PB1
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //復(fù)用推挽輸出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
GPIO_Initure.Alternate= GPIO_AF2_TIM3; //PB1復(fù)用為TIM3_CH4
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}
//設(shè)置TIM通道4的占空比
//compare:比較值
void TIM_SetTIM3Compare4(u32 compare)
{
TIM3->CCR4=compare;
}
|
|