最终实现结果:STM32F103发出PWM信号控制舵机SG90进行180°转向
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ff75528e8f159f2ea5edec102a8e8908.gif)
接线图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/71f71164a7b1bb4644afc7e78b975e45.png)
#include "stm32f10x.h"
void delay_us(uint32_t n){
while(n--){
SysTick->CTRL = 0;
SysTick->LOAD = 9;
SysTick->VAL = 0;
SysTick->CTRL = 1;
while((SysTick->CTRL & (1<<16)) == 0);
}
SysTick->CTRL = 0;
}
void delay_ms(uint32_t n){
while(n--){
SysTick->CTRL = 0;
SysTick->LOAD = 9000;
SysTick->VAL = 0;
SysTick->CTRL = 1;
while((SysTick->CTRL & (1<<16)) == 0);
}
SysTick->CTRL = 0;
}
void TIM3_PWM_Init(uint16_t arr,uint16_t psc,uint16_t time_Pulse){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler = psc;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_Pulse = time_Pulse;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_Cmd(TIM3, ENABLE);
}
void GPIO_init_B(void){
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
int main(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_CtrlPWMOutputs(TIM3,ENABLE);
GPIO_init_B();
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
TIM3_PWM_Init(200 - 1, 7200 - 1, 0);
while(1)
{
TIM_SetCompare2(TIM3, 5);
delay_ms(100);
TIM_SetCompare2(TIM3, 10);
delay_ms(100);
TIM_SetCompare2(TIM3, 15);
delay_ms(100);
TIM_SetCompare2(TIM3, 20);
delay_ms(100);
TIM_SetCompare2(TIM3, 25);
delay_ms(100);
TIM_SetCompare2(TIM3, 20);
delay_ms(100);
TIM_SetCompare2(TIM3, 15);
delay_ms(100);
TIM_SetCompare2(TIM3, 10);
delay_ms(100);
}
}