/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file dac.c * @brief This file provides code for the configuration * of the DAC instances. ****************************************************************************** * @attention * * Copyright (c) 2024 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "dac.h" /* USER CODE BEGIN 0 */ prox_swith_pwr_t prox_swith_pwr_A; prox_swith_pwr_t prox_swith_pwr_B; /* USER CODE END 0 */ DAC_HandleTypeDef hdac; /* DAC init function */ void MX_DAC_Init(void) { /* USER CODE BEGIN DAC_Init 0 */ /* USER CODE END DAC_Init 0 */ DAC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN DAC_Init 1 */ /* USER CODE END DAC_Init 1 */ /** DAC Initialization */ hdac.Instance = DAC; if (HAL_DAC_Init(&hdac) != HAL_OK) { Error_Handler(); } /** DAC channel OUT1 config */ sConfig.DAC_Trigger = DAC_TRIGGER_NONE; sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK) { Error_Handler(); } /** DAC channel OUT2 config */ if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_2) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN DAC_Init 2 */ /* USER CODE END DAC_Init 2 */ } void HAL_DAC_MspInit(DAC_HandleTypeDef* dacHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(dacHandle->Instance==DAC) { /* USER CODE BEGIN DAC_MspInit 0 */ /* USER CODE END DAC_MspInit 0 */ /* DAC clock enable */ __HAL_RCC_DAC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**DAC GPIO Configuration PA4 ------> DAC_OUT1 PA5 ------> DAC_OUT2 */ GPIO_InitStruct.Pin = VOUT_A_DAC1_Pin|VOUT_B_DAC2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* DAC interrupt Init */ HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 15, 0); HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); /* USER CODE BEGIN DAC_MspInit 1 */ /* USER CODE END DAC_MspInit 1 */ } } void HAL_DAC_MspDeInit(DAC_HandleTypeDef* dacHandle) { if(dacHandle->Instance==DAC) { /* USER CODE BEGIN DAC_MspDeInit 0 */ /* USER CODE END DAC_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_DAC_CLK_DISABLE(); /**DAC GPIO Configuration PA4 ------> DAC_OUT1 PA5 ------> DAC_OUT2 */ HAL_GPIO_DeInit(GPIOA, VOUT_A_DAC1_Pin|VOUT_B_DAC2_Pin); /* DAC interrupt Deinit */ HAL_NVIC_DisableIRQ(TIM6_DAC_IRQn); /* USER CODE BEGIN DAC_MspDeInit 1 */ /* USER CODE END DAC_MspDeInit 1 */ } } /* USER CODE BEGIN 1 */ void fun_ini_switch_pwr(prox_swith_pwr_t *prox_swith_pwr) { memset(prox_swith_pwr, 0, sizeof(prox_swith_pwr_t)); prox_swith_pwr->voltage_sv = 8200; } uint16_t dac_adjust = 88; void fun_ctr_switch_pwr(prox_swith_pwr_t *prox_swith_pwr) { uint16_t voltage = 0; uint16_t *pre_voltage = 0; uint8_t lm317_en = 0; uint16_t dac_data = 0; if (prox_swith_pwr->voltage_sv > PROX_SWITCH_PWR_MAX) prox_swith_pwr->voltage_sv = PROX_SWITCH_PWR_MAX; else if (prox_swith_pwr->voltage_sv < PROX_SWITCH_PWR_MIN) prox_swith_pwr->voltage_sv = PROX_SWITCH_PWR_MIN; voltage = prox_swith_pwr->voltage_sv - PROX_SWITCH_PWR_MIN; pre_voltage = &prox_swith_pwr->pre_voltage; /* voltage = &prox_swith_pwr->voltage_sv; if (*voltage > PROX_SWITCH_PWR_MAX) *voltage = PROX_SWITCH_PWR_MAX; else if (*voltage < PROX_SWITCH_PWR_MIN) *voltage = PROX_SWITCH_PWR_MIN; *voltage -= PROX_SWITCH_PWR_MIN; */ if (*pre_voltage == voltage) ;// return; *pre_voltage = voltage; if (!voltage) lm317_en = 0; else lm317_en = 1; dac_data = voltage * DAC_RANGE / VOL_RANGE; if (dac_data >= dac_adjust) dac_data -= dac_adjust; if (prox_swith_pwr == &prox_swith_pwr_A) { if (lm317_en) HAL_GPIO_WritePin(NAMUR_OUTA_EN_GPIO_Port, NAMUR_OUTA_EN_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(NAMUR_OUTA_EN_GPIO_Port, NAMUR_OUTA_EN_Pin, GPIO_PIN_RESET); HAL_DAC_Start(&hdac, DAC_CHANNEL_1); HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_data); } if (prox_swith_pwr == &prox_swith_pwr_B) { if (lm317_en) HAL_GPIO_WritePin(NAMUR_OUTB_EN_GPIO_Port, NAMUR_OUTB_EN_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(NAMUR_OUTB_EN_GPIO_Port, NAMUR_OUTB_EN_Pin, GPIO_PIN_RESET); HAL_DAC_Start(&hdac, DAC_CHANNEL_2); HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dac_data); } } /* USER CODE END 1 */