325 #ifdef HAL_DAC_MODULE_ENABLED 339 #define TIMEOUT_DAC_CALIBCONFIG 1U 340 #define HFSEL_ENABLE_THRESHOLD_80MHZ 80000000U 387 if (hdac->State == HAL_DAC_STATE_RESET)
389 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 401 if (hdac->MspInitCallback == NULL)
410 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 412 hdac->MspInitCallback(hdac);
420 hdac->State = HAL_DAC_STATE_BUSY;
423 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
426 hdac->State = HAL_DAC_STATE_READY;
450 hdac->State = HAL_DAC_STATE_BUSY;
452 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 453 if (hdac->MspDeInitCallback == NULL)
458 hdac->MspDeInitCallback(hdac);
465 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
468 hdac->State = HAL_DAC_STATE_RESET;
550 hdac->State = HAL_DAC_STATE_BUSY;
553 __HAL_DAC_ENABLE(hdac, Channel);
555 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 556 if (Channel == DAC_CHANNEL_1)
559 if ((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == DAC_TRIGGER_SOFTWARE)
562 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
568 if ((hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)) == (DAC_TRIGGER_SOFTWARE << (Channel & 0x10UL)))
571 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
577 #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ 578 defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) 579 if(Channel == DAC_CHANNEL_1)
582 if ((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == DAC_CR_TEN1)
585 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
591 if ((hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)) == DAC_CR_TEN2)
594 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
601 #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) 603 if((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == (DAC_CR_TEN1 | DAC_CR_TSEL1))
606 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
610 hdac->State = HAL_DAC_STATE_READY;
635 __HAL_DAC_DISABLE(hdac, Channel);
638 hdac->State = HAL_DAC_STATE_READY;
644 #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) 664 HAL_StatusTypeDef status;
665 uint32_t tmpreg = 0U;
675 hdac->State = HAL_DAC_STATE_BUSY;
687 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN1);
692 case DAC_ALIGN_12B_R:
694 tmpreg = (uint32_t)&hdac->Instance->DHR12R1;
696 case DAC_ALIGN_12B_L:
698 tmpreg = (uint32_t)&hdac->Instance->DHR12L1;
702 tmpreg = (uint32_t)&hdac->Instance->DHR8R1;
710 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR1);
713 status =
HAL_DMA_Start_IT(hdac->DMA_Handle1, (uint32_t)pData, tmpreg, Length);
721 __HAL_DAC_ENABLE(hdac, Channel);
725 hdac->ErrorCode |= HAL_DAC_ERROR_DMA;
733 #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ 734 defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ 735 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 757 HAL_StatusTypeDef status;
758 uint32_t tmpreg = 0U;
768 hdac->State = HAL_DAC_STATE_BUSY;
770 if (Channel == DAC_CHANNEL_1)
782 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN1);
787 case DAC_ALIGN_12B_R:
789 tmpreg = (uint32_t)&hdac->Instance->DHR12R1;
791 case DAC_ALIGN_12B_L:
793 tmpreg = (uint32_t)&hdac->Instance->DHR12L1;
797 tmpreg = (uint32_t)&hdac->Instance->DHR8R1;
815 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN2);
820 case DAC_ALIGN_12B_R:
822 tmpreg = (uint32_t)&hdac->Instance->DHR12R2;
824 case DAC_ALIGN_12B_L:
826 tmpreg = (uint32_t)&hdac->Instance->DHR12L2;
830 tmpreg = (uint32_t)&hdac->Instance->DHR8R2;
838 if (Channel == DAC_CHANNEL_1)
841 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR1);
844 status =
HAL_DMA_Start_IT(hdac->DMA_Handle1, (uint32_t)pData, tmpreg, Length);
849 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR2);
852 status =
HAL_DMA_Start_IT(hdac->DMA_Handle2, (uint32_t)pData, tmpreg, Length);
861 __HAL_DAC_ENABLE(hdac, Channel);
865 hdac->ErrorCode |= HAL_DAC_ERROR_DMA;
887 HAL_StatusTypeDef status;
893 hdac->Instance->CR &= ~(DAC_CR_DMAEN1 << (Channel & 0x10UL));
896 __HAL_DAC_DISABLE(hdac, Channel);
899 #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ 900 defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ 901 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 903 if (Channel == DAC_CHANNEL_1)
909 __HAL_DAC_DISABLE_IT(hdac, DAC_IT_DMAUDR1);
917 __HAL_DAC_DISABLE_IT(hdac, DAC_IT_DMAUDR2);
923 #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) 928 __HAL_DAC_DISABLE_IT(hdac, DAC_IT_DMAUDR1);
935 hdac->State = HAL_DAC_STATE_ERROR;
940 hdac->State = HAL_DAC_STATE_READY;
961 if (__HAL_DAC_GET_IT_SOURCE(hdac, DAC_IT_DMAUDR1))
964 if (__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR1))
967 hdac->State = HAL_DAC_STATE_ERROR;
970 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH1);
973 __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR1);
976 CLEAR_BIT(hdac->Instance->CR, DAC_CR_DMAEN1);
979 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 980 hdac->DMAUnderrunCallbackCh1(hdac);
986 #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ 987 defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ 988 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 989 if(__HAL_DAC_GET_IT_SOURCE(hdac, DAC_IT_DMAUDR2))
992 if (__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR2))
995 hdac->State = HAL_DAC_STATE_ERROR;
998 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH2);
1001 __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR2);
1004 CLEAR_BIT(hdac->Instance->CR, DAC_CR_DMAEN2);
1007 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 1008 hdac->DMAUnderrunCallbackCh2(hdac);
1037 __IO uint32_t tmp = 0;
1044 tmp = (uint32_t)hdac->Instance;
1045 if (Channel == DAC_CHANNEL_1)
1047 tmp += DAC_DHR12R1_ALIGNMENT(Alignment);
1051 tmp += DAC_DHR12R2_ALIGNMENT(Alignment);
1055 *(__IO uint32_t *) tmp = Data;
1160 #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) 1164 return hdac->Instance->DOR1;
1167 #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ 1168 defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ 1169 defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 1170 if(Channel == DAC_CHANNEL_1)
1172 return hdac->Instance->DOR1;
1176 return hdac->Instance->DOR2;
1203 uint32_t tickstart = 0U;
1204 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 1209 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 1233 hdac->State = HAL_DAC_STATE_BUSY;
1239 if (Channel == DAC_CHANNEL_1)
1245 while (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
1248 if ((
HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
1251 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
1254 hdac->State = HAL_DAC_STATE_TIMEOUT;
1262 #if !defined (STM32L451xx) & !defined (STM32L452xx) & !defined (STM32L462xx) 1267 while (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
1270 if ((
HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
1273 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
1276 hdac->State = HAL_DAC_STATE_TIMEOUT;
1296 tmpreg1 = hdac->Instance->CCR;
1298 tmpreg1 &= ~(((uint32_t)(DAC_CCR_OTRIM1)) << (Channel & 0x10UL));
1302 tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
1304 hdac->Instance->CCR = tmpreg1;
1310 tmpreg1 = hdac->Instance->MCR;
1312 tmpreg1 &= ~(((uint32_t)(DAC_MCR_MODE1)) << (Channel & 0x10UL));
1316 tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
1318 hdac->Instance->MCR = tmpreg1;
1321 CLEAR_BIT(hdac->Instance->CR, DAC_CR_CEN1 << (Channel & 0x10UL));
1324 tmpreg1 = hdac->Instance->CR;
1326 tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1)) << (Channel & 0x10UL));
1331 tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
1332 #if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) 1333 if (DAC_HIGH_FREQUENCY_INTERFACE_MODE_ABOVE_80MHZ == sConfig->
DAC_HighFrequency)
1335 tmpreg1 |= DAC_CR_HFSEL;
1341 tmpreg1 &= ~(DAC_CR_HFSEL);
1346 if (hclkfreq > HFSEL_ENABLE_THRESHOLD_80MHZ)
1349 tmpreg1 |= DAC_CR_HFSEL;
1354 tmpreg1 &= ~(DAC_CR_HFSEL);
1362 hdac->Instance->CR = tmpreg1;
1364 hdac->Instance->CR &= ~(DAC_CR_WAVE1 << (Channel & 0x10UL));
1367 hdac->State = HAL_DAC_STATE_READY;
1417 return hdac->ErrorCode;
1435 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 1460 HAL_StatusTypeDef status =
HAL_OK;
1462 if (pCallback == NULL)
1465 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1472 if (hdac->State == HAL_DAC_STATE_READY)
1477 hdac->ConvCpltCallbackCh1 = pCallback;
1480 hdac->ConvHalfCpltCallbackCh1 = pCallback;
1483 hdac->ErrorCallbackCh1 = pCallback;
1486 hdac->DMAUnderrunCallbackCh1 = pCallback;
1489 hdac->ConvCpltCallbackCh2 = pCallback;
1492 hdac->ConvHalfCpltCallbackCh2 = pCallback;
1495 hdac->ErrorCallbackCh2 = pCallback;
1498 hdac->DMAUnderrunCallbackCh2 = pCallback;
1501 hdac->MspInitCallback = pCallback;
1504 hdac->MspDeInitCallback = pCallback;
1508 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1514 else if (hdac->State == HAL_DAC_STATE_RESET)
1519 hdac->MspInitCallback = pCallback;
1522 hdac->MspDeInitCallback = pCallback;
1526 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1535 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1566 HAL_StatusTypeDef status =
HAL_OK;
1571 if (hdac->State == HAL_DAC_STATE_READY)
1619 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1625 else if (hdac->State == HAL_DAC_STATE_RESET)
1637 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1646 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1679 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 1680 hdac->ConvCpltCallbackCh1(hdac);
1685 hdac->State = HAL_DAC_STATE_READY;
1698 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 1699 hdac->ConvHalfCpltCallbackCh1(hdac);
1716 hdac->ErrorCode |= HAL_DAC_ERROR_DMA;
1718 #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1) 1719 hdac->ErrorCallbackCh1(hdac);
1724 hdac->State = HAL_DAC_STATE_READY;
uint32_t DAC_TrimmingValue
void(* pDAC_CallbackTypeDef)(DAC_HandleTypeDef *hdac)
HAL DAC Callback pointer definition.
uint32_t DAC_HighFrequency
struct __DAC_HandleTypeDef else typedef struct endif DAC_HandleTypeDef
DAC handle Structure definition.
HAL_DAC_CallbackIDTypeDef
HAL DAC Callback ID enumeration definition.
HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef *hdac)
Deinitialize the DAC peripheral registers to their default reset values.
void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma)
DMA error callback.
HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef *hdac)
Initialize the DAC peripheral according to the specified parameters in the DAC_InitStruct and initial...
HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t *pData, uint32_t Length, uint32_t Alignment)
Enables DAC and starts conversion of channel.
void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef *hdac)
Conversion complete callback in non-blocking mode for Channel2.
HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef *hdac)
return the DAC handle state
DMA handle Structure definition.
if(lpuartdiv >=LPUART_BRR_MIN_VALUE)
This file contains all the functions prototypes for the HAL module driver.
void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef *hdac)
Conversion half DMA transfer callback in non-blocking mode for Channel2.
DAC Configuration regular Channel structure definition.
void HAL_Delay(uint32_t Delay)
This function provides minimum delay (in milliseconds) based on variable incremented.
uint32_t HAL_DAC_GetError(DAC_HandleTypeDef *hdac)
Return the DAC error code.
void DAC_DMAErrorCh2(DMA_HandleTypeDef *hdma)
DMA error callback.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma)
DMA half transfer complete callback.
void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef *hdac)
Conversion half DMA transfer callback in non-blocking mode for Channel1.
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
DMA underrun DAC callback for channel1.
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef *hdac, uint32_t Channel)
Disables DAC and stop conversion of channel.
uint32_t DAC_UserTrimming
void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma)
DMA conversion complete callback.
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Abort the DMA Transfer.
uint32_t DAC_OutputBuffer
HAL_StatusTypeDef HAL_DAC_UnRegisterCallback(DAC_HandleTypeDef *hdac, HAL_DAC_CallbackIDTypeDef CallbackID)
Unregister a User DAC Callback DAC Callback is redirected to the weak (surcharged) predefined callbac...
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
Set the specified data holding register value for DAC channel.
HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel)
Disables DAC and stop conversion of channel.
void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac)
Error DAC callback for Channel1.
HAL_StatusTypeDef HAL_DAC_RegisterCallback(DAC_HandleTypeDef *hdac, HAL_DAC_CallbackIDTypeDef CallbackID, pDAC_CallbackTypeDef pCallback)
Register a User DAC Callback To be used instead of the weak (surcharged) predefined callback...
HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac, DAC_ChannelConfTypeDef *sConfig, uint32_t Channel)
Configures the selected DAC channel.
void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef *hdac)
Conversion complete callback in non-blocking mode for Channel1.
uint32_t DAC_SampleAndHold
uint32_t HAL_RCC_GetHCLKFreq(void)
Return the HCLK frequency.
DAC_SampleAndHoldConfTypeDef DAC_SampleAndHoldConfig
void HAL_DAC_MspDeInit(DAC_HandleTypeDef *hdac)
DeInitialize the DAC MSP.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
void HAL_DAC_IRQHandler(DAC_HandleTypeDef *hdac)
Handles DAC interrupt request This function uses the interruption of DMA underrun.
uint32_t DAC_ConnectOnChipPeripheral
void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef *hdac)
DMA underrun DAC callback for Channel2.
void HAL_DAC_MspInit(DAC_HandleTypeDef *hdac)
Initialize the DAC MSP.
void DAC_DMAConvCpltCh2(DMA_HandleTypeDef *hdma)
DMA conversion complete callback.
void DAC_DMAHalfConvCpltCh2(DMA_HandleTypeDef *hdma)
DMA half transfer complete callback.
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel)
Enables DAC and starts conversion of channel.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
void HAL_DACEx_ErrorCallbackCh2(DAC_HandleTypeDef *hdac)
Error DAC callback for Channel2.
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef *hdac, uint32_t Channel)
Returns the last data output value of the selected DAC channel.