一、配置过程

1、配置RCC、SYS、USART1、时钟84MHz

2、配置TIM6,10ms,允许中断,作为控制周期

3、配置USART3,允许中断,其他默认

二、代码编写

1、移植入jy901s的c与h文件

#include "jy901s.h"
#include <string.h>
#include "usart.h"struct STime        stcTime;
struct SAcc         stcAcc;
struct SGyro        stcGyro;
struct SAngle   stcAngle;
struct SMag         stcMag;
struct SDStatus stcDStatus;
struct SPress   stcPress;
struct SLonLat  stcLonLat;
struct SGPSV        stcGPSV;
struct SQ       stcQ;char ACCCALSW[5] = {0XFF,0XAA,0X01,0X01,0X00};//进入加速度校准模式
char SAVACALSW[5]= {0XFF,0XAA,0X00,0X00,0X00};//保存当前配置char MAGNETICCALAM[5] = {0XFF,0XAA,0X01,0X07,0X00};
char SAVEMAGNETICCALAM[5] = {0XFF,0XAA,0X00,0X00,0X00};//用串口3给JY模块发送指令
void sendcmd(char cmd[])
{char i;for(i=0;i<5;i++)UART3_send_char(cmd[i]);
}void uart3_read_data(unsigned char ucData)
{static unsigned char ucRxBuffer[256];static unsigned char ucRxCount = 0;  ucRxBuffer[ucRxCount++]=ucData;  //将收到的数据存入缓冲区中if (ucRxBuffer[0]!=0x55)                 //数据头{ucRxCount=0;return;}if (ucRxCount<11) {return;}           //数据不满11个,则返回else{switch(ucRxBuffer[1])//判断数据是哪种数据,然后将其拷贝到对应的结构体中,有些数据包需要通过上位机打开对应的输出后,才能接收到这个数据包的数据{//memcpy为编译器自带的内存拷贝函数,需引用"string.h",将接收缓冲区的字符拷贝到数据结构体里面,从而实现数据的解析。case 0x50:    memcpy(&stcTime,&ucRxBuffer[2],8);break;case 0x51:  memcpy(&stcAcc,&ucRxBuffer[2],8);break;case 0x52:   memcpy(&stcGyro,&ucRxBuffer[2],8);break;case 0x53:  memcpy(&stcAngle,&ucRxBuffer[2],8);break;case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;case 0x55:   memcpy(&stcDStatus,&ucRxBuffer[2],8);break;case 0x56:   memcpy(&stcPress,&ucRxBuffer[2],8);break;case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;case 0x58:    memcpy(&stcGPSV,&ucRxBuffer[2],8);break;case 0x59:  memcpy(&stcQ,&ucRxBuffer[2],8);break;}ucRxCount=0; //清空缓存区}
}
#ifndef _JY901S_H
#define _JY901S_H#include "stm32f4xx_hal.h"void sendcmd(char cmd[]);
void uart3_read_data(unsigned char ucData);#define SAVE             0x00
#define CALSW       0x01
#define RSW             0x02
#define RRATE           0x03
#define BAUD            0x04
#define AXOFFSET    0x05
#define AYOFFSET    0x06
#define AZOFFSET    0x07
#define GXOFFSET    0x08
#define GYOFFSET    0x09
#define GZOFFSET    0x0a
#define HXOFFSET    0x0b
#define HYOFFSET    0x0c
#define HZOFFSET    0x0d
#define D0MODE      0x0e
#define D1MODE      0x0f
#define D2MODE      0x10
#define D3MODE      0x11
#define D0PWMH      0x12
#define D1PWMH      0x13
#define D2PWMH      0x14
#define D3PWMH      0x15
#define D0PWMT      0x16
#define D1PWMT      0x17
#define D2PWMT      0x18
#define D3PWMT      0x19
#define IICADDR     0x1a
#define LEDOFF      0x1b
#define GPSBAUD     0x1c#define YYMM                0x30
#define DDHH                0x31
#define MMSS                0x32
#define MS                  0x33
#define AX                  0x34
#define AY                  0x35
#define AZ                  0x36
#define GX                  0x37
#define GY                  0x38
#define GZ                  0x39
#define HX                  0x3a
#define HY                  0x3b
#define HZ                  0x3c
#define Roll                0x3d
#define Pitch               0x3e
#define Yaw                 0x3f
#define TEMP                0x40
#define D0Status        0x41
#define D1Status        0x42
#define D2Status        0x43
#define D3Status        0x44
#define PressureL       0x45
#define PressureH       0x46
#define HeightL         0x47
#define HeightH         0x48
#define LonL                0x49
#define LonH                0x4a
#define LatL                0x4b
#define LatH                0x4c
#define GPSHeight   0x4d
#define GPSYAW      0x4e
#define GPSVL               0x4f
#define GPSVH               0x50
#define q0          0x51
#define q1          0x52
#define q2          0x53
#define q3          0x54#define DIO_MODE_AIN 0
#define DIO_MODE_DIN 1
#define DIO_MODE_DOH 2
#define DIO_MODE_DOL 3
#define DIO_MODE_DOPWM 4
#define DIO_MODE_GPS 5      struct STime
{unsigned char ucYear;unsigned char ucMonth;unsigned char ucDay;unsigned char ucHour;unsigned char ucMinute;unsigned char ucSecond;unsigned short usMiliSecond;
};struct SAcc
{short a[3];short T;
};struct SGyro
{short w[3];short T;
};struct SAngle
{short Angle[3];short T;
};struct SMag
{short h[3];short T;
};struct SDStatus
{short sDStatus[4];
};struct SPress
{long lPressure;long lAltitude;
};struct SLonLat
{long lLon;long lLat;
};struct SGPSV
{short sGPSHeight;short sGPSYaw;long lGPSVelocity;
};struct SQ
{ short q[4];
};#endif

2、串口读取数据代码

static unsigned char TxBuffer[256];
static unsigned char TxCounter=0;
static unsigned char count=0; void UART3_send_char(unsigned char data)
{TxBuffer[count++] = data;
}void UART3_send_string(unsigned char *str)
{while(*str){if(*str=='\r')UART3_send_char(0x0d);else if(*str=='\n')UART3_send_char(0x0a);else UART3_send_char(*str);str++;}
}uint8_t Rxdata;
extern void uart3_read_data(unsigned char ucData);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance==USART3){HAL_UART_Receive_IT(&huart3,&Rxdata,1);uart3_read_data(Rxdata);  //处理数据}
}

3、main中代码

extern char ACCCALSW[5];//进入加速度校准模式
extern char SAVACALSW[5];//保存当前配置
extern char MAGNETICCALAM[5];      //磁力计校准
extern char SAVEMAGNETICCALAM[5];  //保存配置extern uint8_t Rxdata;HAL_TIM_Base_Start_IT(&htim6);
HAL_UART_Receive_IT(&huart3,&Rxdata,1);sendcmd(ACCCALSW);HAL_Delay(100); //加速度计校准
sendcmd(SAVACALSW);HAL_Delay(100);//保存当前配置sendcmd(MAGNETICCALAM);   HAL_Delay(100);   //磁力计校准
sendcmd(SAVEMAGNETICCALAM);HAL_Delay(100);//保存当前配置

4、定时器积分得到航向角

stm32cubemx hal学习记录:JY901S串口相关推荐

  1. 【STM32CubeMx】学习记录(基于微雪教程)(2019/2/16——2019/2/23完结)

    教程学习网址:http://www.waveshare.net/study/article-666-1.html 2019/2/16 STM32CubeMx系列教程 1-3 2019/2/17 STM ...

  2. ESP32学习记录<三>串口通信

    ESP32学习记录<三>串口通信 文章目录 ESP32学习记录<三>串口通信 前言 一.通过串口打印出数据 1.初始化串口 2.打印数据 二.串口控制LED亮灭 1.接收串口发 ...

  3. 学习记录:USART—串口通讯

    目录 1.串口通讯协议简介 1.1物理层 1.2 电平标准 2.协议层 3.printf函数的支持代码 4.usart.h程序 5.main.c主函数 6.实验现象 1.串口通讯协议简介 对于通讯协议 ...

  4. 瑞萨单片机iap串口升级boot程序与app程序合并的工程构建-学习记录

    MCU型号: R7F0C004 编辑软件:CS+ for CC boot区程序地址分配:0x0000-0x1ffff app区程序地址分配: 0x2000-0xfffff 复制一份常规的app程序,然 ...

  5. STM32CubeMX基于HAL库实现简单串口通信

    STM32CubeMX基于HAL库实现简单串口通信 板子:STM32F103C8 编译工具:Keil+STM32CubeMX 烧录工具:FlyMcu 串口调试程序:XCOM 实验要求: 1)设置波特率 ...

  6. 【STM32】标准库与HAL库对照学习教程八--串口通信详解

    [STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...

  7. STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料

    STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料 微雪课堂:http://www.waveshare.net/study/article-629-1.html 之前的正点原 ...

  8. 学习记录--蓝牙模块HC05(串口收发)

    主要实现:PC上位机与蓝牙之间的通信(收发) 一,HC05模式等一系列设置 参考博客: (11条消息) stm32之蓝牙模块HC-05使用_一剃解千愁的博客-CSDN博客_stm32蓝牙模块的使用 ( ...

  9. 使用51单片机采用中断方式进行串口通信的学习记录:

    使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...

最新文章

  1. 解决spring-security session超时 Ajax 请求没有重定向的问题
  2. 为你的android App实现自签名的ssl证书
  3. PowerDesigner生成数据库建表sql脚本
  4. 若依微服务版后台服务通过jar包部署到Windows服务器
  5. 贪心策略摘果子(洛谷P1478题题解,Java语言描述)
  6. mysql怎么精简_我这个mysql查询该如何精简,提高效率啊?
  7. Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete
  8. Myeclipse 2020.5 版本首发!支持 Java14
  9. [导入]构建WCF面向服务的应用程序系列课程(10):安全基础.zip(24.27 MB)
  10. git本地项目推动到gitlab远端服务器
  11. html实现登录界面
  12. c语言 空心的倒三角形,C语言题目,请根据要求打印可空心倒三角形
  13. 手机版支付宝转账截图生成器Q574651623
  14. Excel 预习阶段Day1
  15. 浮点数转换为大写货币金额
  16. 虚拟机遇锁定文件失败问题
  17. 微信开放平台第三方平台授权小程序权限集id对应中文说明
  18. arm 2022.10.22
  19. 【笨木头Lua专栏】基础补充05:迭代器番外篇
  20. 第一届大数据技术创新与创业大赛

热门文章

  1. 可持续时尚分论坛精彩回顾 | 第二届始祖数字化可持续发展峰会
  2. android sdk版本8.0,把targetSdkVersion设置为26(Android 8.0)需要注意的地方
  3. PS工作记录——图片元素复制,智能抠图
  4. siamfc-pytorch代码讲解(三):demotrack
  5. Julia Computing获得 2400 万美元融资,前 Snowflake CEO 加入董事会
  6. Windows10总弹出打开文件安全警告怎么关闭
  7. 工具推荐——Apt_t00ls
  8. 百度竞价推广账户常见问题及调整方法
  9. 2021基于Debian的All in One(NAS+软路由)配置教程
  10. python输入一个三位数输出百位十位个位_python输入一个水仙花数(三位数) 输出百位十位个位实例...