当前位置: 首页 > article >正文

履带机器人(一、STM32控制部分--标准库)

一、履带机器人整体逻辑框架

通过在PC端搭建上位机,使得在PC端可以给STM32发送控制指令并且接受STM32的状态信息。

通过RS485通信,使得STM32可以和电机进行通信,STM32发送启动、停止、转速、方向等指令,并接受电机返回的状态信息。

7287d6dedb4d4d519e53c0bf8558b0f0.png

二、STM32逻辑框架

整体逻辑:

1、先初始化串口和引脚

2、通过STM32给电机发送RS485控制模式数组

3、电机接收到数组,设置控制模式为RS485控制,并返回一串数组。

4、通过STM32发送调取电机状态数组

5、电机接收到数组,并返回17组数组,表示当前的转速,方向,温度等状态信息

6、将这17组数组发送给PC端

7、循环往复

8、当PC端发送遥控器控制数组时,则更改为遥控器控制

9、当PC端发送电机转速,方向数组时,将数组赋值给电机。

5f1565eea9634ece92368c5c972f6cff.png

三、代码具体介绍

1、初始化串口、定时器、引脚

(1)串口1初始化并编写串口中断函数

void uart_init(u32 bound){
  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	
  
	//USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
   
  //USART1_RX	  GPIOA.10初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

  //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置

	USART_InitStructure.USART_BaudRate = bound;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

  USART_Init(USART1, &USART_InitStructure); //初始化串口1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(USART1, ENABLE);                    //使能串口1 

}

(2)串口2初始化并编写串口中断函数

void RS485_Init(void)
{
	USART_InitTypeDef USART_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
	
		//GPIOkou_Initti
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructur

http://www.kler.cn/a/384252.html

相关文章:

  • 2024 CSS保姆级教程二 - BFC详解
  • 【测试语言篇四】Python进阶篇之json模块
  • 计算机网络——SDN
  • RabbitMQ 七种工作模式介绍
  • Maven(20) 如何使用Maven进行版本管理?
  • 解决vue3导出.xlsx的blob文件受损问题
  • MyBatis项目的创建和增删查改操作
  • 计算机的发展史
  • 动漫风格大模型和lora推荐
  • 【ShuQiHere】️使用 Tailscale 轻松构建安全、分布式网络
  • 51单片机教程(一)- 开发环境搭建
  • group_concat配置影响程序出bug
  • 前端预览word、excel、ppt
  • 使用onnxruntime c++ API实现yolov5m视频检测
  • 进入半导体行业需要具备哪些能力?
  • Scala的List
  • 计算机体系结构知识(一)
  • 前端零基础学习Day-Six
  • MySQL 导出数据
  • 鸿蒙多线程开发——并发模型对比(Actor与内存共享)
  • qt QTextDocument详解
  • 56合并区间 go解题
  • 【经验分享】六西格玛管理培训适合哪些人参加?
  • docker 拉取MySQL8.0镜像以及安装
  • C#笔记(4)
  • 带点符号的 TypeScript 实用程序类型 NestedKeyOf 在严格模式下失败