成功配置JY61模块,实现串口监视角度的功能

 联动了多个模组,尝试了多种数据接收格式,包括32与arduino、蓝牙模块的通信,遇到了各种坑,不过终究是解决了。

 有点累,先记一下代码。

主函数:

/**
  ******************************************************************************
  * @author  YCHEN
  * @version V1.3
  * @date    2021-10-23
  * @brief   备战电赛
  ******************************************************************************
  *
  * 型号   	  :STM32F103VET6 
  * 博客    	:https://blog.csdn.net/YANGCHEN144?spm=1000.2115.3001.5343
  * 参考资料	:野火教程
	* 程序功能  :
							1.LED灯
							2.配置了USART1,USART2,USART3,其中1用来与JY61通信,2用来监视串口
							3.200ms的定时
							4.两个按键中断
  ******************************************************************************
  */ 
	
#include "stm32f10x.h"
#include "bsp_led.h"
#include "./usart/bsp_usart.h"
#include <string.h>
#include <stdio.h>
#include "./JY61/JY61.h"
#include "./TimBase/bsp_TiMbase.h"
#include "./EXTI/bsp_exti.h" 

#define SOFT_DELAY Delay(0x00FFFF);
void Delay(__IO u32 nCount); 

struct SAcc 		stcAcc;
struct SGyro 		stcGyro;
struct SAngle 	stcAngle;

//用串口1给JY模块发送指令
void sendcmd(char cmd[])
{
	char i;
	for(i=0;i<3;i++)
		UART1_Put_Char(cmd[i]);
}

void sendcmd5(char cmd[])
{
	char i;
	for(i=0;i<10;i++)
		UART1_Put_Char(cmd[i]);
}

//CopeSerialData为串口2中断调用函数,串口每收到一个数据,调用一次这个函数。
void CopeSerial2Data(unsigned char ucData)
{
	static unsigned char ucRxBuffer[250];
	static unsigned char ucRxCnt = 0;	
	//Usart_SendByte( DEBUG_USARTx2, ucData);
	//printf("欢迎使用\n\n");
	ucRxBuffer[ucRxCnt++]=ucData;	//将收到的数据存入缓冲区中
	if (ucRxBuffer[0]!=0x55) //数据头不对,则重新开始寻找0x55数据头
	{
		ucRxCnt=0;
		return;
	}
	if (ucRxCnt<11) {return;}//数据不满11个,则返回
	else
	{

		switch(ucRxBuffer[1])//判断数据是哪种数据,然后将其拷贝到对应的结构体中,有些数据包需要通过上位机打开对应的输出后,才能接收到这个数据包的数据
		{
			//memcpy为编译器自带的内存拷贝函数,需引用"string.h",将接收缓冲区的字符拷贝到数据结构体里面,从而实现数据的解析。
			case 0x51:	memcpy(&stcAcc,&ucRxBuffer[2],8);break;
			case 0x52:	memcpy(&stcGyro,&ucRxBuffer[2],8);break;
			case 0x53:	memcpy(&stcAngle,&ucRxBuffer[2],8);break;

		}

		ucRxCnt=0;//清空缓存区
	}
}

int main(void)
{	
	unsigned char i = 0;
	unsigned int j = 0;
	
	float X=0.0,Y=0.0,Z=0.0;
	
	//--------------------------------------------------------------------------------
																	/* 初始化 */
	//--------------------------------------------------------------------------------
															LED_GPIO_Config();	 
															USART_Config1();
															USART_Config2();
															
															BASIC_TIM_Init();
															
															EXTI_Key_Config(); 
	
	//--------------------------------------------------------------------------------
																	/*setup*/
	//--------------------------------------------------------------------------------
															//LED1_ON;			 
															printf("YCHEN\n");

															printf("正在进行加速度校准\r\n");
															sendcmd(ACCCMD);//等待模块内部自动校准好,模块内部会自动计算需要一定的时间
															printf("加速度校准完成\r\n");
															SOFT_DELAY;
															printf("进行Z轴角度清零\r\n");
															sendcmd(YAWCMD);
															printf("Z轴角度清零完成\r\n");
	//---------------------------------------------------------------------------------
	while(1)
	{			
		for(j=0;j<5;j++){SOFT_DELAY;}//延时
		
		/*下面这一块不推荐使用*/	
//		i++;
//		if(i>10)
//		{
//			i = 0;
//			printf("正在进行加速度校准\r\n");
//			sendcmd(ACCCMD);//等待模块内部自动校准好,模块内部会自动计算需要一定的时间
//			printf("加速度校准完成\r\n");
//			SOFT_DELAY;
//			printf("进行Z轴角度清零\r\n");
//			sendcmd(YAWCMD);
//			printf("Z轴角度清零完成\r\n");
//		}
		
		printf("-----------------------------------\r\n");
		//输出加速度
		//串口接受到的数据已经拷贝到对应的结构体的变量中了,根据说明书的协议,以加速度为例 stcAcc.a[0]/32768*16就是X轴的加速度,
		//printf("Acc:%.3f %.3f %.3f\r\n",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16);
		//SOFT_DELAY;
		//输出角速度
		//printf(
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AWELA144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值