source: ctrl/firmware/Main/CubeMX/Core/Src/dac.c

Last change on this file was 107, checked in by Zed, 2 months ago

Everything works good. Fixing project.

File size: 3.8 KB
Line 
1/* USER CODE BEGIN Header */
2/**
3  ******************************************************************************
4  * @file    dac.c
5  * @brief   This file provides code for the configuration
6  *          of the DAC instances.
7  ******************************************************************************
8  * @attention
9  *
10  * Copyright (c) 2025 STMicroelectronics.
11  * All rights reserved.
12  *
13  * This software is licensed under terms that can be found in the LICENSE file
14  * in the root directory of this software component.
15  * If no LICENSE file comes with this software, it is provided AS-IS.
16  *
17  ******************************************************************************
18  */
19/* USER CODE END Header */
20/* Includes ------------------------------------------------------------------*/
21#include "dac.h"
22
23/* USER CODE BEGIN 0 */
24
25#include "adc.h"
26
27/* USER CODE END 0 */
28
29DAC_HandleTypeDef hdac1;
30
31/* DAC1 init function */
32void MX_DAC1_Init(void)
33{
34
35  /* USER CODE BEGIN DAC1_Init 0 */
36
37  /* USER CODE END DAC1_Init 0 */
38
39  DAC_ChannelConfTypeDef sConfig = {0};
40
41  /* USER CODE BEGIN DAC1_Init 1 */
42
43  /* USER CODE END DAC1_Init 1 */
44
45  /** DAC Initialization
46  */
47  hdac1.Instance = DAC1;
48  if (HAL_DAC_Init(&hdac1) != HAL_OK)
49  {
50    Error_Handler();
51  }
52
53  /** DAC channel OUT1 config
54  */
55  sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
56  sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
57  sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
58  sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;
59  sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
60  if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK)
61  {
62    Error_Handler();
63  }
64
65  /** DAC channel OUT2 config
66  */
67  if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_2) != HAL_OK)
68  {
69    Error_Handler();
70  }
71  /* USER CODE BEGIN DAC1_Init 2 */
72
73  uint32_t Voltage_mV = 6000U / 2U;       // We devide by 2, because voltage from Li-cell passes voltage divider 30k/30k (1:1)
74  uint32_t Data = (Voltage_mV * ((1U << DAC_RESOLUTION_BIT) - 1U)) / VREF;
75  HAL_StatusTypeDef r = HAL_DAC_SetValue(&hdac1, DAC_U_LIMIT_CHANNEL, DAC_ALIGN_12B_R, Data);
76  if (r == HAL_OK)
77  {
78          r = HAL_DAC_Start(&hdac1, DAC_U_LIMIT_CHANNEL);
79          if (r != HAL_OK) Error_Handler();
80  }
81  else Error_Handler();
82
83  r = HAL_DAC_SetValue(&hdac1, DAC_LOAD_I_LIMIT_CHANNEL, DAC_ALIGN_12B_R, 0U);
84  if (r == HAL_OK)
85  {
86          r = HAL_DAC_Start(&hdac1, DAC_LOAD_I_LIMIT_CHANNEL);
87          if (r != HAL_OK) Error_Handler();
88  }
89  else Error_Handler();
90
91
92
93  /* USER CODE END DAC1_Init 2 */
94
95}
96
97void HAL_DAC_MspInit(DAC_HandleTypeDef* dacHandle)
98{
99
100  GPIO_InitTypeDef GPIO_InitStruct = {0};
101  if(dacHandle->Instance==DAC1)
102  {
103  /* USER CODE BEGIN DAC1_MspInit 0 */
104
105  /* USER CODE END DAC1_MspInit 0 */
106    /* DAC1 clock enable */
107    __HAL_RCC_DAC12_CLK_ENABLE();
108
109    __HAL_RCC_GPIOA_CLK_ENABLE();
110    /**DAC1 GPIO Configuration
111    PA4     ------> DAC1_OUT1
112    PA5     ------> DAC1_OUT2
113    */
114    GPIO_InitStruct.Pin = DAC_LOAD_I_LIMIT_Pin|DAC_U_LIMIT_Pin;
115    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
116    GPIO_InitStruct.Pull = GPIO_NOPULL;
117    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
118
119  /* USER CODE BEGIN DAC1_MspInit 1 */
120
121  /* USER CODE END DAC1_MspInit 1 */
122  }
123}
124
125void HAL_DAC_MspDeInit(DAC_HandleTypeDef* dacHandle)
126{
127
128  if(dacHandle->Instance==DAC1)
129  {
130  /* USER CODE BEGIN DAC1_MspDeInit 0 */
131
132  /* USER CODE END DAC1_MspDeInit 0 */
133    /* Peripheral clock disable */
134    __HAL_RCC_DAC12_CLK_DISABLE();
135
136    /**DAC1 GPIO Configuration
137    PA4     ------> DAC1_OUT1
138    PA5     ------> DAC1_OUT2
139    */
140    HAL_GPIO_DeInit(GPIOA, DAC_LOAD_I_LIMIT_Pin|DAC_U_LIMIT_Pin);
141
142  /* USER CODE BEGIN DAC1_MspDeInit 1 */
143
144  /* USER CODE END DAC1_MspDeInit 1 */
145  }
146}
147
148/* USER CODE BEGIN 1 */
149
150/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.