This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS3in1/2.Blade/1.Software/STM32/User/Src/main.c

132 lines
4.2 KiB
C
Raw Normal View History

#include "stdio.h"
#include <stdint.h>
#include <string.h>
#include "usb_device.h"
#include "usbd_cdc_if.h"
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/AD7606/ControlCommandReceive.h"
#include "./SYSTEM/adc/adc.h"
#include "./BSP/CD4051B/cd4051b.h"
#include "./BSP/AD7606/AD7606.h"
#include "./SYSTEM/spi3/spi3.h"
#include "./BSP/TP1000/TP1000.h"
void CollectionStar(void); /* 开始采样函数 */
void CollectionStop(void); /* 停止采样函数 */
void CollectionStar(void);
void OffLineTempStart(void); /*断线检测、温度检测开始函数 */
int main(void)
{
HAL_Init();
HAL_Delay(1000); /* 延时等待晶振起振 */
sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
Data_to_ADbuf(); /* 初始化数组 */
HAL_Delay(1000); /* 延时等待晶振起振 */
MX_USB_DEVICE_Init(); /* USB初始化 */
HAL_Delay(30); /* 延时等待usb初始化完成 */
usart_init(115200); /* 串口初始化为115200 */
MX_ADC3_Init(); /* adc3初始化 */
CD4051B_Init(); /* cd4051b初始化 */
TP1000_SPI3_Init(); /* SPI3初始化 */
TP1000_SPI3_NSS_Init(); /* SPI3片选引脚初始化 */
TP1000_Init(); /* TP1000初始化 */
MX_FSMC_Init(); /* 初始化FSMC */
AD7606_Init(); /* 初始化AD7606 */
OffLineTempStart(); /* 断线检测、温度检测开始 */
while (1)
{
/* 循环等待判断USB是否接受到消息 接收到消息标志位Control_Ins_Flag = 1*/
if(Control_Ins_Flag==1){
Instruct_Judgment(); //处理USB传输的指令
/* 判断是否采样 */
if(sampling_control==1){
CollectionStar(); //开始采样
}
else if(sampling_control==0){
CollectionStop(); //停止采样
}
Control_Ins_Flag = 0; //修改标志位,防止重复进入
}
}
}
/*
线
*/
void CollectionStar(void){
/* AD7606振动采集函数 包含转速采集 */
AD7606_StartRecord(); /* 开始采集 */
}
/*
*/
void CollectionStop(void){
AD7606_StopRecord();
OffLineTempStart();
}
void OffLineTempStart(void){
/* 调用断线检测函数 将结果保存在数组中*/
DetectionResults results = OffLineDetection(); // 调用函数并接收返回的结果
DataArray[6172] = results.result1; // 结果以LSB格式保存
DataArray[14396] = results.result1; // 结果以LSB格式保存
/* 调用温度检测函数 将结果保存在数组中*/
tp1000_cs_drdy TP1000Results1 = Get_Hardware_SPI3_Temp(); //调用函数并接收返回的结果
tp1000_cs_drdy TP1000Results2 = Get_Hardware_SPI3_Temp(); //调用函数并接收返回的结果
tp1000_cs_drdy TP1000Results = Get_Hardware_SPI3_Temp(); //调用函数并接收返回的结果
/* 将f_temperature转换为字符串并存入数组 */
DataArray[7200] = TP1000Results.f_temperature1[0];
DataArray[7201] = TP1000Results.f_temperature1[1];
DataArray[7202] = TP1000Results.f_temperature2[0];
DataArray[7203] = TP1000Results.f_temperature2[1];
DataArray[7204] = TP1000Results.f_temperature3[0];
DataArray[7205] = TP1000Results.f_temperature3[1];
DataArray[15424] = TP1000Results.f_temperature1[0];
DataArray[15425] = TP1000Results.f_temperature1[1];
DataArray[15426] = TP1000Results.f_temperature2[0];
DataArray[15427] = TP1000Results.f_temperature2[1];
DataArray[15428] = TP1000Results.f_temperature3[0];
DataArray[15429] = TP1000Results.f_temperature3[1];
}
void delay_us(__IO uint32_t delay)
{
int last, curr, val;
int temp;
while (delay != 0)
{
temp = delay > 900 ? 900 : delay;
last = SysTick->VAL;
curr = last - CPU_FREQUENCY_MHZ * temp;
if (curr >= 0)
{
do
{
val = SysTick->VAL;
}
while ((val < last) && (val >= curr));
}
else
{
curr += CPU_FREQUENCY_MHZ * 1000;
do
{
val = SysTick->VAL;
}
while ((val <= last) || (val > curr));
}
delay -= temp;
}
}