stm32cubemx hal学习记录:JY901S串口
一、配置过程
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串口相关推荐
- 【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 ...
- ESP32学习记录<三>串口通信
ESP32学习记录<三>串口通信 文章目录 ESP32学习记录<三>串口通信 前言 一.通过串口打印出数据 1.初始化串口 2.打印数据 二.串口控制LED亮灭 1.接收串口发 ...
- 学习记录:USART—串口通讯
目录 1.串口通讯协议简介 1.1物理层 1.2 电平标准 2.协议层 3.printf函数的支持代码 4.usart.h程序 5.main.c主函数 6.实验现象 1.串口通讯协议简介 对于通讯协议 ...
- 瑞萨单片机iap串口升级boot程序与app程序合并的工程构建-学习记录
MCU型号: R7F0C004 编辑软件:CS+ for CC boot区程序地址分配:0x0000-0x1ffff app区程序地址分配: 0x2000-0xfffff 复制一份常规的app程序,然 ...
- STM32CubeMX基于HAL库实现简单串口通信
STM32CubeMX基于HAL库实现简单串口通信 板子:STM32F103C8 编译工具:Keil+STM32CubeMX 烧录工具:FlyMcu 串口调试程序:XCOM 实验要求: 1)设置波特率 ...
- 【STM32】标准库与HAL库对照学习教程八--串口通信详解
[STM32]标准库与HAL库对照学习教程八--串口通信详解 一.前言 二.准备工作 三.通信的基本概念 1.通信方式 2.串行通信与并行通信 (1)串行通信 (2)并行通信 3.异步通信与同步通信 ...
- STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料
STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料 微雪课堂:http://www.waveshare.net/study/article-629-1.html 之前的正点原 ...
- 学习记录--蓝牙模块HC05(串口收发)
主要实现:PC上位机与蓝牙之间的通信(收发) 一,HC05模式等一系列设置 参考博客: (11条消息) stm32之蓝牙模块HC-05使用_一剃解千愁的博客-CSDN博客_stm32蓝牙模块的使用 ( ...
- 使用51单片机采用中断方式进行串口通信的学习记录:
使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...
最新文章
- 解决spring-security session超时 Ajax 请求没有重定向的问题
- 为你的android App实现自签名的ssl证书
- PowerDesigner生成数据库建表sql脚本
- 若依微服务版后台服务通过jar包部署到Windows服务器
- 贪心策略摘果子(洛谷P1478题题解,Java语言描述)
- mysql怎么精简_我这个mysql查询该如何精简,提高效率啊?
- Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete
- Myeclipse 2020.5 版本首发!支持 Java14
- [导入]构建WCF面向服务的应用程序系列课程(10):安全基础.zip(24.27 MB)
- git本地项目推动到gitlab远端服务器
- html实现登录界面
- c语言 空心的倒三角形,C语言题目,请根据要求打印可空心倒三角形
- 手机版支付宝转账截图生成器Q574651623
- Excel 预习阶段Day1
- 浮点数转换为大写货币金额
- 虚拟机遇锁定文件失败问题
- 微信开放平台第三方平台授权小程序权限集id对应中文说明
- arm 2022.10.22
- 【笨木头Lua专栏】基础补充05:迭代器番外篇
- 第一届大数据技术创新与创业大赛
热门文章
- 可持续时尚分论坛精彩回顾 | 第二届始祖数字化可持续发展峰会
- android sdk版本8.0,把targetSdkVersion设置为26(Android 8.0)需要注意的地方
- PS工作记录——图片元素复制,智能抠图
- siamfc-pytorch代码讲解(三):demotrack
- Julia Computing获得 2400 万美元融资,前 Snowflake CEO 加入董事会
- Windows10总弹出打开文件安全警告怎么关闭
- 工具推荐——Apt_t00ls
- 百度竞价推广账户常见问题及调整方法
- 2021基于Debian的All in One(NAS+软路由)配置教程
- python输入一个三位数输出百位十位个位_python输入一个水仙花数(三位数) 输出百位十位个位实例...