地址:深圳市罗湖区文锦广场文盛中心1401
邮箱:wawa209@126.com


#include "mt6816.h"
#include "stdio.h"
MT6816_SPI_Signal_Typedefmt6816_spi;
void REIN_MT6816_SPI_Signal_Init(void)
{
mt6816_spi.sample_data = 0;
mt6816_spi.angle = 0;
}
void RINE_MT6816_SPI_Get_AngleData(void)
{
uint16_t data_t[2];
uint16_t data_r[2];
uint8_t h_count;
data_t[0] = (0x80 | 0x03) << 8;
data_t[1] = (0x80 | 0x04) << 8;
for(uint8_t i=0; i<3; i++){
//读取SPI数据
MT6816_SPI_CS_L();
HAL_SPI_TransmitReceive(&MT6816_SPI_Get_HSPI, (uint8_t*)&data_t[0], (uint8_t*)&data_r[0], 1, HAL_MAX_DELAY);
MT6816_SPI_CS_H();
MT6816_SPI_CS_L();
HAL_SPI_TransmitReceive(&MT6816_SPI_Get_HSPI, (uint8_t*)&data_t[1], (uint8_t*)&data_r[1], 1, HAL_MAX_DELAY);
MT6816_SPI_CS_H();
mt6816_spi.sample_data = ((data_r[0] & 0x00FF) << 8) | (data_r[1] & 0x00FF);
//奇偶校验
h_count = 0;
for(uint8_t j=0; j<16; j++){
if(mt6816_spi.sample_data & (0x0001 << j))
h_count++;
}
if(h_count & 0x01){
mt6816_spi.pc_flag = false;
}
else{
mt6816_spi.pc_flag = true;
break;
}
}
if(mt6816_spi.pc_flag){
mt6816_spi.angle = mt6816_spi.sample_data >> 2;
mt6816_spi.no_mag_flag = (bool)(mt6816_spi.sample_data & (0x0001 << 1));
}
}
MT6816_Typedefmt6816;
float REIN_MT6816_Get_AngleData()
{
RINE_MT6816_SPI_Get_AngleData();
mt6816.angle_data = mt6816_spi.angle;
}#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <spi.h>
#include <main.h>
#define MT6816_SPI_CS_H() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,1)
#define MT6816_SPI_CS_L() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,0)
#define MT6816_SPI_Get_HSPI (hspi1)
#define MT6816_Mode_SPI (0x03)
typedef struct{
uint16_tsample_data;
uint16_tangle;
boolno_mag_flag;
boolpc_flag;
}MT6816_SPI_Signal_Typedef;
void REIN_MT6816_SPI_Signal_Init(void);
void RINE_MT6816_SPI_Get_AngleData(void);
typedef struct{
uint16_tangle_data;
uint16_trectify_angle;
boolrectify_valid;
}MT6816_Typedef;
extern MT6816_Typedefmt6816;
float REIN_MT6816_Get_AngleData();
#endif#include "mt6816.h"
#include "stdio.h"
int fputc(int ch, FILE *File)
{
while((USART1->SR & 0X40) == 0);
USART1->DR = (uint8_t)ch;
return ch;
}
printf("%.2f\r\n", 360/4096*REIN_MT6816_Get_AngleData());
HAL_Delay(1000);附注:
以上所有文字及图片均来源于网络,如有侵权,请联系删除
产品
应用
服务
资讯
公司