良心分享:STM32F103C8T6驱动16路舵机

一、所需硬件:

01、STM32F103C8T6最小系统板。
02、ST-LINK V2下载器。
03、CH340。
04、16个SG90舵机。
05、杜邦线。
06、STM32F103C8T6舵机驱动板(有的话接线方便,没有亦可)。

二、所需软件:

01、MDK5。
02、串口调试助手XCOM。

三、配套代码:(已免费分享,在文章顶部即可下载)

01、四个按键触发16路舵机进行偏转:

/********************************************************************************************************************************************
2022.07.30    基础知识储备:
							TIM1_ETR     PA12            
							TIM1_CH1     PA8            TIM2_CH1_ETR PA0            TIM3_CH1     PA6            TIM4_CH1     PB6 
							TIM1_CH2     PA9            TIM2_CH2     PA1            TIM3_CH2     PA7            TIM4_CH2     PB7
							TIM1_CH3     PA10           TIM2_CH3     PA2            TIM3_CH3     PB0            TIM4_CH3     PB8 
							TIM1_CH4     PA11           TIM2_CH4     PA3            TIM3_CH4     PB1            TIM4_CH4     PB9  
							
		 SG90舵机控制方法:
                         --高电平时间为T1--                          总周期20ms:
                            —— —— —— ——
                           |           |                              高电平时间T1为 0.5ms     舵机转动0°
						   |           |                              高电平时间T1为   1ms     舵机转动45°
						   |           |                              高电平时间T1为 1.5ms     舵机转动90°
						   |           |                              高电平时间T1为   2ms     舵机转动135°
									   —— —— —— —— —— ——              高电平时间T1为 2.5ms     舵机转动180°
                           --------总周期 T2为20ms--------
												 
		代码思路:1、Ctrl + c  然后  Ctrl + v     哈哈哈哈!				

			
		以180度舵机为例定义:高电平时间T1为 1.5ms     舵机转动90°    相对位置为     0°    参数为1850  
				   相对而言:高电平时间T1为 0.5ms     舵机转动0°     相对位置为   -90°    参数为1945  
                            高电平时间T1为   1ms     舵机转动45°    相对位置为   -45°    参数为1900  
							高电平时间T1为 1.5ms     舵机转动90°    相对位置为     0°    参数为1850  
                            高电平时间T1为   2ms     舵机转动135°   相对位置为   +45°    参数为1800  
							高电平时间T1为 2.5ms     舵机转动180°   相对位置为   +90°    参数为1750  
																		 
																		 
		//-90°
		//TIM_SetCompare1(TIM4,1945);//占空比(2000-1945)/2000*20ms=0.5ms 
		
		//-45°
		//TIM_SetCompare1(TIM4,1900);//占空比(2000-1900)/2000*20ms=1ms
		
		//0°
		//TIM_SetCompare1(TIM4,1850);//占空比(2000-1850)/2000*20ms=1.5ms
		
		//+45°
		//TIM_SetCompare1(TIM4,1800);//占空比(2000-1800)/2000*20ms=2ms
		
		//+90°
		//TIM_SetCompare1(TIM4,1750);//占空比(2000-1750)/2000*20ms=2.5ms




2022.07.31			1、机械狗项目需要用到的引脚有:
                          
									 TIM1_CH1     PA8            TIM2_CH1_ETR PA0            TIM3_CH1     PA6            TIM4_CH1     PB6 
									 TIM1_CH2     PA9            TIM2_CH2     PA1            TIM3_CH2     PA7            TIM4_CH2     PB7
									 TIM1_CH3     PA10           TIM2_CH3     PA2            TIM3_CH3     PB0            TIM4_CH3     PB8 
									 TIM1_CH4     PA11           TIM2_CH4     PA3            TIM3_CH4     PB1            TIM4_CH4     PB9  
											
								2、测试按键IO为:
								
							        KEY0 PAin(4)   	
										  KEY1 PAin(5)	 
										  KEY2 PCin(15)     
										  KEY3 PCin(14)

2023.12.03 20:40  继续推进 16路全部可以按键驱动,测试没有问题。
******************************************************************************************************************************************************/
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "pwm1.h"
#include "pwm2.h"
#include "pwm3.h"
#include "pwm4.h"


int main(void)
 {	
	u8 t=0;	  
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  	 	//初始化与LED连接的硬件接口
	KEY_Init();          	//初始化与按键连接的硬件接口
	 
	TIM1_PWM_Init(1999,719);   //PWM频率=72000000/(719+1)/(1999+1)=50hz=20ms
    TIM2_PWM_Init(1999,719);
	TIM3_PWM_Init(1999,719);
    TIM4_PWM_Init(1999,719);	
	 
	LED0=0;					//点亮LED
	while(1)
	{
		LED_Blink_1();
		t=KEY_Scan(0);		//得到键值
		switch(t)
		{				 
			case KEY0_PRES:		//PA4
			
			         TIM_SetCompare1(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH1     PA8  
					 TIM_SetCompare1(TIM1,1900);delay_ms(500);LED_Blink_1();
						 				 							 
					 TIM_SetCompare2(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH2     PA9  
					 TIM_SetCompare2(TIM1,1900);delay_ms(500);LED_Blink_1();											
												 
					 TIM_SetCompare3(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH3     PA10  
					 TIM_SetCompare3(TIM1,1900);delay_ms(500);LED_Blink_1();

					 TIM_SetCompare4(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH4     PA11 
					 TIM_SetCompare4(TIM1,1900);delay_ms(500);LED_Blink_1();			
			     break;
			
			case KEY1_PRES:  //PA5
				   							
										
					TIM_SetCompare1(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH1     PB6 
					TIM_SetCompare1(TIM4,1900);delay_ms(500);LED_Blink_1(); 
												 
					TIM_SetCompare2(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH2     PB7
					TIM_SetCompare2(TIM4,1900);delay_ms(500);LED_Blink_1();
			
					TIM_SetCompare3(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH3     PB8 
					TIM_SetCompare3(TIM4,1900);delay_ms(500);LED_Blink_1();
												 
					TIM_SetCompare4(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH4     PB9  
					TIM_SetCompare4(TIM4,1900);delay_ms(500);LED_Blink_1();
	         break;
			
			case KEY2_PRES:	    //PC15
				    TIM_SetCompare1(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH1     PA6  
					TIM_SetCompare1(TIM3,1900);delay_ms(500);LED_Blink_1();
												 
					TIM_SetCompare2(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH2     PA7   
					TIM_SetCompare2(TIM3,1900);delay_ms(500);LED_Blink_1();
												 
					TIM_SetCompare3(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH3     PB0
					TIM_SetCompare3(TIM3,1900);delay_ms(500);LED_Blink_1();
												 
					TIM_SetCompare4(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH4     PB1 
					TIM_SetCompare4(TIM3,1900);delay_ms(500);LED_Blink_1();
			     break;
			
			case KEY3_PRES: 	 //PC14
					TIM_SetCompare1(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH1_ETR PA0 
					TIM_SetCompare1(TIM2,1800);delay_ms(500);LED_Blink_1();
						 
					TIM_SetCompare2(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH2     PA1  
					TIM_SetCompare2(TIM2,1800);delay_ms(500);LED_Blink_1();
						 
					TIM_SetCompare3(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH3     PA2 
					TIM_SetCompare3(TIM2,1800);delay_ms(500);LED_Blink_1();
						 
					TIM_SetCompare4(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH4     PA3  
					TIM_SetCompare4(TIM2,1800);delay_ms(500);LED_Blink_1();
					 break;	
			
			default:delay_ms(10);
		} 
	}		 
}


02、串口3接收到数据触发16路舵机偏转:

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "pwm1.h"
#include "pwm2.h"
#include "pwm3.h"
#include "pwm4.h"
#include "usart3.h"


 int main(void)
 
 {	
	u8 t=0;	  
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  	 	//初始化与LED连接的硬件接口
	KEY_Init();          	//初始化与按键连接的硬件接口
	 
	TIM1_PWM_Init(1999,719);   //PWM频率=72000000/(719+1)/(1999+1)=50hz=20ms
    TIM2_PWM_Init(1999,719);
	TIM3_PWM_Init(1999,719);
    TIM4_PWM_Init(1999,719);	
	 
	usart3_Init(9600);	
	 
	LED0=0;					//点亮LED
	while(1)
	{
		
		if(USART3_RX_STA==1)                // 串口1:PA9-TX PA10-RX    串口2:PA2-TX PA3-RX     串口3:PB10-TX PB11-RX
		  {
              switch(USART3_RX_CMD)          
				   {	
						 	//用01文件夹来存储需要应答的语句					  //7E FF 06 0F 00 01 01 EF       播放01文件夹01首
						  case	0x01: Uart3_SendCMD2(0X01,0X01,0X01,0X01);LED_Blink_1();
						              TIM_SetCompare1(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH1     PA8  
									  TIM_SetCompare1(TIM1,1900);delay_ms(500);LED_Blink_1();
																								 
									  TIM_SetCompare2(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH2     PA9  
									  TIM_SetCompare2(TIM1,1900);delay_ms(500);LED_Blink_1();											
																			 
									  TIM_SetCompare3(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH3     PA10  
									  TIM_SetCompare3(TIM1,1900);delay_ms(500);LED_Blink_1();

									  TIM_SetCompare4(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH4     PA11 
							          TIM_SetCompare4(TIM1,1900);delay_ms(500);LED_Blink_1();
									  Uart3_SendCMD2(0X01,0X01,0X01,0X01);break;
										
												
                          case 0x02:  Uart3_SendCMD2(0X02,0,0X02,0X02);LED_Blink_1();
						              TIM_SetCompare1(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH1_ETR PA0 
									  TIM_SetCompare1(TIM2,1800);delay_ms(500);LED_Blink_1();
													 
									  TIM_SetCompare2(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH2     PA1  
									  TIM_SetCompare2(TIM2,1800);delay_ms(500);LED_Blink_1();
													 
								      TIM_SetCompare3(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH3     PA2 
								      TIM_SetCompare3(TIM2,1800);delay_ms(500);LED_Blink_1();
													 
								      TIM_SetCompare4(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH4     PA3  
								   	  TIM_SetCompare4(TIM2,1800);delay_ms(500);LED_Blink_1();
									  Uart3_SendCMD2(0X02,0,0X02,0X02);break;

												 
                          case 0x03:  Uart3_SendCMD2(0X03,0X03,0X03,0X03);LED_Blink_1();
						              TIM_SetCompare1(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH1     PA6  
							          TIM_SetCompare1(TIM3,1900);delay_ms(500);LED_Blink_1();
																			 
							 		  TIM_SetCompare2(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH2     PA7   
									  TIM_SetCompare2(TIM3,1900);delay_ms(500);LED_Blink_1();
																			 
									  TIM_SetCompare3(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH3     PB0
							 		  TIM_SetCompare3(TIM3,1900);delay_ms(500);LED_Blink_1();
																			 
								      TIM_SetCompare4(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH4     PB1 
								      TIM_SetCompare4(TIM3,1900);delay_ms(500);LED_Blink_1();
									  Uart3_SendCMD2(0X03,0X03,0X03,0X03);break;
												 
                          case 0x04:  Uart3_SendCMD2(0X04,0X04,0X04,0X04);LED_Blink_1();
						              TIM_SetCompare1(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH1     PB6 
								      TIM_SetCompare1(TIM4,1900);delay_ms(500);LED_Blink_1(); 
																			 
												 TIM_SetCompare2(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH2     PB7
												 TIM_SetCompare2(TIM4,1900);delay_ms(500);LED_Blink_1();
										
												 TIM_SetCompare3(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH3     PB8 
												 TIM_SetCompare3(TIM4,1900);delay_ms(500);LED_Blink_1();
																			 
												 TIM_SetCompare4(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH4     PB9  
												 TIM_SetCompare4(TIM4,1900);delay_ms(500);LED_Blink_1();
												 Uart3_SendCMD2(0X04,0X04,0X04,0X04);break;	

                          case	0x05: Uart3_SendCMD2(0X05,0X05,0X05,0X05);LED_Blink_1();
						              TIM_SetCompare1(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH1     PA8  
												 TIM_SetCompare1(TIM1,1900);delay_ms(500);LED_Blink_1();
																								 
												 TIM_SetCompare2(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH2     PA9  
												 TIM_SetCompare2(TIM1,1900);delay_ms(500);LED_Blink_1();											
																			 
												 TIM_SetCompare3(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH3     PA10  
												 TIM_SetCompare3(TIM1,1900);delay_ms(500);LED_Blink_1();

												 TIM_SetCompare4(TIM1,1800);delay_ms(500);LED_Blink_1();       //TIM1_CH4     PA11 
												 TIM_SetCompare4(TIM1,1900);delay_ms(500);LED_Blink_1();
										
										
					 				             TIM_SetCompare1(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH1_ETR PA0 
												 TIM_SetCompare1(TIM2,1800);delay_ms(500);LED_Blink_1();
													 
												 TIM_SetCompare2(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH2     PA1  
												 TIM_SetCompare2(TIM2,1800);delay_ms(500);LED_Blink_1();
													 
												 TIM_SetCompare3(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH3     PA2 
												 TIM_SetCompare3(TIM2,1800);delay_ms(500);LED_Blink_1();
													 
												 TIM_SetCompare4(TIM2,1900);delay_ms(500);LED_Blink_1();       //TIM2_CH4     PA3  
												 TIM_SetCompare4(TIM2,1800);delay_ms(500);LED_Blink_1();
												 
												 
												 TIM_SetCompare1(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH1     PA6  
												 TIM_SetCompare1(TIM3,1900);delay_ms(500);LED_Blink_1();
																			 
												 TIM_SetCompare2(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH2     PA7   
												 TIM_SetCompare2(TIM3,1900);delay_ms(500);LED_Blink_1();
																			 
												 TIM_SetCompare3(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH3     PB0
												 TIM_SetCompare3(TIM3,1900);delay_ms(500);LED_Blink_1();
																			 
												 TIM_SetCompare4(TIM3,1800);delay_ms(500);LED_Blink_1();       //TIM3_CH4     PB1 
												 TIM_SetCompare4(TIM3,1900);delay_ms(500);LED_Blink_1();	
												 
												 
												 TIM_SetCompare1(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH1     PB6 
												 TIM_SetCompare1(TIM4,1900);delay_ms(500);LED_Blink_1(); 
																			 
												 TIM_SetCompare2(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH2     PB7
												 TIM_SetCompare2(TIM4,1900);delay_ms(500);LED_Blink_1();
										
												 TIM_SetCompare3(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH3     PB8 
												 TIM_SetCompare3(TIM4,1900);delay_ms(500);LED_Blink_1();
																			 
												 TIM_SetCompare4(TIM4,1800);delay_ms(500);LED_Blink_1();       //TIM4_CH4     PB9  
												 TIM_SetCompare4(TIM4,1900);delay_ms(500);LED_Blink_1();
												 
												
												 
												 
												 
												 Uart3_SendCMD2(0X05,0X05,0X05,0X05);break;
												 
												 
						  default:Uart3_SendCMD2(0XFF,0XFF,0XFF,0XFF);
          }	
				
				USART3_RX_STA=0;                    //注意改写此条
	    }	
	
	}		 
}

四、配套代码下载链接:

01、文章对应的资源绑定可以下载。

02、仓库也可以下载:https://gitee.com/ha-city/12345678910.git

五、完结撒花:

01、良心分享:项目已经过UP实际测试:验证通过。

02、免费分享:不需要乱七八糟这的那的才能下载。

03、期待对你有所帮助。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值