STM32F4xx HAL Documentation
Hardware Abstraction Layer for STM32F4 familiy
Loading...
Searching...
No Matches
stm32f4xx_hal_dac.c
Go to the documentation of this file.
1
222/* Includes ------------------------------------------------------------------*/
223#include "stm32f4xx_hal.h"
224
229#ifdef HAL_DAC_MODULE_ENABLED
230#if defined(DAC)
231
237/* Private typedef -----------------------------------------------------------*/
238/* Private define ------------------------------------------------------------*/
239/* Private constants ---------------------------------------------------------*/
240/* Private macro -------------------------------------------------------------*/
241/* Private variables ---------------------------------------------------------*/
242/* Private function prototypes -----------------------------------------------*/
243/* Exported functions -------------------------------------------------------*/
244
272{
273 /* Check the DAC peripheral handle */
274 if (hdac == NULL)
275 {
276 return HAL_ERROR;
277 }
278 /* Check the parameters */
279 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
280
281 if (hdac->State == HAL_DAC_STATE_RESET)
282 {
283#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
284 /* Init the DAC Callback settings */
285 hdac->ConvCpltCallbackCh1 = HAL_DAC_ConvCpltCallbackCh1;
286 hdac->ConvHalfCpltCallbackCh1 = HAL_DAC_ConvHalfCpltCallbackCh1;
287 hdac->ErrorCallbackCh1 = HAL_DAC_ErrorCallbackCh1;
288 hdac->DMAUnderrunCallbackCh1 = HAL_DAC_DMAUnderrunCallbackCh1;
289#if defined(DAC_CHANNEL2_SUPPORT)
290 hdac->ConvCpltCallbackCh2 = HAL_DACEx_ConvCpltCallbackCh2;
291 hdac->ConvHalfCpltCallbackCh2 = HAL_DACEx_ConvHalfCpltCallbackCh2;
292 hdac->ErrorCallbackCh2 = HAL_DACEx_ErrorCallbackCh2;
293 hdac->DMAUnderrunCallbackCh2 = HAL_DACEx_DMAUnderrunCallbackCh2;
294#endif /* DAC_CHANNEL2_SUPPORT */
295 if (hdac->MspInitCallback == NULL)
296 {
297 hdac->MspInitCallback = HAL_DAC_MspInit;
298 }
299#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
300
301 /* Allocate lock resource and initialize it */
302 hdac->Lock = HAL_UNLOCKED;
303
304#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
305 /* Init the low level hardware */
306 hdac->MspInitCallback(hdac);
307#else
308 /* Init the low level hardware */
309 HAL_DAC_MspInit(hdac);
310#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
311 }
312
313 /* Initialize the DAC state*/
315
316 /* Set DAC error code to none */
318
319 /* Initialize the DAC state*/
321
322 /* Return function status */
323 return HAL_OK;
324}
325
333{
334 /* Check the DAC peripheral handle */
335 if (hdac == NULL)
336 {
337 return HAL_ERROR;
338 }
339
340 /* Check the parameters */
341 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
342
343 /* Change DAC state */
345
346#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
347 if (hdac->MspDeInitCallback == NULL)
348 {
349 hdac->MspDeInitCallback = HAL_DAC_MspDeInit;
350 }
351 /* DeInit the low level hardware */
352 hdac->MspDeInitCallback(hdac);
353#else
354 /* DeInit the low level hardware */
355 HAL_DAC_MspDeInit(hdac);
356#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
357
358 /* Set DAC error code to none */
360
361 /* Change DAC state */
363
364 /* Release Lock */
365 __HAL_UNLOCK(hdac);
366
367 /* Return function status */
368 return HAL_OK;
369}
370
378{
379 /* Prevent unused argument(s) compilation warning */
380 UNUSED(hdac);
381
382 /* NOTE : This function should not be modified, when the callback is needed,
383 the HAL_DAC_MspInit could be implemented in the user file
384 */
385}
386
394{
395 /* Prevent unused argument(s) compilation warning */
396 UNUSED(hdac);
397
398 /* NOTE : This function should not be modified, when the callback is needed,
399 the HAL_DAC_MspDeInit could be implemented in the user file
400 */
401}
402
436{
437 /* Check the DAC peripheral handle */
438 if (hdac == NULL)
439 {
440 return HAL_ERROR;
441 }
442
443 /* Check the parameters */
445
446 /* Process locked */
447 __HAL_LOCK(hdac);
448
449 /* Change DAC state */
451
452 /* Enable the Peripheral */
453 __HAL_DAC_ENABLE(hdac, Channel);
454
455 if (Channel == DAC_CHANNEL_1)
456 {
457 /* Check if software trigger enabled */
458 if ((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == DAC_TRIGGER_SOFTWARE)
459 {
460 /* Enable the selected DAC software conversion */
461 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
462 }
463 }
464#if defined(DAC_CHANNEL2_SUPPORT)
465 else
466 {
467 /* Check if software trigger enabled */
468 if ((hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)) == (DAC_TRIGGER_SOFTWARE << (Channel & 0x10UL)))
469 {
470 /* Enable the selected DAC software conversion*/
471 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
472 }
473 }
474#endif /* DAC_CHANNEL2_SUPPORT */
475
476 /* Change DAC state */
478
479 /* Process unlocked */
480 __HAL_UNLOCK(hdac);
481
482 /* Return function status */
483 return HAL_OK;
484}
485
497{
498 /* Check the DAC peripheral handle */
499 if (hdac == NULL)
500 {
501 return HAL_ERROR;
502 }
503
504 /* Check the parameters */
506
507 /* Disable the Peripheral */
508 __HAL_DAC_DISABLE(hdac, Channel);
509
510 /* Change DAC state */
512
513 /* Return function status */
514 return HAL_OK;
515}
516
534HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel, const uint32_t *pData, uint32_t Length,
535 uint32_t Alignment)
536{
538 uint32_t tmpreg;
539
540 /* Check the DAC peripheral handle */
541 if (hdac == NULL)
542 {
543 return HAL_ERROR;
544 }
545
546 /* Check the parameters */
548 assert_param(IS_DAC_ALIGN(Alignment));
549
550 /* Process locked */
551 __HAL_LOCK(hdac);
552
553 /* Change DAC state */
555
556 if (Channel == DAC_CHANNEL_1)
557 {
558 /* Set the DMA transfer complete callback for channel1 */
560
561 /* Set the DMA half transfer complete callback for channel1 */
563
564 /* Set the DMA error callback for channel1 */
566
567 /* Enable the selected DAC channel1 DMA request */
568 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN1);
569
570 /* Case of use of channel 1 */
571 switch (Alignment)
572 {
573 case DAC_ALIGN_12B_R:
574 /* Get DHR12R1 address */
575 tmpreg = (uint32_t)&hdac->Instance->DHR12R1;
576 break;
577 case DAC_ALIGN_12B_L:
578 /* Get DHR12L1 address */
579 tmpreg = (uint32_t)&hdac->Instance->DHR12L1;
580 break;
581 default: /* case DAC_ALIGN_8B_R */
582 /* Get DHR8R1 address */
583 tmpreg = (uint32_t)&hdac->Instance->DHR8R1;
584 break;
585 }
586 }
587#if defined(DAC_CHANNEL2_SUPPORT)
588 else
589 {
590 /* Set the DMA transfer complete callback for channel2 */
591 hdac->DMA_Handle2->XferCpltCallback = DAC_DMAConvCpltCh2;
592
593 /* Set the DMA half transfer complete callback for channel2 */
594 hdac->DMA_Handle2->XferHalfCpltCallback = DAC_DMAHalfConvCpltCh2;
595
596 /* Set the DMA error callback for channel2 */
597 hdac->DMA_Handle2->XferErrorCallback = DAC_DMAErrorCh2;
598
599 /* Enable the selected DAC channel2 DMA request */
600 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN2);
601
602 /* Case of use of channel 2 */
603 switch (Alignment)
604 {
605 case DAC_ALIGN_12B_R:
606 /* Get DHR12R2 address */
607 tmpreg = (uint32_t)&hdac->Instance->DHR12R2;
608 break;
609 case DAC_ALIGN_12B_L:
610 /* Get DHR12L2 address */
611 tmpreg = (uint32_t)&hdac->Instance->DHR12L2;
612 break;
613 default: /* case DAC_ALIGN_8B_R */
614 /* Get DHR8R2 address */
615 tmpreg = (uint32_t)&hdac->Instance->DHR8R2;
616 break;
617 }
618 }
619#endif /* DAC_CHANNEL2_SUPPORT */
620 if (Channel == DAC_CHANNEL_1)
621 {
622 /* Enable the DAC DMA underrun interrupt */
624
625 /* Enable the DMA Stream */
626 status = HAL_DMA_Start_IT(hdac->DMA_Handle1, (uint32_t)pData, tmpreg, Length);
627 }
628#if defined(DAC_CHANNEL2_SUPPORT)
629 else
630 {
631 /* Enable the DAC DMA underrun interrupt */
632 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR2);
633
634 /* Enable the DMA Stream */
635 status = HAL_DMA_Start_IT(hdac->DMA_Handle2, (uint32_t)pData, tmpreg, Length);
636 }
637#endif /* DAC_CHANNEL2_SUPPORT */
638
639 /* Process Unlocked */
640 __HAL_UNLOCK(hdac);
641
642 if (status == HAL_OK)
643 {
644 /* Enable the Peripheral */
645 __HAL_DAC_ENABLE(hdac, Channel);
646 }
647 else
648 {
650 }
651
652 /* Return function status */
653 return status;
654}
655
667{
668 /* Check the DAC peripheral handle */
669 if (hdac == NULL)
670 {
671 return HAL_ERROR;
672 }
673
674 /* Check the parameters */
676
677 /* Disable the selected DAC channel DMA request */
678 hdac->Instance->CR &= ~(DAC_CR_DMAEN1 << (Channel & 0x10UL));
679
680 /* Disable the Peripheral */
681 __HAL_DAC_DISABLE(hdac, Channel);
682
683 /* Disable the DMA Stream */
684
685 /* Channel1 is used */
686 if (Channel == DAC_CHANNEL_1)
687 {
688 /* Disable the DMA Stream */
689 (void)HAL_DMA_Abort(hdac->DMA_Handle1);
690
691 /* Disable the DAC DMA underrun interrupt */
693 }
694#if defined(DAC_CHANNEL2_SUPPORT)
695 else /* Channel2 is used for */
696 {
697 /* Disable the DMA Stream */
698 (void)HAL_DMA_Abort(hdac->DMA_Handle2);
699
700 /* Disable the DAC DMA underrun interrupt */
701 __HAL_DAC_DISABLE_IT(hdac, DAC_IT_DMAUDR2);
702 }
703#endif /* DAC_CHANNEL2_SUPPORT */
704
705 /* Change DAC state */
707
708 /* Return function status */
709 return HAL_OK;
710}
711
721{
722 uint32_t itsource = hdac->Instance->CR;
723 uint32_t itflag = hdac->Instance->SR;
724
725 if ((itsource & DAC_IT_DMAUDR1) == DAC_IT_DMAUDR1)
726 {
727 /* Check underrun flag of DAC channel 1 */
728 if ((itflag & DAC_FLAG_DMAUDR1) == DAC_FLAG_DMAUDR1)
729 {
730 /* Change DAC state to error state */
732
733 /* Set DAC error code to channel1 DMA underrun error */
735
736 /* Clear the underrun flag */
738
739 /* Disable the selected DAC channel1 DMA request */
740 __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN1);
741
742 /* Error callback */
743#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
744 hdac->DMAUnderrunCallbackCh1(hdac);
745#else
747#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
748 }
749 }
750
751#if defined(DAC_CHANNEL2_SUPPORT)
752 if ((itsource & DAC_IT_DMAUDR2) == DAC_IT_DMAUDR2)
753 {
754 /* Check underrun flag of DAC channel 2 */
755 if ((itflag & DAC_FLAG_DMAUDR2) == DAC_FLAG_DMAUDR2)
756 {
757 /* Change DAC state to error state */
759
760 /* Set DAC error code to channel2 DMA underrun error */
761 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH2);
762
763 /* Clear the underrun flag */
764 __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR2);
765
766 /* Disable the selected DAC channel2 DMA request */
767 __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN2);
768
769 /* Error callback */
770#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
771 hdac->DMAUnderrunCallbackCh2(hdac);
772#else
773 HAL_DACEx_DMAUnderrunCallbackCh2(hdac);
774#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
775 }
776 }
777#endif /* DAC_CHANNEL2_SUPPORT */
778}
779
796HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
797{
798 __IO uint32_t tmp = 0UL;
799
800 /* Check the DAC peripheral handle */
801 if (hdac == NULL)
802 {
803 return HAL_ERROR;
804 }
805
806 /* Check the parameters */
808 assert_param(IS_DAC_ALIGN(Alignment));
810
811 tmp = (uint32_t)hdac->Instance;
812 if (Channel == DAC_CHANNEL_1)
813 {
814 tmp += DAC_DHR12R1_ALIGNMENT(Alignment);
815 }
816#if defined(DAC_CHANNEL2_SUPPORT)
817 else
818 {
819 tmp += DAC_DHR12R2_ALIGNMENT(Alignment);
820 }
821#endif /* DAC_CHANNEL2_SUPPORT */
822
823 /* Set the DAC channel selected data holding register */
824 *(__IO uint32_t *) tmp = Data;
825
826 /* Return function status */
827 return HAL_OK;
828}
829
837{
838 /* Prevent unused argument(s) compilation warning */
839 UNUSED(hdac);
840
841 /* NOTE : This function should not be modified, when the callback is needed,
842 the HAL_DAC_ConvCpltCallbackCh1 could be implemented in the user file
843 */
844}
845
853{
854 /* Prevent unused argument(s) compilation warning */
855 UNUSED(hdac);
856
857 /* NOTE : This function should not be modified, when the callback is needed,
858 the HAL_DAC_ConvHalfCpltCallbackCh1 could be implemented in the user file
859 */
860}
861
869{
870 /* Prevent unused argument(s) compilation warning */
871 UNUSED(hdac);
872
873 /* NOTE : This function should not be modified, when the callback is needed,
874 the HAL_DAC_ErrorCallbackCh1 could be implemented in the user file
875 */
876}
877
885{
886 /* Prevent unused argument(s) compilation warning */
887 UNUSED(hdac);
888
889 /* NOTE : This function should not be modified, when the callback is needed,
890 the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file
891 */
892}
893
923uint32_t HAL_DAC_GetValue(const DAC_HandleTypeDef *hdac, uint32_t Channel)
924{
925 uint32_t result = 0;
926
927 /* Check the DAC peripheral handle */
928 assert_param(hdac != NULL);
929
930 /* Check the parameters */
932
933 if (Channel == DAC_CHANNEL_1)
934 {
935 result = hdac->Instance->DOR1;
936 }
937#if defined(DAC_CHANNEL2_SUPPORT)
938 else
939 {
940 result = hdac->Instance->DOR2;
941 }
942#endif /* DAC_CHANNEL2_SUPPORT */
943 /* Returns the DAC channel data output register value */
944 return result;
945}
946
959 const DAC_ChannelConfTypeDef *sConfig, uint32_t Channel)
960{
961 HAL_StatusTypeDef status = HAL_OK;
962 uint32_t tmpreg1;
963 uint32_t tmpreg2;
964
965 /* Check the DAC peripheral handle and channel configuration struct */
966 if ((hdac == NULL) || (sConfig == NULL))
967 {
968 return HAL_ERROR;
969 }
970
971 /* Check the DAC parameters */
975
976 /* Process locked */
977 __HAL_LOCK(hdac);
978
979 /* Change DAC state */
981
982 /* Get the DAC CR value */
983 tmpreg1 = hdac->Instance->CR;
984 /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */
985 tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1 | DAC_CR_BOFF1))
986 << (Channel & 0x10UL));
987 /* Configure for the selected DAC channel: buffer output, trigger */
988 /* Set TSELx and TENx bits according to DAC_Trigger value */
989 /* Set BOFFx bit according to DAC_OutputBuffer value */
990 tmpreg2 = (sConfig->DAC_Trigger | sConfig->DAC_OutputBuffer);
991 /* Calculate CR register value depending on DAC_Channel */
992 tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
993 /* Write to DAC CR */
994 hdac->Instance->CR = tmpreg1;
995 /* Disable wave generation */
996 CLEAR_BIT(hdac->Instance->CR, (DAC_CR_WAVE1 << (Channel & 0x10UL)));
997
998 /* Change DAC state */
1000
1001 /* Process unlocked */
1002 __HAL_UNLOCK(hdac);
1003
1004 /* Return function status */
1005 return status;
1006}
1007
1035{
1036 /* Return DAC handle state */
1037 return hdac->State;
1038}
1039
1040
1048{
1049 return hdac->ErrorCode;
1050}
1051
1067#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
1091HAL_StatusTypeDef HAL_DAC_RegisterCallback(DAC_HandleTypeDef *hdac, HAL_DAC_CallbackIDTypeDef CallbackID,
1092 pDAC_CallbackTypeDef pCallback)
1093{
1094 HAL_StatusTypeDef status = HAL_OK;
1095
1096 /* Check the DAC peripheral handle */
1097 if (hdac == NULL)
1098 {
1099 return HAL_ERROR;
1100 }
1101
1102 if (pCallback == NULL)
1103 {
1104 /* Update the error code */
1105 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1106 return HAL_ERROR;
1107 }
1108
1109 if (hdac->State == HAL_DAC_STATE_READY)
1110 {
1111 switch (CallbackID)
1112 {
1113 case HAL_DAC_CH1_COMPLETE_CB_ID :
1114 hdac->ConvCpltCallbackCh1 = pCallback;
1115 break;
1116 case HAL_DAC_CH1_HALF_COMPLETE_CB_ID :
1117 hdac->ConvHalfCpltCallbackCh1 = pCallback;
1118 break;
1119 case HAL_DAC_CH1_ERROR_ID :
1120 hdac->ErrorCallbackCh1 = pCallback;
1121 break;
1122 case HAL_DAC_CH1_UNDERRUN_CB_ID :
1123 hdac->DMAUnderrunCallbackCh1 = pCallback;
1124 break;
1125#if defined(DAC_CHANNEL2_SUPPORT)
1126 case HAL_DAC_CH2_COMPLETE_CB_ID :
1127 hdac->ConvCpltCallbackCh2 = pCallback;
1128 break;
1129 case HAL_DAC_CH2_HALF_COMPLETE_CB_ID :
1130 hdac->ConvHalfCpltCallbackCh2 = pCallback;
1131 break;
1132 case HAL_DAC_CH2_ERROR_ID :
1133 hdac->ErrorCallbackCh2 = pCallback;
1134 break;
1135 case HAL_DAC_CH2_UNDERRUN_CB_ID :
1136 hdac->DMAUnderrunCallbackCh2 = pCallback;
1137 break;
1138#endif /* DAC_CHANNEL2_SUPPORT */
1139 case HAL_DAC_MSPINIT_CB_ID :
1140 hdac->MspInitCallback = pCallback;
1141 break;
1142 case HAL_DAC_MSPDEINIT_CB_ID :
1143 hdac->MspDeInitCallback = pCallback;
1144 break;
1145 default :
1146 /* Update the error code */
1147 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1148 /* update return status */
1149 status = HAL_ERROR;
1150 break;
1151 }
1152 }
1153 else if (hdac->State == HAL_DAC_STATE_RESET)
1154 {
1155 switch (CallbackID)
1156 {
1157 case HAL_DAC_MSPINIT_CB_ID :
1158 hdac->MspInitCallback = pCallback;
1159 break;
1160 case HAL_DAC_MSPDEINIT_CB_ID :
1161 hdac->MspDeInitCallback = pCallback;
1162 break;
1163 default :
1164 /* Update the error code */
1165 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1166 /* update return status */
1167 status = HAL_ERROR;
1168 break;
1169 }
1170 }
1171 else
1172 {
1173 /* Update the error code */
1174 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1175 /* update return status */
1176 status = HAL_ERROR;
1177 }
1178
1179 return status;
1180}
1181
1203HAL_StatusTypeDef HAL_DAC_UnRegisterCallback(DAC_HandleTypeDef *hdac, HAL_DAC_CallbackIDTypeDef CallbackID)
1204{
1205 HAL_StatusTypeDef status = HAL_OK;
1206
1207 /* Check the DAC peripheral handle */
1208 if (hdac == NULL)
1209 {
1210 return HAL_ERROR;
1211 }
1212
1213 if (hdac->State == HAL_DAC_STATE_READY)
1214 {
1215 switch (CallbackID)
1216 {
1217 case HAL_DAC_CH1_COMPLETE_CB_ID :
1218 hdac->ConvCpltCallbackCh1 = HAL_DAC_ConvCpltCallbackCh1;
1219 break;
1220 case HAL_DAC_CH1_HALF_COMPLETE_CB_ID :
1221 hdac->ConvHalfCpltCallbackCh1 = HAL_DAC_ConvHalfCpltCallbackCh1;
1222 break;
1223 case HAL_DAC_CH1_ERROR_ID :
1224 hdac->ErrorCallbackCh1 = HAL_DAC_ErrorCallbackCh1;
1225 break;
1226 case HAL_DAC_CH1_UNDERRUN_CB_ID :
1227 hdac->DMAUnderrunCallbackCh1 = HAL_DAC_DMAUnderrunCallbackCh1;
1228 break;
1229#if defined(DAC_CHANNEL2_SUPPORT)
1230 case HAL_DAC_CH2_COMPLETE_CB_ID :
1231 hdac->ConvCpltCallbackCh2 = HAL_DACEx_ConvCpltCallbackCh2;
1232 break;
1233 case HAL_DAC_CH2_HALF_COMPLETE_CB_ID :
1234 hdac->ConvHalfCpltCallbackCh2 = HAL_DACEx_ConvHalfCpltCallbackCh2;
1235 break;
1236 case HAL_DAC_CH2_ERROR_ID :
1237 hdac->ErrorCallbackCh2 = HAL_DACEx_ErrorCallbackCh2;
1238 break;
1239 case HAL_DAC_CH2_UNDERRUN_CB_ID :
1240 hdac->DMAUnderrunCallbackCh2 = HAL_DACEx_DMAUnderrunCallbackCh2;
1241 break;
1242#endif /* DAC_CHANNEL2_SUPPORT */
1243 case HAL_DAC_MSPINIT_CB_ID :
1244 hdac->MspInitCallback = HAL_DAC_MspInit;
1245 break;
1246 case HAL_DAC_MSPDEINIT_CB_ID :
1247 hdac->MspDeInitCallback = HAL_DAC_MspDeInit;
1248 break;
1249 case HAL_DAC_ALL_CB_ID :
1250 hdac->ConvCpltCallbackCh1 = HAL_DAC_ConvCpltCallbackCh1;
1251 hdac->ConvHalfCpltCallbackCh1 = HAL_DAC_ConvHalfCpltCallbackCh1;
1252 hdac->ErrorCallbackCh1 = HAL_DAC_ErrorCallbackCh1;
1253 hdac->DMAUnderrunCallbackCh1 = HAL_DAC_DMAUnderrunCallbackCh1;
1254#if defined(DAC_CHANNEL2_SUPPORT)
1255 hdac->ConvCpltCallbackCh2 = HAL_DACEx_ConvCpltCallbackCh2;
1256 hdac->ConvHalfCpltCallbackCh2 = HAL_DACEx_ConvHalfCpltCallbackCh2;
1257 hdac->ErrorCallbackCh2 = HAL_DACEx_ErrorCallbackCh2;
1258 hdac->DMAUnderrunCallbackCh2 = HAL_DACEx_DMAUnderrunCallbackCh2;
1259#endif /* DAC_CHANNEL2_SUPPORT */
1260 hdac->MspInitCallback = HAL_DAC_MspInit;
1261 hdac->MspDeInitCallback = HAL_DAC_MspDeInit;
1262 break;
1263 default :
1264 /* Update the error code */
1265 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1266 /* update return status */
1267 status = HAL_ERROR;
1268 break;
1269 }
1270 }
1271 else if (hdac->State == HAL_DAC_STATE_RESET)
1272 {
1273 switch (CallbackID)
1274 {
1275 case HAL_DAC_MSPINIT_CB_ID :
1276 hdac->MspInitCallback = HAL_DAC_MspInit;
1277 break;
1278 case HAL_DAC_MSPDEINIT_CB_ID :
1279 hdac->MspDeInitCallback = HAL_DAC_MspDeInit;
1280 break;
1281 default :
1282 /* Update the error code */
1283 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1284 /* update return status */
1285 status = HAL_ERROR;
1286 break;
1287 }
1288 }
1289 else
1290 {
1291 /* Update the error code */
1292 hdac->ErrorCode |= HAL_DAC_ERROR_INVALID_CALLBACK;
1293 /* update return status */
1294 status = HAL_ERROR;
1295 }
1296
1297 return status;
1298}
1299#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
1300
1320{
1321 DAC_HandleTypeDef *hdac = (DAC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
1322
1323#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
1324 hdac->ConvCpltCallbackCh1(hdac);
1325#else
1327#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
1328
1329 hdac->State = HAL_DAC_STATE_READY;
1330}
1331
1339{
1340 DAC_HandleTypeDef *hdac = (DAC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
1341 /* Conversion complete callback */
1342#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
1343 hdac->ConvHalfCpltCallbackCh1(hdac);
1344#else
1346#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
1347}
1348
1356{
1357 DAC_HandleTypeDef *hdac = (DAC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
1358
1359 /* Set DAC error code to DMA error */
1361
1362#if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
1363 hdac->ErrorCallbackCh1(hdac);
1364#else
1366#endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
1367
1368 hdac->State = HAL_DAC_STATE_READY;
1369}
1370
1379#endif /* DAC */
1380
1381#endif /* HAL_DAC_MODULE_ENABLED */
#define IS_DAC_TRIGGER(TRIGGER)
#define DAC_CHANNEL_1
#define HAL_DAC_ERROR_DMAUNDERRUNCH1
#define HAL_DAC_ERROR_DMA
#define HAL_DAC_ERROR_NONE
void HAL_DAC_MspInit(DAC_HandleTypeDef *hdac)
Initialize the DAC MSP.
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_DeInit(DAC_HandleTypeDef *hdac)
Deinitialize the DAC peripheral registers to their default reset values.
void HAL_DAC_MspDeInit(DAC_HandleTypeDef *hdac)
DeInitialize the DAC MSP.
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef *hdac, uint32_t Channel)
Disables DAC and stop conversion of channel.
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel)
Enables DAC and starts conversion of channel.
void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef *hdac)
Conversion half DMA transfer callback in non-blocking mode for Channel1.
HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel)
Disables DAC and stop conversion of channel.
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_Start_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel, const uint32_t *pData, uint32_t Length, uint32_t Alignment)
Enables DAC and starts conversion of channel.
void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac)
Error DAC callback for Channel1.
void HAL_DAC_IRQHandler(DAC_HandleTypeDef *hdac)
Handles DAC interrupt request This function uses the interruption of DMA underrun.
void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef *hdac)
Conversion complete callback in non-blocking mode for Channel1.
void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
DMA underrun DAC callback for channel1.
uint32_t HAL_DAC_GetValue(const DAC_HandleTypeDef *hdac, uint32_t Channel)
Returns the last data output value of the selected DAC channel.
HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac, const DAC_ChannelConfTypeDef *sConfig, uint32_t Channel)
Configures the selected DAC channel.
HAL_DAC_StateTypeDef HAL_DAC_GetState(const DAC_HandleTypeDef *hdac)
return the DAC handle state
uint32_t HAL_DAC_GetError(const DAC_HandleTypeDef *hdac)
Return the DAC error code.
#define __HAL_DAC_ENABLE(__HANDLE__, __DAC_Channel__)
Enable the DAC channel.
#define __HAL_DAC_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the DAC interrupt.
#define __HAL_DAC_DISABLE(__HANDLE__, __DAC_Channel__)
Disable the DAC channel.
#define __HAL_DAC_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the DAC's flag.
#define DAC_DHR12R1_ALIGNMENT(__ALIGNMENT__)
Set DHR12R1 alignment.
#define __HAL_DAC_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the DAC interrupt.
HAL_DAC_StateTypeDef
HAL State structures definition.
@ HAL_DAC_STATE_READY
@ HAL_DAC_STATE_RESET
@ HAL_DAC_STATE_ERROR
@ HAL_DAC_STATE_BUSY
#define DAC_IT_DMAUDR1
void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma)
DMA conversion complete callback.
void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma)
DMA half transfer complete callback.
void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma)
DMA error callback.
#define IS_DAC_ALIGN(ALIGN)
#define IS_DAC_DATA(DATA)
#define IS_DAC_OUTPUT_BUFFER_STATE(STATE)
#define IS_DAC_CHANNEL(CHANNEL)
#define DAC_ALIGN_12B_R
#define DAC_ALIGN_12B_L
#define DAC_FLAG_DMAUDR1
#define DAC_TRIGGER_SOFTWARE
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer.
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.
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition
@ HAL_ERROR
@ HAL_OK
#define UNUSED(X)
#define __HAL_UNLOCK(__HANDLE__)
@ HAL_UNLOCKED
#define __HAL_LOCK(__HANDLE__)
DAC Configuration regular Channel structure definition.
DAC handle Structure definition.
__IO HAL_DAC_StateTypeDef State
DMA_HandleTypeDef * DMA_Handle2
HAL_LockTypeDef Lock
DAC_TypeDef * Instance
__IO uint32_t ErrorCode
DMA_HandleTypeDef * DMA_Handle1
DMA handle Structure definition.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)