国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

stm32cubemx hal學(xué)習(xí)記錄:JY901S串口

這篇具有很好參考價(jià)值的文章主要介紹了stm32cubemx hal學(xué)習(xí)記錄:JY901S串口。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、配置過(guò)程

1、配置RCC、SYS、USART1、時(shí)鐘84MHz

2、配置TIM6,10ms,允許中斷,作為控制周期

3、配置USART3,允許中斷,其他默認(rèn)

二、代碼編寫(xiě)

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};//進(jìn)入加速度校準(zhǔn)模式
char SAVACALSW[5]= {0XFF,0XAA,0X00,0X00,0X00};//保存當(dāng)前配置

char MAGNETICCALAM[5] = {0XFF,0XAA,0X01,0X07,0X00};
char SAVEMAGNETICCALAM[5] = {0XFF,0XAA,0X00,0X00,0X00};

//用串口3給JY模塊發(fā)送指令
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;	//將收到的數(shù)據(jù)存入緩沖區(qū)中
	if (ucRxBuffer[0]!=0x55) 				//數(shù)據(jù)頭
	{
		ucRxCount=0;
		return;
	}
	if (ucRxCount<11) {return;}			//數(shù)據(jù)不滿11個(gè),則返回
	else
	{
		switch(ucRxBuffer[1])//判斷數(shù)據(jù)是哪種數(shù)據(jù),然后將其拷貝到對(duì)應(yīng)的結(jié)構(gòu)體中,有些數(shù)據(jù)包需要通過(guò)上位機(jī)打開(kāi)對(duì)應(yīng)的輸出后,才能接收到這個(gè)數(shù)據(jù)包的數(shù)據(jù)
		{
			//memcpy為編譯器自帶的內(nèi)存拷貝函數(shù),需引用"string.h",將接收緩沖區(qū)的字符拷貝到數(shù)據(jù)結(jié)構(gòu)體里面,從而實(shí)現(xiàn)數(shù)據(jù)的解析。
			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;	//清空緩存區(qū)
	}
}
#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、串口讀取數(shù)據(jù)代碼

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);	//處理數(shù)據(jù)
	}	
}

3、main中代碼

extern char ACCCALSW[5];//進(jìn)入加速度校準(zhǔn)模式
extern char SAVACALSW[5];//保存當(dāng)前配置
extern char MAGNETICCALAM[5];      //磁力計(jì)校準(zhǔn)
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); //加速度計(jì)校準(zhǔn)
sendcmd(SAVACALSW);HAL_Delay(100);//保存當(dāng)前配置

sendcmd(MAGNETICCALAM);	HAL_Delay(100);   //磁力計(jì)校準(zhǔn)
sendcmd(SAVEMAGNETICCALAM);HAL_Delay(100);//保存當(dāng)前配置

4、定時(shí)器積分得到航向角

感謝大家支持,很久沒(méi)看沒(méi)想到這么多朋友需要代碼,不好意思沒(méi)有及時(shí)回復(fù),我把網(wǎng)盤(pán)連接放下邊了,各位請(qǐng)自取

鏈接:https://pan.baidu.com/s/12AEUTWJnLenOnc-hvd91SQ?pwd=l1r3?
提取碼:l1r3文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-625578.html

到了這里,關(guān)于stm32cubemx hal學(xué)習(xí)記錄:JY901S串口的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【STM32】HAL庫(kù) STM32CubeMX——DMA (串口DMA發(fā)送接收)

    【STM32】HAL庫(kù) STM32CubeMX——DMA (串口DMA發(fā)送接收)

    軟件: STM32CubeMX KEIL5 mcuisp 串口通信助手 硬件: STM32F103C8Tx 杜邦線,面包板,USB轉(zhuǎn)TTL DMA,全稱Direct Memory Access,即直接存儲(chǔ)器訪問(wèn)。 DMA傳輸將數(shù)據(jù)從一個(gè)地址空間復(fù)制到另一個(gè)地址空間,提供在外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間的高速數(shù)據(jù)傳輸。 我們知道系統(tǒng)的運(yùn)

    2024年02月12日
    瀏覽(24)
  • 【STM32CubeMX+HAL庫(kù)】hmi串口屏顯示波形

    【STM32CubeMX+HAL庫(kù)】hmi串口屏顯示波形

    usart hmi是淘晶馳開(kāi)發(fā)的一款基于串口通信并采用指令集控制的可觸摸屏幕,集成了多種控件,如按鈕控件,滑塊控件等,大大減輕了開(kāi)發(fā)的難度。 ? ? ? ? ??曲線控件學(xué)習(xí)入口 下面我們來(lái)講解一下cubeMX的配置以及輸出正弦波代碼的編寫(xiě)(三角波、方波同理) 一、CubeMX配置

    2023年04月12日
    瀏覽(83)
  • STM32CubeMX-HAL庫(kù)-UART串口接收中斷回調(diào)函數(shù)代碼分析

    ????????CubeMx中HAL庫(kù)函數(shù)的調(diào)用不同于庫(kù)函數(shù)調(diào)用,在學(xué)習(xí)CubeMx串口通信時(shí),不理解HAL庫(kù)中的回調(diào)函數(shù)是怎么被調(diào)用的,于是查看每個(gè)的定義,參考其他人寫(xiě)的博客,總算弄明白了HAL庫(kù)中斷調(diào)用與庫(kù)函數(shù)不同之處。寫(xiě)下這篇博客一是加深自己的理解,二是希望對(duì)不理解HA

    2024年02月02日
    瀏覽(45)
  • STM32 HAL庫(kù) CubeMX配置 定時(shí)器學(xué)習(xí) F103C8T6

    STM32 HAL庫(kù) CubeMX配置 定時(shí)器學(xué)習(xí) F103C8T6

    開(kāi)發(fā)板: STM32F103C8T6最小系統(tǒng)板 編譯環(huán)境: Keil5 MDK 輔助軟件: STM32 CubeMX 課程教學(xué): 基于正點(diǎn)原子HAL庫(kù)學(xué)習(xí)教程 其余配件: 江科大STM32配件包?和 示波器一臺(tái) 備注: ?因?yàn)檫@塊開(kāi)發(fā)板沒(méi)有基本定時(shí)器,所以本文也 沒(méi)有基本定時(shí)器的內(nèi)容 ????????????本文1.3和2.1部分的

    2024年04月26日
    瀏覽(21)
  • STM32學(xué)習(xí)·HAL庫(kù)·STM32CubeMX系列學(xué)習(xí)(安裝和使用)

    STM32學(xué)習(xí)·HAL庫(kù)·STM32CubeMX系列學(xué)習(xí)(安裝和使用)

    目錄 ?編輯 1.? STM32CubeMX簡(jiǎn)介 2.??STM32CubeMX安裝 2.1??STM32CubeMX軟件獲取 2.1.1? 獲取Java軟件 2.1.2??STM32CubeMX軟件獲取 2.2? 搭建Java運(yùn)行環(huán)境 2.3? 安裝STM32CubeMX軟件 2.4? 下載和關(guān)聯(lián)STM32cube固件包 ????????STM32CubeMX 是 ST 微電子公司推出的一款圖形化配置工具,用于快速啟動(dòng)

    2024年02月19日
    瀏覽(20)
  • STM32 Cubemx配置串口收發(fā)

    STM32 Cubemx配置串口收發(fā)

    最近學(xué)到了串口收發(fā),簡(jiǎn)單記錄一下注意事項(xiàng)。 以使用USART1為例。 USART1需配置成 異步工作模式Asynchronous 。 并且 需要使能NVIC 。 我偏向于在stm32f1xx_it.c文件中對(duì)printf進(jìn)行重定向,重定向函數(shù)如下。 同時(shí)需包含頭文件路徑#include “stdio.h” 在工程屬性Target下, 勾選Use MicroLIB

    2024年02月10日
    瀏覽(16)
  • STM32控制矩陣按鍵,HAL庫(kù),cubeMX配置

    STM32控制矩陣按鍵,HAL庫(kù),cubeMX配置

    我使用的是STM32F103RCT6這款單片機(jī),HAL庫(kù),使用cubeMX配置。 使用矩陣按鍵實(shí)現(xiàn)功能的方法為輪詢法 1.首先矩陣鍵盤(pán)原理圖如下: 2.實(shí)物圖 按照矩陣鍵盤(pán)接法,16個(gè)按鍵需要8個(gè)io口,我選擇了PC口的0~7號(hào)引腳,前四個(gè)依次接矩陣鍵盤(pán)的行,后四個(gè)依次接矩陣鍵盤(pán)的列;矩陣鍵盤(pán)的

    2023年04月17日
    瀏覽(20)
  • HAL庫(kù)配置STM32串口

    HAL庫(kù)配置STM32串口

    總結(jié)使用HAL庫(kù)的方法,以供自己后續(xù)回顧,如有錯(cuò)誤,歡迎指正。 首先,使用STM32CubeMax配置串口,記得打開(kāi)中斷。 然后,在串口初始化函數(shù)void? MX_USART1_UART_Init(void)中加入 使能接收中斷函數(shù),沒(méi)有這一步,將無(wú)法接收數(shù)據(jù)。??HAL_UART_Receive_IT(huart1,Buffer,1)這個(gè)函數(shù)在每次進(jìn)入

    2024年02月02日
    瀏覽(22)
  • 使用STM32CubeMX創(chuàng)建STM32工程(串口,硬件IIC配置)

    使用STM32CubeMX創(chuàng)建STM32工程(串口,硬件IIC配置)

    提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 最近教研室的項(xiàng)目需要使用STM32做處理器,對(duì)環(huán)境數(shù)據(jù)進(jìn)行采集處理,在拿到板子后,需要根據(jù)單片機(jī)具體型號(hào)(STM32F411CEU6)創(chuàng)建工程,再進(jìn)行上層應(yīng)用的開(kāi)發(fā)。因?yàn)橐郧岸际怯玫腇1系列的開(kāi)發(fā)板,用的

    2023年04月18日
    瀏覽(23)
  • STM32開(kāi)發(fā)中printf利用重定向方法輸出到串口(CubeMX 基于HAL庫(kù)方法,帶實(shí)際項(xiàng)目應(yīng)用技巧 巧用goto語(yǔ)句)

    STM32開(kāi)發(fā)中printf利用重定向方法輸出到串口(CubeMX 基于HAL庫(kù)方法,帶實(shí)際項(xiàng)目應(yīng)用技巧 巧用goto語(yǔ)句)

    在stdio.h中的printf 原本輸出到控制臺(tái), 在單片機(jī)應(yīng)用中一般將其改到串口, 并利用串口輸出信息來(lái)調(diào)試程序,非常方便。(本文以USART1為例) 此外CubeMX及CubeIDE 由于自動(dòng)生成基礎(chǔ)代碼,因此每當(dāng)更改硬件配置的時(shí)候, 都會(huì)被重置生成的基礎(chǔ)代碼。 這里使用goto語(yǔ)句來(lái)避免部分

    2024年02月04日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包