|
|
main.c
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
int main(void)
{
u16 led0pwmval=0;
delay_init();
TIM1_PWM_Init(1499,999);
while(1)
{
led0pwmval=37;
TIM_SetCompare1(TIM1,led0pwmval);
delay_ms(1000);
delay_ms(10000);
led0pwmval=160;
TIM_SetCompare1(TIM1,led0pwmval);
delay_ms(10000);
}
}
--------------------------------------------------------------
pwm.h
#ifndef __PWM_H
#define __PWM_H
#include "sys.h"
void TIM1_PWM_Init(u16 arr,u16 psc);
#endif
---------------------------------------------------------------
pwm.c
#include "pwm.h"
#include "led.h"
#include "delay.h"
void TIM1_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//使能定時器時鐘1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIO外設
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //io口速度50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據參數初始化GPIOA.8
//定時器1初始化
TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置作為時鐘頻率除數的分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據指定的參數初始化TIM
//初始化輸出比較參數
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse = 200;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC1Init(TIM1,&TIM_OCInitStruct);
TIM_CtrlPWMOutputs(TIM1,ENABLE); //主輸出使能
//使能輸出比較預裝載值
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1, ENABLE);
//使能定時器
TIM_Cmd(TIM1,ENABLE);
}
|
-
-
stm32舵機.docx
2019-10-28 20:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
2.28 KB, 下載次數: 28, 下載積分: 黑幣 -5
舵機
|