地址:深圳市罗湖区文锦广场文盛中心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);
附注:
以上所有文字及图片均来源于网络,如有侵权,请联系删除
产品
应用
服务
资讯
公司