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 Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}
}