#3 Добавлены файлы для реализации алгоритмов (не все готово)
Основные функции по файлам: - tester_adc_func Cодержит функции для управления АЦП и DMA. Для DMA есть хендлер (ADC_DMA_Handler), который перекидывает готовую половину DMA буфера в структуру АЦП Функция ADC_DMA_ReadForPeak стащена с МЗКТЭ и пока просто простаивает и ждет пока буффер заполниться, но можно потом добавить какую-то обрбаотку буфера, пока он еще заполяется. После окончания работы АЦП эта функция находит максимальное зачение и рассчитывает среднее значение в этом "пике" Добавлена функция ADC_ReadContinuous, которая считывает АЦП в континуес режиме, значение запихивает в буффер. Прерывается при таймауте.: - tester_func Cодержит функции для тестирования диодов: в обратном подключении (TESTER_TestDiode_NegativePower), в прямом подключении (TESTER_TestDiode_PositivePower), при переходе от прямого к обратному (TESTER_TestDiode_PosNegPower). Для работы АЦП, вызывает функции из tester_adc_func. Пока всё максимально примитивно, надо будет доработать - tester_main Содержит функции инициализации, подготовка к циклу и главный цикл тестер. По флагам вызываются соответствующие функции тестирования диодов из tester_func. Все функции этого файла вызываются в main.c. -tester_config.h Пока содержит настройки для тестера: пины для ключей, состяония подключенного и отключенного питания, которые подключают питание, настройки для АЦП
This commit is contained in:
parent
51b862fbb7
commit
8326ea8a8c
@ -98,7 +98,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
|
||||
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
|
||||
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
||||
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
||||
hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
||||
hdma_adc1.Init.Mode = DMA_NORMAL;
|
||||
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
|
||||
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
|
||||
{
|
||||
|
@ -27,7 +27,7 @@
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "rs_message.h"
|
||||
#include "tester_adc_func.h"
|
||||
#include "tester_main.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@ -103,23 +103,18 @@ int main(void)
|
||||
/* USER CODE BEGIN 2 */
|
||||
// HAL_ADC_Start_DMA(&hadc1, (uint32_t *)buff, ADC_BUFF_SIZE);
|
||||
// HAL_TIM_Base_Start_IT(&htim3);
|
||||
TESTER_ADC_StructInit(&tester_adc);
|
||||
TESTER_Init(&TESTER);
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
TESTER_pre_while(&TESTER);
|
||||
while (1)
|
||||
{
|
||||
if(delay_en)
|
||||
msDelay(delay);
|
||||
// HAL_UART_Transmit(&huart1, (uint8_t *)"axaxa", 5, 100);
|
||||
TESTER_main_delay(&TESTER);
|
||||
TESTER_main_while(&TESTER);
|
||||
HAL_UART_Transmit(&huart1, (uint8_t *)"axaxa", 5, 100);
|
||||
|
||||
ADC_DMA_StartRead(&tester_adc);
|
||||
for(int i = 0; i < before_pulse_delay; i++);
|
||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 1);
|
||||
for(int i = 0; i < pulse_delay; i++);
|
||||
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 0);
|
||||
ADC_DMA_ReadWhileDMA(&tester_adc, 1000);
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
|
@ -77,17 +77,10 @@ void TESTER_ADC_StructInit(TESTER_ADCTypeDef *adc)
|
||||
{
|
||||
ClearStruct(*adc);
|
||||
adc->hadc = &hadc1;
|
||||
adc->chAdc.pulse_width = 4;
|
||||
adc->filter.array_size = FOSTER_STUDENT_N;
|
||||
adc->chAdc.ChMask = ADC_MEASURE_CHANNEL_0;
|
||||
|
||||
#ifdef FOSTER_STUDENT_USER_T_CRITICAL
|
||||
adc->filter.t_critical = FOSTER_STUDENT_USER_T_CRITICAL;
|
||||
#else
|
||||
adc->filter.precise_table_ind = 2;
|
||||
#endif
|
||||
// adc->DMA_HalfBuff = ADC_DMA_HalfBuff;
|
||||
// adc->DMA_Buff = ADC_DMA_Buff;
|
||||
adc->chAdc.s.pulse_width = TESTER_PULES_EXPETCED_WIDTH;
|
||||
adc->chAdc.s.ADC_calibr = ADC_VALUE_CALIBR;
|
||||
adc->chAdc.s.ADC_zero = ADC_VALUE_ZERO;
|
||||
adc->chAdc.s.U_step = ADC_U_CALIBR/adc->chAdc.s.ADC_calibr;
|
||||
}
|
||||
|
||||
|
||||
@ -146,7 +139,7 @@ void ADC_DMA_Fuel_Cell_Reset(TESTER_ADCChannelTypeDef *adc_fc)
|
||||
adc_fc->ADC_Filtered = 0;
|
||||
adc_fc->ADC_Max = 0;
|
||||
adc_fc->ADC_Min = 0;
|
||||
adc_fc->max_value_ind = 0;
|
||||
adc_fc->pulse_peak_ind = 0;
|
||||
adc_fc->state = 0;
|
||||
}
|
||||
|
||||
@ -162,96 +155,8 @@ void ADC_DMA_Channels_Prepare(TESTER_ADCChannelTypeDef *adc_fuel_cells, uint8_t
|
||||
}
|
||||
}
|
||||
|
||||
//uint8_t FosterStudent(TESTER_ADCChannelTypeDef *adc_fc, TESTER_ADCFilterTypeDef *Filter, uint32_t ind)
|
||||
//{
|
||||
//#ifndef FOSTER_STUDENT_USER_T_CRITICAL
|
||||
// uint32_t t_critical[] = FOSTER_STUDENT_T_CRITICALS;
|
||||
//#endif //FOSTER_STUDENT_USER_T_CRITICAL
|
||||
// uint8_t res = 0;
|
||||
//
|
||||
// uint8_t m = 0;
|
||||
// uint8_t l = 0;
|
||||
//
|
||||
// uint16_t max = adc_fc->ADC_Buff[ind];
|
||||
// uint16_t min = adc_fc->ADC_Buff[ind];
|
||||
//
|
||||
// int16_t d_sum = 0;
|
||||
// uint32_t t;
|
||||
//
|
||||
// uint16_t arr_size;
|
||||
// if(ind < Filter->array_size)
|
||||
// return 0xFF;
|
||||
//
|
||||
// for(int i = ind; i > ind - Filter->array_size; i--)
|
||||
// {
|
||||
//
|
||||
// if(adc_fc->ADC_Buff[i] > max)
|
||||
// {
|
||||
// max = adc_fc->ADC_Buff[i];
|
||||
// m = 1;
|
||||
// }
|
||||
// else
|
||||
// m = 0;
|
||||
// if(adc_fc->ADC_Buff[i] < min)
|
||||
// {
|
||||
// min = adc_fc->ADC_Buff[i];
|
||||
// l = 1;
|
||||
// }
|
||||
// else
|
||||
// l = 0;
|
||||
// d_sum += (m-l);
|
||||
// }
|
||||
//
|
||||
//#define fixed_base 1000
|
||||
// if(d_sum < 0)
|
||||
// d_sum = -d_sum;
|
||||
// t = d_sum*fixed_base*fixed_base/FOSTER_STUDENT_MSE;
|
||||
//
|
||||
// Filter->t_current = t;
|
||||
//#ifndef FOSTER_STUDENT_USER_T_CRITICAL
|
||||
// Filter->t_critical = t_critical[Filter->precise_table_ind];
|
||||
//#endif //FOSTER_STUDENT_USER_T_CRITICAL
|
||||
//
|
||||
//
|
||||
// if(Filter->t_current > Filter->t_critical)
|
||||
// {
|
||||
// res = 1;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// res = 0;
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
// return res;
|
||||
//}
|
||||
|
||||
|
||||
void ADC_DMA_WaitForStableVoltage(TESTER_ADCChannelTypeDef *adc_fc, TESTER_ADCFilterTypeDef *Filter, uint32_t ind)
|
||||
{
|
||||
// if(FosterStudent(adc_fc, Filter, ind) == 0)
|
||||
// {
|
||||
// /* Сохраняем индекс еще стабильного напряжения */
|
||||
// adc_fc->stable_start_ind = ind - Filter->array_size/2;
|
||||
// /* Переключение на стабильное напряжение найдено */
|
||||
// adc_fc->state = WAIT_FOR_DROP;
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
void ADC_DMA_WaitForDropVoltage(TESTER_ADCChannelTypeDef *adc_fc, TESTER_ADCFilterTypeDef *Filter, uint32_t ind)
|
||||
{
|
||||
// if(FosterStudent(adc_fc, Filter, ind) == 1)
|
||||
// {
|
||||
// /* Сохраняем индекс еще стабильного напряжения */
|
||||
// adc_fc->stable_end_ind = ind-Filter->array_size/2;
|
||||
// /* Переключение на стабильное напряжение найдено */
|
||||
// adc_fc->state = STABLE_FOUND;
|
||||
// }
|
||||
}
|
||||
|
||||
void ADC_DMA_CalcStabilized(TESTER_ADCChannelTypeDef *adc_fc)
|
||||
void ADC_DMA_ProcessBufferForPeak(TESTER_ADCChannelTypeDef *adc_fc)
|
||||
{
|
||||
uint16_t tmp_val = 0;
|
||||
uint32_t val_sum = 0;
|
||||
@ -267,80 +172,45 @@ void ADC_DMA_CalcStabilized(TESTER_ADCChannelTypeDef *adc_fc)
|
||||
if(tmp_val > adc_fc->ADC_Max)
|
||||
{
|
||||
adc_fc->ADC_Max = tmp_val;
|
||||
adc_fc->max_value_ind = i;
|
||||
|
||||
if(adc_fc->s.expected_pulse_sign == 0)
|
||||
adc_fc->pulse_peak_ind = i;
|
||||
}
|
||||
|
||||
/* Обновление минимального значения */
|
||||
if(tmp_val < adc_fc->ADC_Min)
|
||||
{
|
||||
adc_fc->ADC_Min = tmp_val;
|
||||
adc_fc->pulse_peak_ind = i;
|
||||
|
||||
if(adc_fc->s.expected_pulse_sign == 1)
|
||||
adc_fc->pulse_peak_ind = i;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Расчет среднего значения в пике */
|
||||
for(int i = (adc_fc->max_value_ind - adc_fc->pulse_width)/2; i < (adc_fc->max_value_ind + adc_fc->pulse_width/2); i++)
|
||||
for(int i = (adc_fc->pulse_peak_ind - adc_fc->s.pulse_width/2); i < (adc_fc->pulse_peak_ind + adc_fc->s.pulse_width/2); i++)
|
||||
{
|
||||
tmp_val = adc_fc->ADC_Buff[i];
|
||||
/* Накопление значений для расчета среднего */
|
||||
val_sum += tmp_val;
|
||||
}
|
||||
adc_fc->ADC_Filtered = val_sum/(adc_fc->pulse_width);
|
||||
adc_fc->ADC_Filtered = val_sum/(adc_fc->s.pulse_width);
|
||||
|
||||
}
|
||||
adc_fc->U_Current = adc_fc->s.U_step*adc_fc->ADC_Filtered;
|
||||
|
||||
void ADC_DMA_ProcessSingleBuffer(TESTER_ADCChannelTypeDef *adc_fc)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ADC_DMA_ProcessBuffer(TESTER_ADCTypeDef *adc)
|
||||
{
|
||||
ADC_DMA_ProcessSingleBuffer(&adc->chAdc);
|
||||
}
|
||||
|
||||
void ADC_DMA_BufferHandler(TESTER_ADCChannelTypeDef *adc_fc, TESTER_ADCFilterTypeDef *Filter, uint32_t ind)
|
||||
{
|
||||
// switch(adc_fc->state)
|
||||
// {
|
||||
// /* Канал не проверяется */
|
||||
// case NOT_CHECKING:
|
||||
// break;
|
||||
//
|
||||
// /* Пока на каналах не зарядится кондер */
|
||||
// case WAIT_FOR_STABLE:
|
||||
//// ADC_DMA_WaitForStableVoltage(adc_fc, Filter, ind);
|
||||
// break;
|
||||
//
|
||||
// /* Проверка пока на первом канале не начнет разряжаться кондер */
|
||||
// case WAIT_FOR_DROP:
|
||||
//// ADC_DMA_WaitForDropVoltage(adc_fc, Filter, ind);
|
||||
// break;
|
||||
//
|
||||
// /* Стабильное напряжение найдено */
|
||||
// case STABLE_FOUND:
|
||||
// /* Стабильное напряжение НЕ найдено */
|
||||
// case STABLE_NOT_FOUND:
|
||||
// /* Конец стабильного напряжения НЕ найден */
|
||||
// case DROP_NOT_FOUND:
|
||||
// break;
|
||||
//
|
||||
//
|
||||
// /* Если состояние неопределенное */
|
||||
// default:
|
||||
// adc_fc->state = NOT_CHECKING;
|
||||
// break;
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Считывать АЦП до тех пор, пока буфер DMA не заполнится и не будет обработан
|
||||
* @brief Считать буфер DMA и найти в нем пик (скачок напряжения)
|
||||
* @details Основа функции взята из МЗКТЭ. Здесь немного неоптимизированная:
|
||||
* в while(1) просто ждеться когда DMA не будет заполнен,
|
||||
* потом можно будет сделать какую-то обработку пока он заполняется, чтобы не простаивать.
|
||||
*/
|
||||
HAL_StatusTypeDef ADC_DMA_ReadWhileDMA(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
{
|
||||
uint32_t tickstart = HAL_GetTick();
|
||||
|
||||
@ -398,7 +268,7 @@ HAL_StatusTypeDef ADC_DMA_ReadWhileDMA(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
if(run_adc_check)
|
||||
{
|
||||
/* Вызов обработчиков буфера DMA для каждого канала, если он выбран */
|
||||
ADC_DMA_BufferHandler(&adc->chAdc, &adc->filter, adc_buff_ind);
|
||||
// ADC_DMA_BufferHandler(&adc->chAdc, &adc->filter, adc_buff_ind);
|
||||
|
||||
|
||||
|
||||
@ -451,7 +321,36 @@ HAL_StatusTypeDef ADC_DMA_ReadWhileDMA(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
||||
}
|
||||
}
|
||||
|
||||
ADC_DMA_CalcStabilized(&adc->chAdc);
|
||||
ADC_DMA_ProcessBufferForPeak(&adc->chAdc);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Считывать АЦП, который работает в континуес режиме
|
||||
*/
|
||||
HAL_StatusTypeDef ADC_ReadContinuous(TESTER_ADCTypeDef *adc, uint32_t buff_size, uint32_t tickstart, uint32_t timeout)
|
||||
{
|
||||
HAL_StatusTypeDef res = HAL_OK;
|
||||
uint16_t val_sum;
|
||||
if(buff_size == 0)
|
||||
return HAL_ERROR;
|
||||
|
||||
for(int i = 0; i < buff_size; i++)
|
||||
{
|
||||
if(HAL_GetTick() - tickstart > timeout)
|
||||
{
|
||||
res = HAL_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
|
||||
HAL_ADC_PollForConversion(adc->hadc, 1);
|
||||
adc->chAdc.ADC_Buff[i] = HAL_ADC_GetValue(adc->hadc);
|
||||
val_sum += adc->chAdc.ADC_Buff[i];
|
||||
}
|
||||
|
||||
adc->chAdc.ADC_Filtered = val_sum/(buff_size);
|
||||
adc->chAdc.U_Current = adc->chAdc.s.U_step*adc->chAdc.ADC_Filtered;
|
||||
return res;
|
||||
}
|
||||
|
@ -13,40 +13,6 @@
|
||||
|
||||
#include "mylibs_include.h"
|
||||
|
||||
#define ADC_MEASURE_CHANNEL_0_Pos 0x00
|
||||
#define ADC_MEASURE_CHANNEL_1_Pos 0x01
|
||||
#define ADC_MEASURE_CHANNEL_2_Pos 0x02
|
||||
#define ADC_MEASURE_CHANNEL_3_Pos 0x03
|
||||
|
||||
#define ADC_MEASURE_CHANNEL_0 (0x01 << ADC_MEASURE_CHANNEL_0_Pos)
|
||||
#define ADC_MEASURE_CHANNEL_1 (0x01 << ADC_MEASURE_CHANNEL_1_Pos)
|
||||
#define ADC_MEASURE_CHANNEL_2 (0x01 << ADC_MEASURE_CHANNEL_2_Pos)
|
||||
#define ADC_MEASURE_CHANNEL_3 (0x01 << ADC_MEASURE_CHANNEL_3_Pos)
|
||||
#define ADC_CH_IGNORE NULL // должно быть NULL!!!
|
||||
|
||||
#define Measure_Get_Channel(_chPtr_) (_chPtr_)->Tadc->chAdc
|
||||
#define Measure_Get_Voltage(_chPtr_) ((_chPtr_)->Tadc->chAdc->U_Current)
|
||||
#define Measure_Get_Zero(_chPtr_) ((_chPtr_)->Tadc->chAdc->refADC_zero)
|
||||
#define Measure_Get_Calibr(_chPtr_) ((_chPtr_)->Tadc->chAdc->refADC_calibr)
|
||||
#define Measure_Get_VoltStep(_chPtr_) ((_chPtr_)->Tadc->chAdc->refU_step)
|
||||
#define Measure_Get_Filtered(_chPtr_) ((_chPtr_)->Tadc->chAdc->ADC_Filtered)
|
||||
|
||||
#define Measure_Calc_CalibrDiff(_chPtr_) abs((int)Measure_Get_Calibr(_chPtr_) - Measure_Get_Zero(_chPtr_))
|
||||
#define Measure_Calc_FilterDiff(_chPtr_) abs((int)Measure_Get_Filtered(_chPtr_) - Measure_Get_Zero(_chPtr_))
|
||||
#define Measure_Calc_Voltage(_chPtr_) ((float)Measure_Calc_FilterDiff(_chPtr_)*Measure_Get_VoltStep(_chPtr_))
|
||||
|
||||
//#define ADC_GetChannel(_AdcChPtr_) (_AdcChPtr_)->Tadc->chAdc
|
||||
////#define Measure_Get_Voltage(_AdcChPtr_) ((_AdcChPtr_)->Tadc->chAdc->U_Current)
|
||||
////#define Measure_Get_Zero(_AdcChPtr_) ((_AdcChPtr_)->Tadc->chAdc->refADC_zero)
|
||||
////#define Measure_Get_Calibr(_AdcChPtr_) ((_AdcChPtr_)->Tadc->chAdc->refADC_calibr)
|
||||
////#define Measure_Get_VoltStep(_AdcChPtr_) ((_AdcChPtr_)->Tadc->chAdc->refU_step)
|
||||
////#define Measure_Get_Filtered(_AdcChPtr_) ((_AdcChPtr_)->Tadc->chAdc->ADC_Filtered)
|
||||
|
||||
//#define Channel_Calc_Diff(_AdcChPtr_, _value_) ((int)(_value_) - (_AdcChPtr_)->refADC_zero)
|
||||
//#define Channel_Calc_CalibrValue(_AdcChPtr_) (abs(Channel_Calc_Diff((_AdcChPtr_), (_AdcChPtr_)->refADC_calibr)) )
|
||||
//#define Channel_Calc_AdcValue(_AdcChPtr_) (abs(Channel_Calc_Diff((_AdcChPtr_), (_AdcChPtr_)->ADC_Filtered)) )
|
||||
//#define Channel_Calc_Voltage(_AdcChPtr_) ((float)Channel_Calc_AdcValue(_AdcChPtr_)*(_AdcChPtr_)->refU_step)
|
||||
|
||||
typedef uint16_t ADC_BuffTypeDef[ADC_BUFF_SIZE];
|
||||
|
||||
typedef enum
|
||||
@ -59,28 +25,30 @@ typedef enum
|
||||
ADC_DONE = 5,
|
||||
}ADC_ChannelState;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ADC_BuffTypeDef ADC_Buff;
|
||||
uint16_t ADC_Filtered;
|
||||
uint16_t ADC_zero;
|
||||
uint16_t ADC_calibr;
|
||||
float U_step;
|
||||
unsigned pulse_width;
|
||||
unsigned expected_pulse_sign;
|
||||
}ADC_ParamsTypeDef;
|
||||
typedef struct
|
||||
{
|
||||
float U_Current;
|
||||
|
||||
|
||||
|
||||
|
||||
/* Parameter for calc voltage */
|
||||
uint16_t refADC_zero;
|
||||
uint16_t refADC_calibr;
|
||||
float refU_step;
|
||||
uint16_t ADC_Filtered;
|
||||
ADC_BuffTypeDef ADC_Buff;
|
||||
|
||||
uint16_t ADC_Max;
|
||||
uint16_t ADC_Min;
|
||||
|
||||
unsigned pulse_width;
|
||||
unsigned max_value_ind;
|
||||
|
||||
uint8_t ChMask;
|
||||
/* Parameter for calc voltage */
|
||||
ADC_ParamsTypeDef s;
|
||||
|
||||
|
||||
unsigned pulse_peak_ind;
|
||||
|
||||
ADC_ChannelState state;
|
||||
|
||||
ADCChannel_TrackerTypeDef adc_ch_err;
|
||||
@ -106,7 +74,7 @@ typedef struct
|
||||
|
||||
ADC_HandleTypeDef *hadc;
|
||||
|
||||
TESTER_ADCFilterTypeDef filter;
|
||||
// TESTER_ADCFilterTypeDef filter;
|
||||
|
||||
struct
|
||||
{
|
||||
@ -128,11 +96,12 @@ void TESTER_ADC_StructInit(TESTER_ADCTypeDef *adc);
|
||||
|
||||
void ADC_DMA_Handler(TESTER_ADCTypeDef *adc);
|
||||
|
||||
void ADC_DMA_ProcessBuffer(TESTER_ADCTypeDef *adc);
|
||||
void ADC_DMA_ProcessBufferForPeak(TESTER_ADCChannelTypeDef *adc_fc);
|
||||
void ADC_DMA_Channels_Prepare(TESTER_ADCChannelTypeDef *adc_fuel_cells, uint8_t MaskForChannels, uint8_t state);
|
||||
HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc);
|
||||
HAL_StatusTypeDef ADC_DMA_ReadWhileDMA(TESTER_ADCTypeDef *adc, uint32_t Timeout);
|
||||
HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout);
|
||||
|
||||
HAL_StatusTypeDef ADC_ReadContinuous(TESTER_ADCTypeDef *adc, uint32_t buff_size, uint32_t tickstart, uint32_t timeout);
|
||||
|
||||
#ifndef printf_adc_result
|
||||
#define printf_adc_result(...)
|
||||
|
@ -11,6 +11,36 @@
|
||||
#ifndef _TESTER_CONFIG_H_
|
||||
#define _TESTER_CONFIG_H_
|
||||
|
||||
#define TESTER_PULES_EXPETCED_WIDTH 4 ///< Предполагаемая длительность пика в отчетах ацп
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup TESTER_POWER_SW_CONFIG Configs for switches for power
|
||||
* @ingroup TESTER_CONFIGS
|
||||
* @brief Конфигурации для ключей питания
|
||||
@{
|
||||
*/
|
||||
|
||||
/* Состояния ключей для подключения и откючения питания */
|
||||
#define POWER_CONNECT 1 ///< Питание подключено в данном состоянии пина
|
||||
#define POWER_DISCONNECT 0 ///< Питание отключено в данном состоянии пина
|
||||
|
||||
/* Ключи для подключения положительного питания к диоду */
|
||||
#define SWITCH_DC_POSITIVE_1_Port GPIOC ///< Порт пина первого ключа для положительного питания
|
||||
#define SWITCH_DC_POSITIVE_1_Pin GPIO_PIN_13 ///< Пин первого ключа для положительного питания
|
||||
#define SWITCH_DC_POSITIVE_2_Port GPIOA ///< Порт пина второго ключа для положительного питания
|
||||
#define SWITCH_DC_POSITIVE_2_Pin GPIO_PIN_11 ///< Пин второго ключа для положительного питания
|
||||
|
||||
|
||||
/* Ключи для подключения отрицательного питания к диоду */
|
||||
#define SWITCH_DC_NEGATIVE_1_Port GPIOC ///< Порт пина первого ключа для отрицательного питания
|
||||
#define SWITCH_DC_NEGATIVE_1_Pin GPIO_PIN_13 ///< Пин первого ключа для отрицательного питания
|
||||
#define SWITCH_DC_NEGATIVE_2_Port GPIOA ///< Порт пина второго ключа для отрицательного питания
|
||||
#define SWITCH_DC_NEGATIVE_2_Pin GPIO_PIN_11 ///< Пин первого ключа для отрицательного питания
|
||||
|
||||
/** TESTER_POWER_SW_CONFIG
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup TESTER_ADC_CONFIG Configs for ADC
|
||||
@ -19,41 +49,15 @@
|
||||
@{
|
||||
*/
|
||||
|
||||
#define ADC_BUFF_SIZE (500) ///< Размер буфера АЦП
|
||||
#define ADC_DMA_BUFF_SIZE (ADC_BUFF_SIZE*4) ///< Размер буфера ДМА (4 канала)
|
||||
#define ADC_BUFF_SIZE (1000) ///< Размер буфера АЦП
|
||||
#define ADC_DMA_BUFF_SIZE (ADC_BUFF_SIZE) ///< Размер буфера ДМА (1 канал)
|
||||
|
||||
#define ADC_U_CALIBR ((float)1.1) ///< Напряжение, которое подается при калибровке
|
||||
#define ADC_U_CALIBR ((float)3.0) ///< Калибровочное напряжение
|
||||
#define ADC_VALUE_CALIBR (0xFFF) ///< Значение АЦП при калибровочном напряжении @ref ADC_U_CALIBR
|
||||
#define ADC_VALUE_ZERO (0) ///< Значение АЦП при нулевом напряжении
|
||||
|
||||
#define ADC_READ_TIMEOUT_MS 20 ///< Таймаут на ожидание разрядки конденсатора
|
||||
#define ADC_ZERO_WAIT_TIMEOUS_MS 100 ///< Таймаут на ожидание нуля (при калибровке)
|
||||
#define ADC_READ_TIMEOUT_MS 20 ///< Таймаут на ожидание разрядки конденсатора
|
||||
|
||||
#define FOSTER_STUDENT_N 40 ///< Выборка для определения начала разрядки конденсатора
|
||||
#define FOSTER_STUDENT_MSE 2561 /*!< @brief Среднеквадратическая ошибка для выборки размером FOSTER_STUDENT_N, умноженная на 1000
|
||||
@details Выражение для СКО: sqrt(2*ln(N) - 0,8456)
|
||||
URL: https://old.stgau.ru/company/personal/user/7750/files/lib/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5%20%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B%20%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D1%82%D0%B5%D0%BC%D0%B0%201.pdf
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Критическое значение Стьюдента
|
||||
* @details Используется для определения разрядки конденсатора.
|
||||
* Записывается в единицах*1000
|
||||
* @note Если закомментировать, то будет использоваться таблица указанная в @ref FOSTER_STUDENT_T_CRITICALS
|
||||
с индексом, указанным в @ref precise_table_ind
|
||||
*/
|
||||
#define FOSTER_STUDENT_USER_T_CRITICAL 1600//2650//2500
|
||||
/**
|
||||
* @brief Критическое значение Стьюдента для калибровки
|
||||
* @details Используется для определения разрядки конденсатора при калибровке.
|
||||
* Записывается в единицах*1000
|
||||
* @note Если закомментировать, то будет использоваться значение указанное в @ref FOSTER_STUDENT_USER_T_CRITICAL
|
||||
*/
|
||||
//#define FOSTER_STUDENT_USER_T_CRITICAL_CALIBR 2600//2650//2500
|
||||
/**
|
||||
* @brief Таблица критических значений Стьюдента с разной погрешностью
|
||||
* @details Используется для определения разрядки конденсатора при закомментированном
|
||||
* @ref FOSTER_STUDENT_USER_T_CRITICAL
|
||||
*/
|
||||
#define FOSTER_STUDENT_T_CRITICALS {257, 688, 1328, 1729, 2093, 2539}
|
||||
/** TESTER_ADC_CONFIG
|
||||
* @}
|
||||
*/
|
||||
|
154
diode_tester/Core/Tester_main/tester_func.c
Normal file
154
diode_tester/Core/Tester_main/tester_func.c
Normal file
@ -0,0 +1,154 @@
|
||||
#include "tester_func.h"
|
||||
|
||||
TESTER_TestHandleTypeDef hTestDiode;
|
||||
|
||||
/**s
|
||||
* @brief Инициализация хендла тестера диодов
|
||||
*/
|
||||
void TESTER_HandleInit(TESTER_TestHandleTypeDef *htest)
|
||||
{
|
||||
htest->adc = &tester_adc;
|
||||
|
||||
TESTER_ADC_StructInit(htest->adc);
|
||||
|
||||
htest->DCNegSw.SW1_Port = SWITCH_DC_NEGATIVE_1_Port;
|
||||
htest->DCNegSw.SW2_Port = SWITCH_DC_NEGATIVE_2_Port;
|
||||
htest->DCNegSw.SW1_Pin = SWITCH_DC_NEGATIVE_1_Pin;
|
||||
htest->DCNegSw.SW2_Pin = SWITCH_DC_NEGATIVE_2_Pin;
|
||||
|
||||
|
||||
htest->DCPosSw.SW1_Port = SWITCH_DC_POSITIVE_1_Port;
|
||||
htest->DCPosSw.SW2_Port = SWITCH_DC_POSITIVE_2_Port;
|
||||
htest->DCPosSw.SW1_Pin = SWITCH_DC_POSITIVE_1_Pin;
|
||||
htest->DCPosSw.SW2_Pin = SWITCH_DC_POSITIVE_2_Pin;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Тест диодов: подключение прямого напряжения
|
||||
*/
|
||||
void TESTER_TestDiode_PositivePower(TESTER_TestHandleTypeDef *htest)
|
||||
{
|
||||
/* Включение континиус АЦП */
|
||||
HAL_ADC_Start(htest->adc->hadc);
|
||||
|
||||
/* Задержка, перед подключением питания */
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_connect);
|
||||
|
||||
/* Подкючение питания к диоду */
|
||||
TESTER_Connect_Power(&htest->DCPosSw);
|
||||
|
||||
|
||||
/* Подключение питания на определенное время */
|
||||
uint32_t tickstart = HAL_GetTick();
|
||||
HAL_StatusTypeDef res;
|
||||
while(1)
|
||||
{
|
||||
/* Считывание АЦП пока таймаут истечет */
|
||||
res = ADC_ReadContinuous(htest->adc, htest->continuous_buff_size, tickstart, htest->SwTimings.msticks_for_positive_dc);
|
||||
|
||||
if(res != HAL_OK)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Отключение питания от диода */
|
||||
TESTER_Disconnect_Power(&htest->DCPosSw);
|
||||
|
||||
/* Выключение континиус АЦП */
|
||||
HAL_ADC_Stop(htest->adc->hadc);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Тест диодов: подключение обратного напряжения
|
||||
*/
|
||||
void TESTER_TestDiode_NegativePower(TESTER_TestHandleTypeDef *htest)
|
||||
{
|
||||
/* Включение АЦП */
|
||||
ADC_DMA_StartRead(htest->adc);
|
||||
|
||||
/* Задержка, перед подключением питания */
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_connect);
|
||||
|
||||
/* Подкючение питания к диоду */
|
||||
TESTER_Connect_Power(&htest->DCNegSw);
|
||||
|
||||
/* Подключение питания на определенное время */
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_disconnect);
|
||||
|
||||
/* Отключение питания от диода */
|
||||
TESTER_Disconnect_Power(&htest->DCNegSw);
|
||||
|
||||
/* Обработка DMA */
|
||||
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Тест диодов: подключение прямого, а потом обратного напряжения
|
||||
*/
|
||||
void TESTER_TestDiode_PosNegPower(TESTER_TestHandleTypeDef *htest)
|
||||
{
|
||||
|
||||
/* Задержка, перед подключением питания */
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_connect);
|
||||
|
||||
/* Подкючение питания к диоду */
|
||||
TESTER_Connect_Power(&htest->DCPosSw);
|
||||
|
||||
/* Подключение питания на определенное время */
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_reconnect);
|
||||
|
||||
/* Включение АЦП */
|
||||
ADC_DMA_StartRead(htest->adc);
|
||||
|
||||
/* Отключение питания от диода */
|
||||
TESTER_Disconnect_Power(&htest->DCPosSw);
|
||||
TESTER_Connect_Power(&htest->DCNegSw);
|
||||
|
||||
/* Подключение питания на определенное время */
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_disconnect);
|
||||
|
||||
/* Отключение питания от диода */
|
||||
TESTER_Disconnect_Power(&htest->DCNegSw);
|
||||
|
||||
/* Обработка DMA */
|
||||
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Подключить питание с помощью ключей (пинов) в TESTER_PowerSwitchTypeDef
|
||||
*/
|
||||
void TESTER_Connect_Power(TESTER_PowerSwitchTypeDef *DCSw)
|
||||
{
|
||||
HAL_GPIO_WritePin(DCSw->SW1_Port, DCSw->SW1_Pin, POWER_CONNECT);
|
||||
HAL_GPIO_WritePin(DCSw->SW2_Port, DCSw->SW2_Pin, POWER_CONNECT);
|
||||
}
|
||||
/**
|
||||
* @brief Отключить питание с помощью ключей (пинов) в TESTER_PowerSwitchTypeDef
|
||||
*/
|
||||
void TESTER_Disconnect_Power(TESTER_PowerSwitchTypeDef *DCSw)
|
||||
{
|
||||
HAL_GPIO_WritePin(DCSw->SW1_Port, DCSw->SW1_Pin, POWER_DISCONNECT);
|
||||
HAL_GPIO_WritePin(DCSw->SW2_Port, DCSw->SW2_Pin, POWER_DISCONNECT);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Формирование задержки (в тиках или миллисекундная)
|
||||
*/
|
||||
void TESTER_Delay(TESTER_TicksDelayTypeDef *tickdelay)
|
||||
{
|
||||
/* Задержка, перед подключением питания */
|
||||
if(tickdelay->msdelay == 0) // если миллисекундная задержка выключена
|
||||
{
|
||||
/* Задержка, в тиках */
|
||||
for(int i = 0; i < tickdelay->ticks; i++);
|
||||
}
|
||||
else // если миллисекундная задержка включена
|
||||
{
|
||||
/* Задержка, в миллисекундах */
|
||||
msDelay(tickdelay->ticks);
|
||||
}
|
||||
}
|
76
diode_tester/Core/Tester_main/tester_func.h
Normal file
76
diode_tester/Core/Tester_main/tester_func.h
Normal file
@ -0,0 +1,76 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file tester_func.h
|
||||
* @brief Заголовочный файл для функций МЗКТ.
|
||||
**************************************************************************
|
||||
@details
|
||||
|
||||
*************************************************************************/
|
||||
|
||||
|
||||
#ifndef _TESTER_FUNC_H_
|
||||
#define _TESTER_FUNC_H_
|
||||
|
||||
#include "tester_adc_func.h"
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GPIO_TypeDef *SW1_Port;
|
||||
uint32_t SW1_Pin;
|
||||
|
||||
GPIO_TypeDef *SW2_Port;
|
||||
uint32_t SW2_Pin;
|
||||
}TESTER_PowerSwitchTypeDef;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned msdelay:1;
|
||||
uint32_t ticks;
|
||||
}TESTER_TicksDelayTypeDef;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t msticks_for_positive_dc;
|
||||
TESTER_TicksDelayTypeDef ticks_before_connect;
|
||||
TESTER_TicksDelayTypeDef ticks_before_disconnect;
|
||||
TESTER_TicksDelayTypeDef ticks_before_reconnect;
|
||||
}TESTER_SwitchTimingsTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TESTER_ADCTypeDef *adc;
|
||||
|
||||
TESTER_SwitchTimingsTypeDef SwTimings;
|
||||
|
||||
TESTER_PowerSwitchTypeDef DCPosSw;
|
||||
TESTER_PowerSwitchTypeDef DCNegSw;
|
||||
|
||||
uint32_t continuous_buff_size;
|
||||
|
||||
float DiodeVolt;
|
||||
}TESTER_TestHandleTypeDef;
|
||||
extern TESTER_TestHandleTypeDef hTestDiode;
|
||||
|
||||
|
||||
|
||||
/* Инициализация хендла тестера диодов */
|
||||
void TESTER_HandleInit(TESTER_TestHandleTypeDef *htest);
|
||||
|
||||
/* Тест диодов: подключение прямого напряжения */
|
||||
void TESTER_TestDiode_PositivePower(TESTER_TestHandleTypeDef *htest);
|
||||
/* Тест диодов: подключение обратного напряжения */
|
||||
void TESTER_TestDiode_NegativePower(TESTER_TestHandleTypeDef *htest);
|
||||
/* Тест диодов: подключение прямого, а потом обратного напряжения */
|
||||
void TESTER_TestDiode_PosNegPower(TESTER_TestHandleTypeDef *htest);
|
||||
|
||||
/* Подключить питание с помощью ключей (пинов) в TESTER_PowerSwitchTypeDef */
|
||||
void TESTER_Connect_Power(TESTER_PowerSwitchTypeDef *DCSw);
|
||||
/* Отключить питание с помощью ключей (пинов) в TESTER_PowerSwitchTypeDef */
|
||||
void TESTER_Disconnect_Power(TESTER_PowerSwitchTypeDef *DCSw);
|
||||
/* Формирование задержки перед подключением питания (в тиках или миллисекундная) */
|
||||
void TESTER_Delay(TESTER_TicksDelayTypeDef *tickdelay);
|
||||
#endif //_TESTER_FUNC_H_
|
||||
|
72
diode_tester/Core/Tester_main/tester_main.c
Normal file
72
diode_tester/Core/Tester_main/tester_main.c
Normal file
@ -0,0 +1,72 @@
|
||||
#include "tester_main.h"
|
||||
|
||||
|
||||
TESTER_ProjectTypeDef TESTER;
|
||||
|
||||
|
||||
/**s
|
||||
* @brief Инициализация всех модулей для работы тестера
|
||||
*/
|
||||
void TESTER_Init(TESTER_ProjectTypeDef *tester)
|
||||
{
|
||||
tester->delay = 250;
|
||||
tester->delay_en = 1;
|
||||
|
||||
tester->func.disable_reset_call = 1;
|
||||
tester->htest = &hTestDiode;
|
||||
TESTER_HandleInit(tester->htest);
|
||||
}
|
||||
|
||||
|
||||
/**s
|
||||
* @brief Функция подготовки тестера к while(1)
|
||||
*/
|
||||
void TESTER_pre_while(TESTER_ProjectTypeDef *tester)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Главная функция работы тестера
|
||||
*/
|
||||
void TESTER_main_while(TESTER_ProjectTypeDef *tester)
|
||||
{
|
||||
if(tester->delay_en)
|
||||
msDelay(tester->delay);
|
||||
|
||||
/* ТЕСТ В ОБРАТНОМ ВКЛЮЧЕНИИ */
|
||||
if(tester->func.test_diode_neg)
|
||||
{
|
||||
if(tester->func.disable_reset_call == 0)
|
||||
tester->func.test_diode_neg = 0;
|
||||
|
||||
TESTER_TestDiode_NegativePower(tester->htest);
|
||||
}
|
||||
|
||||
/* ТЕСТ В ПРЯМОМ ВКЛЮЧЕНИИ */
|
||||
if(tester->func.test_diode_pos)
|
||||
{
|
||||
if(tester->func.disable_reset_call == 0)
|
||||
tester->func.test_diode_pos = 0;
|
||||
|
||||
TESTER_TestDiode_PositivePower(tester->htest);
|
||||
}
|
||||
/* ТЕСТ ПЕРЕХОДА ИЗ ПРЯМОГО В ОБРАТНОЕ ВКЛЮЧЕНИЯ*/
|
||||
if(tester->func.test_diode_posneg)
|
||||
{
|
||||
if(tester->func.disable_reset_call == 0)
|
||||
tester->func.test_diode_posneg = 0;
|
||||
|
||||
TESTER_TestDiode_PosNegPower(tester->htest);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Задеркжка главного цикла
|
||||
*/
|
||||
void TESTER_main_delay(TESTER_ProjectTypeDef *tester)
|
||||
{
|
||||
if(tester->delay_en)
|
||||
msDelay(tester->delay);
|
||||
}
|
51
diode_tester/Core/Tester_main/tester_main.h
Normal file
51
diode_tester/Core/Tester_main/tester_main.h
Normal file
@ -0,0 +1,51 @@
|
||||
/**
|
||||
**************************************************************************
|
||||
* @file tester_func.h
|
||||
* @brief Заголовочный файл для функций МЗКТ.
|
||||
**************************************************************************
|
||||
@details
|
||||
|
||||
*************************************************************************/
|
||||
|
||||
|
||||
#ifndef _TESTER_MAIN_H_
|
||||
#define _TESTER_MAIN_H_
|
||||
|
||||
#include "tester_func.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief Структура для вызова различных функций
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
unsigned test_diode_neg:1;
|
||||
unsigned test_diode_posneg:1;
|
||||
unsigned test_diode_pos:1;
|
||||
|
||||
unsigned disable_reset_call:1;
|
||||
}function_calls;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
function_calls func;
|
||||
|
||||
TESTER_TestHandleTypeDef *htest;
|
||||
|
||||
uint32_t delay;
|
||||
uint32_t delay_en:1;
|
||||
}TESTER_ProjectTypeDef;
|
||||
extern TESTER_ProjectTypeDef TESTER;
|
||||
|
||||
|
||||
|
||||
/* Протестировать диод */
|
||||
void TESTER_Init(TESTER_ProjectTypeDef *tester);
|
||||
/* Подключить питание с помощью ключей (пинов) в TESTER_PowerSwitchTypeDef */
|
||||
void TESTER_pre_while(TESTER_ProjectTypeDef *tester);
|
||||
/* Отключить питание с помощью ключей (пинов) в TESTER_PowerSwitchTypeDef */
|
||||
void TESTER_main_while(TESTER_ProjectTypeDef *tester);
|
||||
/*Задеркжка главного цикла */
|
||||
void TESTER_main_delay(TESTER_ProjectTypeDef *tester);
|
||||
#endif //_TESTER_MAIN_H_
|
||||
|
@ -153,7 +153,7 @@
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>tester_adc,0x10</ItemText>
|
||||
<ItemText>tester_adc,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
@ -165,12 +165,22 @@
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>before_pulse_delay</ItemText>
|
||||
<ItemText>TESTER,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>pulse_delay</ItemText>
|
||||
<ItemText>tickstart,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>2</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>uwTick,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>3</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>timeout,0x0A</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<Tracepoint>
|
||||
@ -256,6 +266,18 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Tester_main\tester_config.h</PathWithFileName>
|
||||
<FilenameWithoutPath>tester_config.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>2</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\MyLibs\mylibs_config.h</PathWithFileName>
|
||||
<FilenameWithoutPath>mylibs_config.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
@ -263,7 +285,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>2</FileNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -275,7 +297,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -285,18 +307,6 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Tester_main\tester_config.h</PathWithFileName>
|
||||
<FilenameWithoutPath>tester_config.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
@ -312,6 +322,54 @@
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Tester_main\tester_main.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tester_main.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Tester_main\tester_main.h</PathWithFileName>
|
||||
<FilenameWithoutPath>tester_main.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Tester_main\tester_func.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tester_func.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Tester_main\tester_func.h</PathWithFileName>
|
||||
<FilenameWithoutPath>tester_func.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Core\Tester_main\tester_adc_func.c</PathWithFileName>
|
||||
<FilenameWithoutPath>tester_adc_func.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
@ -319,7 +377,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -339,7 +397,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>7</FileNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -351,7 +409,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>8</FileNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -363,7 +421,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>9</FileNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -375,7 +433,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>10</FileNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -387,7 +445,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>11</FileNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -399,7 +457,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>12</FileNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -411,7 +469,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>13</FileNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -431,7 +489,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>14</FileNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -443,7 +501,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>15</FileNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -455,7 +513,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>16</FileNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -467,7 +525,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>4</GroupNumber>
|
||||
<FileNumber>17</FileNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -487,7 +545,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>5</GroupNumber>
|
||||
<FileNumber>18</FileNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileType>2</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -507,7 +565,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>19</FileNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -519,7 +577,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>20</FileNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -531,7 +589,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>21</FileNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -543,7 +601,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>22</FileNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -555,7 +613,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>23</FileNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -567,7 +625,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>24</FileNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -579,7 +637,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>25</FileNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -591,7 +649,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>6</GroupNumber>
|
||||
<FileNumber>26</FileNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -611,7 +669,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>27</FileNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -623,7 +681,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>28</FileNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -635,7 +693,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>29</FileNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -647,7 +705,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>30</FileNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -659,7 +717,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>31</FileNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -671,7 +729,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>32</FileNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -683,7 +741,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>33</FileNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -695,7 +753,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>34</FileNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -707,7 +765,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>35</FileNumber>
|
||||
<FileNumber>39</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -719,7 +777,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>36</FileNumber>
|
||||
<FileNumber>40</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -731,7 +789,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>37</FileNumber>
|
||||
<FileNumber>41</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -743,7 +801,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>38</FileNumber>
|
||||
<FileNumber>42</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -755,7 +813,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>39</FileNumber>
|
||||
<FileNumber>43</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -767,7 +825,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>40</FileNumber>
|
||||
<FileNumber>44</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -779,7 +837,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>41</FileNumber>
|
||||
<FileNumber>45</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -791,7 +849,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>7</GroupNumber>
|
||||
<FileNumber>42</FileNumber>
|
||||
<FileNumber>46</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -811,7 +869,7 @@
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>8</GroupNumber>
|
||||
<FileNumber>43</FileNumber>
|
||||
<FileNumber>47</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
@ -385,6 +385,11 @@
|
||||
<Group>
|
||||
<GroupName>Configs</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>tester_config.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Core\Tester_main\tester_config.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>mylibs_config.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
@ -400,16 +405,31 @@
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Core\MyLibs\mylibs_include.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tester_config.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Core\Tester_main\tester_config.h</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Tester Main</GroupName>
|
||||
<Files>
|
||||
<File>
|
||||
<FileName>tester_main.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Core\Tester_main\tester_main.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tester_main.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Core\Tester_main\tester_main.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tester_func.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Core\Tester_main\tester_func.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tester_func.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\Core\Tester_main\tester_func.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>tester_adc_func.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
|
@ -14,7 +14,7 @@ Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY
|
||||
Dma.ADC1.0.Instance=DMA1_Channel1
|
||||
Dma.ADC1.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
|
||||
Dma.ADC1.0.MemInc=DMA_MINC_ENABLE
|
||||
Dma.ADC1.0.Mode=DMA_CIRCULAR
|
||||
Dma.ADC1.0.Mode=DMA_NORMAL
|
||||
Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
|
||||
Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.ADC1.0.Priority=DMA_PRIORITY_LOW
|
||||
|
Loading…
Reference in New Issue
Block a user