操作流程:
简单地缝合了一下代码。 难度:有手就行
参考:http://news.eeworld.com.cn/mcu/article_2016122732679.html
💡 按上述流程将代码封装进入一个函数PWM_init中,成功得到"pwm.h和pwm.c"。
💡 打开野火的示例代码库,将usart部分的"usart.h和usart.c"加入工程文件。
:idea:编写主函数,直接根据各函数的名称及变量调用即可。
#include "stm32f10x.h"
#include "pwm.h"
#include "bsp_usart.h"
void Delay( uint32_t count )
{
for(; count!=0; count--);
}
int main(void)
{
char deg;
uint32_t num = 500;
USART_Config();
PWM_init(9999,143); //频率为:72*10^6/(9999+1)/(143+1)=50Hz
TIM_SetCompare2(TIM3,500);
while(1){
printf("请输入一个N来确定角度Deg = N*20°\n");
deg = getchar();
if(deg != 'x')
{
switch(deg)
{
case '1':
{
num = 111;
break;
}
case '2':
{
num = 222;
break;
}
case '3':
{
num = 333;
break;
}
case '4':
{
num = 444;
break;
}
case '5':
{
num = 555;
break;
}
case '6':
{
num = 666;
break;
}
case '7':
{
num = 777;
break;
}
case '8':
{
num = 888;
break;
}
case '9':
{
num = 999;
break;
}
case '0':
{
num = 0;
break;
case '+':
{
num +=10;
break;
}
case'-':
{
num-=10;
break;
}
}
}
}else
{
uint32_t time;
time = getchar();
while(time--)
{
TIM_SetCompare2(TIM3,250);
Delay(0x4ffff);
TIM_SetCompare2(TIM3,1250);
Delay(0x4ffff);
}
}
TIM_SetCompare2(TIM3,250 + num); //TIM_SetCompare2(TIM3,X); 得到占空比为(X/100)%的pwm波形
}
}
PWM 配置的大致流程:
总用时:「2天」
工程下载: 舵机Demo.zip