自学笔记7

1月19日
今天我会将底盘的代码全部放到这,而且会把之前没注释的内容注释,,如果有什么问题可以私信我,很多关于keil的基础内容我都没有写,主要是过几天就是向RM官方提交中期视频的时候,等提交完毕我会系统的全部都补上

昨天我写了底盘结构体和初始化函数,既然定义完毕了,那现在就开始写小车遥控器部分的代码(写代码时尽量根据功能分块写,然后最后只留一个接口,这样思维不容易混乱)

还是老样子,我们先写.h文件,之前关于硬件的部分信息我放到了自学笔记5中,现在我们就用到的上面的信息,其中remote.h(遥控器)处于初始状态时返回值为1024.

/*
    ------------------------------------------------------------------------
  | 文件名     :remote.h
  | 文件描述   :本文件用于遥控器接收函数的接口以及遥控器接收相关变量的定义
  | 作者       : pinocchio
  | 创建时间   :1.18
   ------------------------------------------------------------------------
	修改日期 :未修改
	修改人   :无
   ------------------------------------------------------------------------
  **************************************************************************
	* 1. 本代码基于STM32F427IIH(2018RM开发板A型)开发,编译环境为keil,基于freetos操作系统
	* 2. 本代码只适用于Robomaster 2019步兵机器人,不建议用于其他用途
	* 3.本代码最终解释权归哈尔滨工业大学(深圳)南工晓鹰所有 
	* 4.请勿转载!!!!!!!!!!!
	* Copyright (c) 2019哈尔滨工业大学(深圳)南工晓鹰战队 版权所有
	**************************************************************************

*/
#ifndef REMOTE_H_
#define REMOTE_H_

#include "remote.h"
#include "robot.h"
#include "stm32f4xx.h"
#include "usart.h"

#define CH0_BIAS 1024
#define CH0_BIAS 1024
#define CH0_BIAS 1024
#define CH0_BIAS 1024

extern uint8_t rc_data[18];
void RemoteReceiveHandle(void);

#endif

然后以上就是我们遥控器的.h文件
接下来就是遥控器具体函数的书写(remote.c)

/*
    ------------------------------------------------------------------------
  | 文件名     :remote.h
  | 文件描述   :本文件用于遥控器接收函数的接口以及遥控器接收相关变量的定义
  | 作者       : pinocchio
  | 创建时间   :1.18
   ------------------------------------------------------------------------
	修改日期 :未修改
	修改人   :无
   ------------------------------------------------------------------------
  **************************************************************************
	* 1. 本代码基于STM32F427IIH(2018RM开发板A型)开发,编译环境为keil,基于freetos操作系统
	* 2. 本代码只适用于Robomaster 2019步兵机器人,不建议用于其他用途
	* 3.本代码最终解释权归哈尔滨工业大学(深圳)南工晓鹰所有 
	* 4.请勿转载!!!!!!!!!!!
	* Copyright (c) 2019哈尔滨工业大学(深圳)南工晓鹰战队 版权所有
	**************************************************************************
*/

#include "remote.h"

uint8_t rc_data[18];
void RemoteReceiveHandle(void)
{
	Robot1.Remote.Rc.ch0 = ((int16_t)rc_data[0] | ((int16_t)rc_data[1] << 8)) & 0x07FF; 
	Robot1.Remote.Rc.ch1 = (((int16_t)rc_data[1] >> 3) | ((int16_t)rc_data[2] << 5)) & 0x07FF;
	Robot1.Remote.Rc.ch2 = (((int16_t)rc_data[2] >> 6) | ((int16_t)rc_data[3] << 2) |
											 ((int16_t)rc_data[4] << 10)) & 0x07FF;
	Robot1.Remote.Rc.ch3 = (((int16_t)rc_data[4] >> 1) | ((int16_t)rc_data[5]<<7)) & 0x07FF;
	
	Robot1.Remote.Rc.s1 = ((rc_data[5] >> 4) & 0x000C) >> 2;
	Robot1.Remote.Rc.s2 = ((rc_data[5] >> 4) & 0x0003);

	Robot1.Remote.Mouse.x = ((int16_t)rc_data[6]) | ((int16_t)rc_data[7] << 8);
	Robot1.Remote.Mouse.y = ((int16_t)rc_data[8]) | ((int16_t)rc_data[9] << 8);
	Robot1.Remote.Mouse.z = ((int16_t)rc_data[10]) | ((int16_t)rc_data[11] << 8);    

	Robot1.Remote.Mouse.press_l = rc_data[12];
	Robot1.Remote.Mouse.press_r = rc_data[13];

	Robot1.Remote.Mouse.key = ((int16_t)rc_data[14]);
	
 
	if(Robot1.Remote.Rc.s2 == 2)
	{
		Robot1.Remote.Robot_Mode = RC_Stop;
	}
	else if(Robot1.Remote.Rc.s2 == 3)
	{
		Robot1.Remote.Robot_Mode = RC_MouseKey;
	}
	else if(Robot1.Remote.Rc.s2 == 1)
	{
		Robot1.Remote.Robot_Mode = RC_Remote;
	}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart == &huart1)
	{
		HAL_UART_Receive_DMA(&huart1,rc_data,18u);
		RemoteReceiveHandle();
		HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_8);
		
	}
}

以上就是遥控器接收函数的代码以及遥控器接收相关回调函数,具体注释和解析会在今晚完成。关于调试的相关问题和视频我尽量在这两天中完成,而且不是写了这个函数就可以的,还要在适当的地方用,具体怎么写我会在整个底盘代码写完以后在总结,大概二十号或者二十二号完成

猜你喜欢

转载自blog.csdn.net/weixin_44109556/article/details/86550899