stm32四足机器人(标准库)

项目技术要求

PWM波形的学习

参考文章stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)_ttl pwm 驱动激光头区别-CSDN博客

舵机的学习 

参考文章

stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)_ttl pwm 驱动激光头区别-CSDN博客

 蓝牙的学习

参考文章

stm32 USART串口(串口发送&串口发送+接收)_stm32串口实现接收和发送-CSDN博客

项目材料

降压模块+2节14500 3.7v电池+芯片拓展版+HC-06蓝牙模块+stm32f103c8t6+8个舵机+3D打印机器人骨架

项目结构图

技术问题

PWM初始化

(1)是否可以同时开启多个TIM时钟

1.独立配置:你可以对多个定时器(如 TIM2、TIM3、TIM4 等)分别调用 TIM_InternalClockConfig() 函数,例如:

TIM_InternalClockConfig(TIM2);
TIM_InternalClockConfig(TIM3);

2.相互独立:每个定时器都是独立工作的,因此可以同时开启多个定时器的内部时钟配置。每个定时器的状态和配置不会互相干扰。

3.资源限制:需要注意的是,虽然可以同时开启多个定时器,但要确保你的 MCU 有足够的资源(如定时器数量、计数器和中断处理能力等)。

4.使用场景:在某些应用场景中,你可能会用到多个定时器来实现不同的功能,比如定时器1用于PWM输出,定时器2用于延时,定时器3用于事件计数等。

5.总结:可以同时开启多个定时器的内部时钟配置,只需确保每个定时器都被正确初始化和配置即可。

(2)TIM使能问题

使用定时器(TIM)时,确保其正确使能是非常重要的。确保正确配置和使能 TIM 是保证 STM32 定时器正常工作的关键。

(3)捕获通道的正确开启

由于本项目需要开启所有的捕获通道,要保证所有的通道的开启

输入捕获通道CCR的正确的写入

(4)四足机器人步态

代码书写

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Servo.h"
#include "Serial.h"
uint8_t RxData;
uint8_t Middle;
float Angle;
const uint16_t RunAdvance[6][8]={
  
  {110,150,100,40,130,40,50,50},{45,100,100,40,130,40,50,50},{130,150,160,40,110,40,70,50},
{60,150,140,40,70,40,100,50},{60,150,140,40,120,80,100,50},{80,150,170,40,80,0,50,50}};
const uint8_t StartStates[]={60,145,140,30,100,40,70,60};	
const uint16_t HelloStates[2][8]={
  
  {60,60,140,20,130,30,70,40},{60,130,140,20,130,30,70,40}};
const uint16_t HapplyStates[2][8]={
  
  {60,90,140,80,100,80,70,10},{110,90,90,80,70,80,100,10}};
int main(void)
{  
	Servo_Init_Right();
	Servo_Init_Left();
	Serial_Init();	
	
	while (1)
	{
		if (Serial_GetRxFlag() == 1)			//检查串口接收数据的标志位
		{
			
		   
			RxData = Serial_GetRxData();		//获取串口接收的数据
			Serial_SendByte(RxData);
			if(RxData==0x34)
			{
				for(int i=0;i<6;i++)
				{
					
					  Servo_SetAngle1_Left(RunAdvance[i][0]);		 
			        Servo_SetAngle2_Left(RunAdvance[i][1]);
                 Servo_SetAngle3_Left(RunAdvance[i][2]);
			        Servo_SetAngle4_Left(RunAdvance[i][3]);
			        Servo_SetAngle1_Right(RunAdvance[i][4]);
			        Servo_SetAngle2_Right(RunAdvance[i][5]);
			        Servo_SetAngle3_Right(RunAdvance[i][6]);
			        Servo_SetAngle4_Right(RunAdvance[i][7]);
			        Delay_ms(250);
				}
			}
			if(RxData==0x35)
		   {
				
					
					  Servo_SetAngle1_Left(StartStates[0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值