STM32F4xx HAL Documentation
Hardware Abstraction Layer for STM32F4 familiy
Loading...
Searching...
No Matches
stm32f4xx_hal_tim.c
Go to the documentation of this file.
1
185/* Includes ------------------------------------------------------------------*/
186#include "stm32f4xx_hal.h"
187
197#ifdef HAL_TIM_MODULE_ENABLED
198
199/* Private typedef -----------------------------------------------------------*/
200/* Private define ------------------------------------------------------------*/
201/* Private macros ------------------------------------------------------------*/
202/* Private variables ---------------------------------------------------------*/
203/* Private function prototypes -----------------------------------------------*/
207static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config);
208static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config);
209static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config);
210static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);
211static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
212 uint32_t TIM_ICFilter);
213static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);
214static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
215 uint32_t TIM_ICFilter);
216static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
217 uint32_t TIM_ICFilter);
218static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource);
222static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
225 const TIM_SlaveConfigTypeDef *sSlaveConfig);
229/* Exported functions --------------------------------------------------------*/
230
267{
268 /* Check the TIM handle allocation */
269 if (htim == NULL)
270 {
271 return HAL_ERROR;
272 }
273
274 /* Check the parameters */
275 assert_param(IS_TIM_INSTANCE(htim->Instance));
280
281 if (htim->State == HAL_TIM_STATE_RESET)
282 {
283 /* Allocate lock resource and initialize it */
284 htim->Lock = HAL_UNLOCKED;
285
286#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
287 /* Reset interrupt callbacks to legacy weak callbacks */
288 TIM_ResetCallback(htim);
289
290 if (htim->Base_MspInitCallback == NULL)
291 {
292 htim->Base_MspInitCallback = HAL_TIM_Base_MspInit;
293 }
294 /* Init the low level hardware : GPIO, CLOCK, NVIC */
295 htim->Base_MspInitCallback(htim);
296#else
297 /* Init the low level hardware : GPIO, CLOCK, NVIC */
299#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
300 }
301
302 /* Set the TIM state */
304
305 /* Set the Time Base configuration */
306 TIM_Base_SetConfig(htim->Instance, &htim->Init);
307
308 /* Initialize the DMA burst operation state */
310
311 /* Initialize the TIM channels state */
314
315 /* Initialize the TIM state*/
317
318 return HAL_OK;
319}
320
327{
328 /* Check the parameters */
329 assert_param(IS_TIM_INSTANCE(htim->Instance));
330
332
333 /* Disable the TIM Peripheral Clock */
334 __HAL_TIM_DISABLE(htim);
335
336#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
337 if (htim->Base_MspDeInitCallback == NULL)
338 {
339 htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit;
340 }
341 /* DeInit the low level hardware */
342 htim->Base_MspDeInitCallback(htim);
343#else
344 /* DeInit the low level hardware: GPIO, CLOCK, NVIC */
346#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
347
348 /* Change the DMA burst operation state */
350
351 /* Change the TIM channels state */
354
355 /* Change TIM state */
357
358 /* Release Lock */
359 __HAL_UNLOCK(htim);
360
361 return HAL_OK;
362}
363
370{
371 /* Prevent unused argument(s) compilation warning */
372 UNUSED(htim);
373
374 /* NOTE : This function should not be modified, when the callback is needed,
375 the HAL_TIM_Base_MspInit could be implemented in the user file
376 */
377}
378
385{
386 /* Prevent unused argument(s) compilation warning */
387 UNUSED(htim);
388
389 /* NOTE : This function should not be modified, when the callback is needed,
390 the HAL_TIM_Base_MspDeInit could be implemented in the user file
391 */
392}
393
394
401{
402 uint32_t tmpsmcr;
403
404 /* Check the parameters */
405 assert_param(IS_TIM_INSTANCE(htim->Instance));
406
407 /* Check the TIM state */
408 if (htim->State != HAL_TIM_STATE_READY)
409 {
410 return HAL_ERROR;
411 }
412
413 /* Set the TIM state */
415
416 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
417 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
418 {
419 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
421 {
422 __HAL_TIM_ENABLE(htim);
423 }
424 }
425 else
426 {
427 __HAL_TIM_ENABLE(htim);
428 }
429
430 /* Return function status */
431 return HAL_OK;
432}
433
440{
441 /* Check the parameters */
442 assert_param(IS_TIM_INSTANCE(htim->Instance));
443
444 /* Disable the Peripheral */
445 __HAL_TIM_DISABLE(htim);
446
447 /* Set the TIM state */
449
450 /* Return function status */
451 return HAL_OK;
452}
453
460{
461 uint32_t tmpsmcr;
462
463 /* Check the parameters */
464 assert_param(IS_TIM_INSTANCE(htim->Instance));
465
466 /* Check the TIM state */
467 if (htim->State != HAL_TIM_STATE_READY)
468 {
469 return HAL_ERROR;
470 }
471
472 /* Set the TIM state */
474
475 /* Enable the TIM Update interrupt */
477
478 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
479 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
480 {
481 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
483 {
484 __HAL_TIM_ENABLE(htim);
485 }
486 }
487 else
488 {
489 __HAL_TIM_ENABLE(htim);
490 }
491
492 /* Return function status */
493 return HAL_OK;
494}
495
502{
503 /* Check the parameters */
504 assert_param(IS_TIM_INSTANCE(htim->Instance));
505
506 /* Disable the TIM Update interrupt */
508
509 /* Disable the Peripheral */
510 __HAL_TIM_DISABLE(htim);
511
512 /* Set the TIM state */
514
515 /* Return function status */
516 return HAL_OK;
517}
518
526HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length)
527{
528 uint32_t tmpsmcr;
529
530 /* Check the parameters */
531 assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
532
533 /* Set the TIM state */
534 if (htim->State == HAL_TIM_STATE_BUSY)
535 {
536 return HAL_BUSY;
537 }
538 else if (htim->State == HAL_TIM_STATE_READY)
539 {
540 if ((pData == NULL) || (Length == 0U))
541 {
542 return HAL_ERROR;
543 }
544 else
545 {
547 }
548 }
549 else
550 {
551 return HAL_ERROR;
552 }
553
554 /* Set the DMA Period elapsed callbacks */
557
558 /* Set the DMA error callback */
560
561 /* Enable the DMA stream */
562 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR,
563 Length) != HAL_OK)
564 {
565 /* Return error status */
566 return HAL_ERROR;
567 }
568
569 /* Enable the TIM Update DMA request */
571
572 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
573 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
574 {
575 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
577 {
578 __HAL_TIM_ENABLE(htim);
579 }
580 }
581 else
582 {
583 __HAL_TIM_ENABLE(htim);
584 }
585
586 /* Return function status */
587 return HAL_OK;
588}
589
596{
597 /* Check the parameters */
598 assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
599
600 /* Disable the TIM Update DMA request */
602
604
605 /* Disable the Peripheral */
606 __HAL_TIM_DISABLE(htim);
607
608 /* Set the TIM state */
610
611 /* Return function status */
612 return HAL_OK;
613}
614
651{
652 /* Check the TIM handle allocation */
653 if (htim == NULL)
654 {
655 return HAL_ERROR;
656 }
657
658 /* Check the parameters */
659 assert_param(IS_TIM_INSTANCE(htim->Instance));
664
665 if (htim->State == HAL_TIM_STATE_RESET)
666 {
667 /* Allocate lock resource and initialize it */
668 htim->Lock = HAL_UNLOCKED;
669
670#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
671 /* Reset interrupt callbacks to legacy weak callbacks */
672 TIM_ResetCallback(htim);
673
674 if (htim->OC_MspInitCallback == NULL)
675 {
676 htim->OC_MspInitCallback = HAL_TIM_OC_MspInit;
677 }
678 /* Init the low level hardware : GPIO, CLOCK, NVIC */
679 htim->OC_MspInitCallback(htim);
680#else
681 /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
682 HAL_TIM_OC_MspInit(htim);
683#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
684 }
685
686 /* Set the TIM state */
688
689 /* Init the base time for the Output Compare */
690 TIM_Base_SetConfig(htim->Instance, &htim->Init);
691
692 /* Initialize the DMA burst operation state */
694
695 /* Initialize the TIM channels state */
698
699 /* Initialize the TIM state*/
701
702 return HAL_OK;
703}
704
711{
712 /* Check the parameters */
713 assert_param(IS_TIM_INSTANCE(htim->Instance));
714
716
717 /* Disable the TIM Peripheral Clock */
718 __HAL_TIM_DISABLE(htim);
719
720#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
721 if (htim->OC_MspDeInitCallback == NULL)
722 {
723 htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit;
724 }
725 /* DeInit the low level hardware */
726 htim->OC_MspDeInitCallback(htim);
727#else
728 /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */
730#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
731
732 /* Change the DMA burst operation state */
734
735 /* Change the TIM channels state */
738
739 /* Change TIM state */
741
742 /* Release Lock */
743 __HAL_UNLOCK(htim);
744
745 return HAL_OK;
746}
747
754{
755 /* Prevent unused argument(s) compilation warning */
756 UNUSED(htim);
757
758 /* NOTE : This function should not be modified, when the callback is needed,
759 the HAL_TIM_OC_MspInit could be implemented in the user file
760 */
761}
762
769{
770 /* Prevent unused argument(s) compilation warning */
771 UNUSED(htim);
772
773 /* NOTE : This function should not be modified, when the callback is needed,
774 the HAL_TIM_OC_MspDeInit could be implemented in the user file
775 */
776}
777
790{
791 uint32_t tmpsmcr;
792
793 /* Check the parameters */
794 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
795
796 /* Check the TIM channel state */
798 {
799 return HAL_ERROR;
800 }
801
802 /* Set the TIM channel state */
804
805 /* Enable the Output compare channel */
807
808 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
809 {
810 /* Enable the main output */
812 }
813
814 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
815 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
816 {
817 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
819 {
820 __HAL_TIM_ENABLE(htim);
821 }
822 }
823 else
824 {
825 __HAL_TIM_ENABLE(htim);
826 }
827
828 /* Return function status */
829 return HAL_OK;
830}
831
844{
845 /* Check the parameters */
846 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
847
848 /* Disable the Output compare channel */
850
851 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
852 {
853 /* Disable the Main Output */
855 }
856
857 /* Disable the Peripheral */
858 __HAL_TIM_DISABLE(htim);
859
860 /* Set the TIM channel state */
862
863 /* Return function status */
864 return HAL_OK;
865}
866
879{
880 HAL_StatusTypeDef status = HAL_OK;
881 uint32_t tmpsmcr;
882
883 /* Check the parameters */
884 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
885
886 /* Check the TIM channel state */
888 {
889 return HAL_ERROR;
890 }
891
892 /* Set the TIM channel state */
894
895 switch (Channel)
896 {
897 case TIM_CHANNEL_1:
898 {
899 /* Enable the TIM Capture/Compare 1 interrupt */
901 break;
902 }
903
904 case TIM_CHANNEL_2:
905 {
906 /* Enable the TIM Capture/Compare 2 interrupt */
908 break;
909 }
910
911 case TIM_CHANNEL_3:
912 {
913 /* Enable the TIM Capture/Compare 3 interrupt */
915 break;
916 }
917
918 case TIM_CHANNEL_4:
919 {
920 /* Enable the TIM Capture/Compare 4 interrupt */
922 break;
923 }
924
925 default:
926 status = HAL_ERROR;
927 break;
928 }
929
930 if (status == HAL_OK)
931 {
932 /* Enable the Output compare channel */
934
935 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
936 {
937 /* Enable the main output */
939 }
940
941 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
942 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
943 {
944 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
946 {
947 __HAL_TIM_ENABLE(htim);
948 }
949 }
950 else
951 {
952 __HAL_TIM_ENABLE(htim);
953 }
954 }
955
956 /* Return function status */
957 return status;
958}
959
972{
973 HAL_StatusTypeDef status = HAL_OK;
974
975 /* Check the parameters */
976 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
977
978 switch (Channel)
979 {
980 case TIM_CHANNEL_1:
981 {
982 /* Disable the TIM Capture/Compare 1 interrupt */
984 break;
985 }
986
987 case TIM_CHANNEL_2:
988 {
989 /* Disable the TIM Capture/Compare 2 interrupt */
991 break;
992 }
993
994 case TIM_CHANNEL_3:
995 {
996 /* Disable the TIM Capture/Compare 3 interrupt */
998 break;
999 }
1000
1001 case TIM_CHANNEL_4:
1002 {
1003 /* Disable the TIM Capture/Compare 4 interrupt */
1005 break;
1006 }
1007
1008 default:
1009 status = HAL_ERROR;
1010 break;
1011 }
1012
1013 if (status == HAL_OK)
1014 {
1015 /* Disable the Output compare channel */
1017
1018 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1019 {
1020 /* Disable the Main Output */
1022 }
1023
1024 /* Disable the Peripheral */
1025 __HAL_TIM_DISABLE(htim);
1026
1027 /* Set the TIM channel state */
1029 }
1030
1031 /* Return function status */
1032 return status;
1033}
1034
1048HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData,
1049 uint16_t Length)
1050{
1051 HAL_StatusTypeDef status = HAL_OK;
1052 uint32_t tmpsmcr;
1053
1054 /* Check the parameters */
1055 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1056
1057 /* Set the TIM channel state */
1059 {
1060 return HAL_BUSY;
1061 }
1062 else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY)
1063 {
1064 if ((pData == NULL) || (Length == 0U))
1065 {
1066 return HAL_ERROR;
1067 }
1068 else
1069 {
1071 }
1072 }
1073 else
1074 {
1075 return HAL_ERROR;
1076 }
1077
1078 switch (Channel)
1079 {
1080 case TIM_CHANNEL_1:
1081 {
1082 /* Set the DMA compare callbacks */
1085
1086 /* Set the DMA error callback */
1088
1089 /* Enable the DMA stream */
1090 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1,
1091 Length) != HAL_OK)
1092 {
1093 /* Return error status */
1094 return HAL_ERROR;
1095 }
1096
1097 /* Enable the TIM Capture/Compare 1 DMA request */
1099 break;
1100 }
1101
1102 case TIM_CHANNEL_2:
1103 {
1104 /* Set the DMA compare callbacks */
1107
1108 /* Set the DMA error callback */
1110
1111 /* Enable the DMA stream */
1112 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2,
1113 Length) != HAL_OK)
1114 {
1115 /* Return error status */
1116 return HAL_ERROR;
1117 }
1118
1119 /* Enable the TIM Capture/Compare 2 DMA request */
1121 break;
1122 }
1123
1124 case TIM_CHANNEL_3:
1125 {
1126 /* Set the DMA compare callbacks */
1129
1130 /* Set the DMA error callback */
1132
1133 /* Enable the DMA stream */
1134 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,
1135 Length) != HAL_OK)
1136 {
1137 /* Return error status */
1138 return HAL_ERROR;
1139 }
1140 /* Enable the TIM Capture/Compare 3 DMA request */
1142 break;
1143 }
1144
1145 case TIM_CHANNEL_4:
1146 {
1147 /* Set the DMA compare callbacks */
1150
1151 /* Set the DMA error callback */
1153
1154 /* Enable the DMA stream */
1155 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4,
1156 Length) != HAL_OK)
1157 {
1158 /* Return error status */
1159 return HAL_ERROR;
1160 }
1161 /* Enable the TIM Capture/Compare 4 DMA request */
1163 break;
1164 }
1165
1166 default:
1167 status = HAL_ERROR;
1168 break;
1169 }
1170
1171 if (status == HAL_OK)
1172 {
1173 /* Enable the Output compare channel */
1174 TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
1175
1176 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1177 {
1178 /* Enable the main output */
1180 }
1181
1182 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
1183 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
1184 {
1185 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1187 {
1188 __HAL_TIM_ENABLE(htim);
1189 }
1190 }
1191 else
1192 {
1193 __HAL_TIM_ENABLE(htim);
1194 }
1195 }
1196
1197 /* Return function status */
1198 return status;
1199}
1200
1213{
1214 HAL_StatusTypeDef status = HAL_OK;
1215
1216 /* Check the parameters */
1217 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1218
1219 switch (Channel)
1220 {
1221 case TIM_CHANNEL_1:
1222 {
1223 /* Disable the TIM Capture/Compare 1 DMA request */
1225 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
1226 break;
1227 }
1228
1229 case TIM_CHANNEL_2:
1230 {
1231 /* Disable the TIM Capture/Compare 2 DMA request */
1233 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
1234 break;
1235 }
1236
1237 case TIM_CHANNEL_3:
1238 {
1239 /* Disable the TIM Capture/Compare 3 DMA request */
1241 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);
1242 break;
1243 }
1244
1245 case TIM_CHANNEL_4:
1246 {
1247 /* Disable the TIM Capture/Compare 4 interrupt */
1249 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);
1250 break;
1251 }
1252
1253 default:
1254 status = HAL_ERROR;
1255 break;
1256 }
1257
1258 if (status == HAL_OK)
1259 {
1260 /* Disable the Output compare channel */
1262
1263 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1264 {
1265 /* Disable the Main Output */
1267 }
1268
1269 /* Disable the Peripheral */
1270 __HAL_TIM_DISABLE(htim);
1271
1272 /* Set the TIM channel state */
1274 }
1275
1276 /* Return function status */
1277 return status;
1278}
1279
1316{
1317 /* Check the TIM handle allocation */
1318 if (htim == NULL)
1319 {
1320 return HAL_ERROR;
1321 }
1322
1323 /* Check the parameters */
1324 assert_param(IS_TIM_INSTANCE(htim->Instance));
1327 assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
1329
1330 if (htim->State == HAL_TIM_STATE_RESET)
1331 {
1332 /* Allocate lock resource and initialize it */
1333 htim->Lock = HAL_UNLOCKED;
1334
1335#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
1336 /* Reset interrupt callbacks to legacy weak callbacks */
1337 TIM_ResetCallback(htim);
1338
1339 if (htim->PWM_MspInitCallback == NULL)
1340 {
1341 htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit;
1342 }
1343 /* Init the low level hardware : GPIO, CLOCK, NVIC */
1344 htim->PWM_MspInitCallback(htim);
1345#else
1346 /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
1347 HAL_TIM_PWM_MspInit(htim);
1348#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
1349 }
1350
1351 /* Set the TIM state */
1352 htim->State = HAL_TIM_STATE_BUSY;
1353
1354 /* Init the base time for the PWM */
1355 TIM_Base_SetConfig(htim->Instance, &htim->Init);
1356
1357 /* Initialize the DMA burst operation state */
1359
1360 /* Initialize the TIM channels state */
1363
1364 /* Initialize the TIM state*/
1365 htim->State = HAL_TIM_STATE_READY;
1366
1367 return HAL_OK;
1368}
1369
1376{
1377 /* Check the parameters */
1378 assert_param(IS_TIM_INSTANCE(htim->Instance));
1379
1380 htim->State = HAL_TIM_STATE_BUSY;
1381
1382 /* Disable the TIM Peripheral Clock */
1383 __HAL_TIM_DISABLE(htim);
1384
1385#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
1386 if (htim->PWM_MspDeInitCallback == NULL)
1387 {
1388 htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit;
1389 }
1390 /* DeInit the low level hardware */
1391 htim->PWM_MspDeInitCallback(htim);
1392#else
1393 /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */
1395#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
1396
1397 /* Change the DMA burst operation state */
1399
1400 /* Change the TIM channels state */
1403
1404 /* Change TIM state */
1405 htim->State = HAL_TIM_STATE_RESET;
1406
1407 /* Release Lock */
1408 __HAL_UNLOCK(htim);
1409
1410 return HAL_OK;
1411}
1412
1419{
1420 /* Prevent unused argument(s) compilation warning */
1421 UNUSED(htim);
1422
1423 /* NOTE : This function should not be modified, when the callback is needed,
1424 the HAL_TIM_PWM_MspInit could be implemented in the user file
1425 */
1426}
1427
1434{
1435 /* Prevent unused argument(s) compilation warning */
1436 UNUSED(htim);
1437
1438 /* NOTE : This function should not be modified, when the callback is needed,
1439 the HAL_TIM_PWM_MspDeInit could be implemented in the user file
1440 */
1441}
1442
1455{
1456 uint32_t tmpsmcr;
1457
1458 /* Check the parameters */
1459 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1460
1461 /* Check the TIM channel state */
1463 {
1464 return HAL_ERROR;
1465 }
1466
1467 /* Set the TIM channel state */
1469
1470 /* Enable the Capture compare channel */
1471 TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
1472
1473 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1474 {
1475 /* Enable the main output */
1477 }
1478
1479 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
1480 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
1481 {
1482 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1484 {
1485 __HAL_TIM_ENABLE(htim);
1486 }
1487 }
1488 else
1489 {
1490 __HAL_TIM_ENABLE(htim);
1491 }
1492
1493 /* Return function status */
1494 return HAL_OK;
1495}
1496
1509{
1510 /* Check the parameters */
1511 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1512
1513 /* Disable the Capture compare channel */
1515
1516 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1517 {
1518 /* Disable the Main Output */
1520 }
1521
1522 /* Disable the Peripheral */
1523 __HAL_TIM_DISABLE(htim);
1524
1525 /* Set the TIM channel state */
1527
1528 /* Return function status */
1529 return HAL_OK;
1530}
1531
1544{
1545 HAL_StatusTypeDef status = HAL_OK;
1546 uint32_t tmpsmcr;
1547
1548 /* Check the parameters */
1549 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1550
1551 /* Check the TIM channel state */
1553 {
1554 return HAL_ERROR;
1555 }
1556
1557 /* Set the TIM channel state */
1559
1560 switch (Channel)
1561 {
1562 case TIM_CHANNEL_1:
1563 {
1564 /* Enable the TIM Capture/Compare 1 interrupt */
1566 break;
1567 }
1568
1569 case TIM_CHANNEL_2:
1570 {
1571 /* Enable the TIM Capture/Compare 2 interrupt */
1573 break;
1574 }
1575
1576 case TIM_CHANNEL_3:
1577 {
1578 /* Enable the TIM Capture/Compare 3 interrupt */
1580 break;
1581 }
1582
1583 case TIM_CHANNEL_4:
1584 {
1585 /* Enable the TIM Capture/Compare 4 interrupt */
1587 break;
1588 }
1589
1590 default:
1591 status = HAL_ERROR;
1592 break;
1593 }
1594
1595 if (status == HAL_OK)
1596 {
1597 /* Enable the Capture compare channel */
1598 TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
1599
1600 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1601 {
1602 /* Enable the main output */
1604 }
1605
1606 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
1607 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
1608 {
1609 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1611 {
1612 __HAL_TIM_ENABLE(htim);
1613 }
1614 }
1615 else
1616 {
1617 __HAL_TIM_ENABLE(htim);
1618 }
1619 }
1620
1621 /* Return function status */
1622 return status;
1623}
1624
1637{
1638 HAL_StatusTypeDef status = HAL_OK;
1639
1640 /* Check the parameters */
1641 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1642
1643 switch (Channel)
1644 {
1645 case TIM_CHANNEL_1:
1646 {
1647 /* Disable the TIM Capture/Compare 1 interrupt */
1649 break;
1650 }
1651
1652 case TIM_CHANNEL_2:
1653 {
1654 /* Disable the TIM Capture/Compare 2 interrupt */
1656 break;
1657 }
1658
1659 case TIM_CHANNEL_3:
1660 {
1661 /* Disable the TIM Capture/Compare 3 interrupt */
1663 break;
1664 }
1665
1666 case TIM_CHANNEL_4:
1667 {
1668 /* Disable the TIM Capture/Compare 4 interrupt */
1670 break;
1671 }
1672
1673 default:
1674 status = HAL_ERROR;
1675 break;
1676 }
1677
1678 if (status == HAL_OK)
1679 {
1680 /* Disable the Capture compare channel */
1682
1683 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1684 {
1685 /* Disable the Main Output */
1687 }
1688
1689 /* Disable the Peripheral */
1690 __HAL_TIM_DISABLE(htim);
1691
1692 /* Set the TIM channel state */
1694 }
1695
1696 /* Return function status */
1697 return status;
1698}
1699
1713HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData,
1714 uint16_t Length)
1715{
1716 HAL_StatusTypeDef status = HAL_OK;
1717 uint32_t tmpsmcr;
1718
1719 /* Check the parameters */
1720 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1721
1722 /* Set the TIM channel state */
1724 {
1725 return HAL_BUSY;
1726 }
1727 else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY)
1728 {
1729 if ((pData == NULL) || (Length == 0U))
1730 {
1731 return HAL_ERROR;
1732 }
1733 else
1734 {
1736 }
1737 }
1738 else
1739 {
1740 return HAL_ERROR;
1741 }
1742
1743 switch (Channel)
1744 {
1745 case TIM_CHANNEL_1:
1746 {
1747 /* Set the DMA compare callbacks */
1750
1751 /* Set the DMA error callback */
1753
1754 /* Enable the DMA stream */
1755 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1,
1756 Length) != HAL_OK)
1757 {
1758 /* Return error status */
1759 return HAL_ERROR;
1760 }
1761
1762 /* Enable the TIM Capture/Compare 1 DMA request */
1764 break;
1765 }
1766
1767 case TIM_CHANNEL_2:
1768 {
1769 /* Set the DMA compare callbacks */
1772
1773 /* Set the DMA error callback */
1775
1776 /* Enable the DMA stream */
1777 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2,
1778 Length) != HAL_OK)
1779 {
1780 /* Return error status */
1781 return HAL_ERROR;
1782 }
1783 /* Enable the TIM Capture/Compare 2 DMA request */
1785 break;
1786 }
1787
1788 case TIM_CHANNEL_3:
1789 {
1790 /* Set the DMA compare callbacks */
1793
1794 /* Set the DMA error callback */
1796
1797 /* Enable the DMA stream */
1798 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,
1799 Length) != HAL_OK)
1800 {
1801 /* Return error status */
1802 return HAL_ERROR;
1803 }
1804 /* Enable the TIM Output Capture/Compare 3 request */
1806 break;
1807 }
1808
1809 case TIM_CHANNEL_4:
1810 {
1811 /* Set the DMA compare callbacks */
1814
1815 /* Set the DMA error callback */
1817
1818 /* Enable the DMA stream */
1819 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4,
1820 Length) != HAL_OK)
1821 {
1822 /* Return error status */
1823 return HAL_ERROR;
1824 }
1825 /* Enable the TIM Capture/Compare 4 DMA request */
1827 break;
1828 }
1829
1830 default:
1831 status = HAL_ERROR;
1832 break;
1833 }
1834
1835 if (status == HAL_OK)
1836 {
1837 /* Enable the Capture compare channel */
1838 TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
1839
1840 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1841 {
1842 /* Enable the main output */
1844 }
1845
1846 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
1847 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
1848 {
1849 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1851 {
1852 __HAL_TIM_ENABLE(htim);
1853 }
1854 }
1855 else
1856 {
1857 __HAL_TIM_ENABLE(htim);
1858 }
1859 }
1860
1861 /* Return function status */
1862 return status;
1863}
1864
1877{
1878 HAL_StatusTypeDef status = HAL_OK;
1879
1880 /* Check the parameters */
1881 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
1882
1883 switch (Channel)
1884 {
1885 case TIM_CHANNEL_1:
1886 {
1887 /* Disable the TIM Capture/Compare 1 DMA request */
1889 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
1890 break;
1891 }
1892
1893 case TIM_CHANNEL_2:
1894 {
1895 /* Disable the TIM Capture/Compare 2 DMA request */
1897 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
1898 break;
1899 }
1900
1901 case TIM_CHANNEL_3:
1902 {
1903 /* Disable the TIM Capture/Compare 3 DMA request */
1905 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);
1906 break;
1907 }
1908
1909 case TIM_CHANNEL_4:
1910 {
1911 /* Disable the TIM Capture/Compare 4 interrupt */
1913 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);
1914 break;
1915 }
1916
1917 default:
1918 status = HAL_ERROR;
1919 break;
1920 }
1921
1922 if (status == HAL_OK)
1923 {
1924 /* Disable the Capture compare channel */
1926
1927 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
1928 {
1929 /* Disable the Main Output */
1931 }
1932
1933 /* Disable the Peripheral */
1934 __HAL_TIM_DISABLE(htim);
1935
1936 /* Set the TIM channel state */
1938 }
1939
1940 /* Return function status */
1941 return status;
1942}
1943
1980{
1981 /* Check the TIM handle allocation */
1982 if (htim == NULL)
1983 {
1984 return HAL_ERROR;
1985 }
1986
1987 /* Check the parameters */
1988 assert_param(IS_TIM_INSTANCE(htim->Instance));
1991 assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
1993
1994 if (htim->State == HAL_TIM_STATE_RESET)
1995 {
1996 /* Allocate lock resource and initialize it */
1997 htim->Lock = HAL_UNLOCKED;
1998
1999#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2000 /* Reset interrupt callbacks to legacy weak callbacks */
2001 TIM_ResetCallback(htim);
2002
2003 if (htim->IC_MspInitCallback == NULL)
2004 {
2005 htim->IC_MspInitCallback = HAL_TIM_IC_MspInit;
2006 }
2007 /* Init the low level hardware : GPIO, CLOCK, NVIC */
2008 htim->IC_MspInitCallback(htim);
2009#else
2010 /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
2011 HAL_TIM_IC_MspInit(htim);
2012#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
2013 }
2014
2015 /* Set the TIM state */
2016 htim->State = HAL_TIM_STATE_BUSY;
2017
2018 /* Init the base time for the input capture */
2019 TIM_Base_SetConfig(htim->Instance, &htim->Init);
2020
2021 /* Initialize the DMA burst operation state */
2023
2024 /* Initialize the TIM channels state */
2027
2028 /* Initialize the TIM state*/
2029 htim->State = HAL_TIM_STATE_READY;
2030
2031 return HAL_OK;
2032}
2033
2040{
2041 /* Check the parameters */
2042 assert_param(IS_TIM_INSTANCE(htim->Instance));
2043
2044 htim->State = HAL_TIM_STATE_BUSY;
2045
2046 /* Disable the TIM Peripheral Clock */
2047 __HAL_TIM_DISABLE(htim);
2048
2049#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2050 if (htim->IC_MspDeInitCallback == NULL)
2051 {
2052 htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit;
2053 }
2054 /* DeInit the low level hardware */
2055 htim->IC_MspDeInitCallback(htim);
2056#else
2057 /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */
2059#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
2060
2061 /* Change the DMA burst operation state */
2063
2064 /* Change the TIM channels state */
2067
2068 /* Change TIM state */
2069 htim->State = HAL_TIM_STATE_RESET;
2070
2071 /* Release Lock */
2072 __HAL_UNLOCK(htim);
2073
2074 return HAL_OK;
2075}
2076
2083{
2084 /* Prevent unused argument(s) compilation warning */
2085 UNUSED(htim);
2086
2087 /* NOTE : This function should not be modified, when the callback is needed,
2088 the HAL_TIM_IC_MspInit could be implemented in the user file
2089 */
2090}
2091
2098{
2099 /* Prevent unused argument(s) compilation warning */
2100 UNUSED(htim);
2101
2102 /* NOTE : This function should not be modified, when the callback is needed,
2103 the HAL_TIM_IC_MspDeInit could be implemented in the user file
2104 */
2105}
2106
2119{
2120 uint32_t tmpsmcr;
2121 HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
2122 HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);
2123
2124 /* Check the parameters */
2125 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
2126
2127 /* Check the TIM channel state */
2128 if ((channel_state != HAL_TIM_CHANNEL_STATE_READY)
2129 || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY))
2130 {
2131 return HAL_ERROR;
2132 }
2133
2134 /* Set the TIM channel state */
2137
2138 /* Enable the Input Capture channel */
2139 TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
2140
2141 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
2142 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
2143 {
2144 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
2146 {
2147 __HAL_TIM_ENABLE(htim);
2148 }
2149 }
2150 else
2151 {
2152 __HAL_TIM_ENABLE(htim);
2153 }
2154
2155 /* Return function status */
2156 return HAL_OK;
2157}
2158
2171{
2172 /* Check the parameters */
2173 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
2174
2175 /* Disable the Input Capture channel */
2177
2178 /* Disable the Peripheral */
2179 __HAL_TIM_DISABLE(htim);
2180
2181 /* Set the TIM channel state */
2184
2185 /* Return function status */
2186 return HAL_OK;
2187}
2188
2201{
2202 HAL_StatusTypeDef status = HAL_OK;
2203 uint32_t tmpsmcr;
2204
2205 HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
2206 HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);
2207
2208 /* Check the parameters */
2209 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
2210
2211 /* Check the TIM channel state */
2212 if ((channel_state != HAL_TIM_CHANNEL_STATE_READY)
2213 || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY))
2214 {
2215 return HAL_ERROR;
2216 }
2217
2218 /* Set the TIM channel state */
2221
2222 switch (Channel)
2223 {
2224 case TIM_CHANNEL_1:
2225 {
2226 /* Enable the TIM Capture/Compare 1 interrupt */
2228 break;
2229 }
2230
2231 case TIM_CHANNEL_2:
2232 {
2233 /* Enable the TIM Capture/Compare 2 interrupt */
2235 break;
2236 }
2237
2238 case TIM_CHANNEL_3:
2239 {
2240 /* Enable the TIM Capture/Compare 3 interrupt */
2242 break;
2243 }
2244
2245 case TIM_CHANNEL_4:
2246 {
2247 /* Enable the TIM Capture/Compare 4 interrupt */
2249 break;
2250 }
2251
2252 default:
2253 status = HAL_ERROR;
2254 break;
2255 }
2256
2257 if (status == HAL_OK)
2258 {
2259 /* Enable the Input Capture channel */
2260 TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
2261
2262 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
2263 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
2264 {
2265 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
2267 {
2268 __HAL_TIM_ENABLE(htim);
2269 }
2270 }
2271 else
2272 {
2273 __HAL_TIM_ENABLE(htim);
2274 }
2275 }
2276
2277 /* Return function status */
2278 return status;
2279}
2280
2293{
2294 HAL_StatusTypeDef status = HAL_OK;
2295
2296 /* Check the parameters */
2297 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
2298
2299 switch (Channel)
2300 {
2301 case TIM_CHANNEL_1:
2302 {
2303 /* Disable the TIM Capture/Compare 1 interrupt */
2305 break;
2306 }
2307
2308 case TIM_CHANNEL_2:
2309 {
2310 /* Disable the TIM Capture/Compare 2 interrupt */
2312 break;
2313 }
2314
2315 case TIM_CHANNEL_3:
2316 {
2317 /* Disable the TIM Capture/Compare 3 interrupt */
2319 break;
2320 }
2321
2322 case TIM_CHANNEL_4:
2323 {
2324 /* Disable the TIM Capture/Compare 4 interrupt */
2326 break;
2327 }
2328
2329 default:
2330 status = HAL_ERROR;
2331 break;
2332 }
2333
2334 if (status == HAL_OK)
2335 {
2336 /* Disable the Input Capture channel */
2338
2339 /* Disable the Peripheral */
2340 __HAL_TIM_DISABLE(htim);
2341
2342 /* Set the TIM channel state */
2345 }
2346
2347 /* Return function status */
2348 return status;
2349}
2350
2364HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
2365{
2366 HAL_StatusTypeDef status = HAL_OK;
2367 uint32_t tmpsmcr;
2368
2369 HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
2370 HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);
2371
2372 /* Check the parameters */
2373 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
2374 assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
2375
2376 /* Set the TIM channel state */
2377 if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY)
2378 || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY))
2379 {
2380 return HAL_BUSY;
2381 }
2382 else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY)
2383 && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY))
2384 {
2385 if ((pData == NULL) || (Length == 0U))
2386 {
2387 return HAL_ERROR;
2388 }
2389 else
2390 {
2393 }
2394 }
2395 else
2396 {
2397 return HAL_ERROR;
2398 }
2399
2400 /* Enable the Input Capture channel */
2401 TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
2402
2403 switch (Channel)
2404 {
2405 case TIM_CHANNEL_1:
2406 {
2407 /* Set the DMA capture callbacks */
2410
2411 /* Set the DMA error callback */
2413
2414 /* Enable the DMA stream */
2415 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData,
2416 Length) != HAL_OK)
2417 {
2418 /* Return error status */
2419 return HAL_ERROR;
2420 }
2421 /* Enable the TIM Capture/Compare 1 DMA request */
2423 break;
2424 }
2425
2426 case TIM_CHANNEL_2:
2427 {
2428 /* Set the DMA capture callbacks */
2431
2432 /* Set the DMA error callback */
2434
2435 /* Enable the DMA stream */
2436 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData,
2437 Length) != HAL_OK)
2438 {
2439 /* Return error status */
2440 return HAL_ERROR;
2441 }
2442 /* Enable the TIM Capture/Compare 2 DMA request */
2444 break;
2445 }
2446
2447 case TIM_CHANNEL_3:
2448 {
2449 /* Set the DMA capture callbacks */
2452
2453 /* Set the DMA error callback */
2455
2456 /* Enable the DMA stream */
2457 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData,
2458 Length) != HAL_OK)
2459 {
2460 /* Return error status */
2461 return HAL_ERROR;
2462 }
2463 /* Enable the TIM Capture/Compare 3 DMA request */
2465 break;
2466 }
2467
2468 case TIM_CHANNEL_4:
2469 {
2470 /* Set the DMA capture callbacks */
2473
2474 /* Set the DMA error callback */
2476
2477 /* Enable the DMA stream */
2478 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData,
2479 Length) != HAL_OK)
2480 {
2481 /* Return error status */
2482 return HAL_ERROR;
2483 }
2484 /* Enable the TIM Capture/Compare 4 DMA request */
2486 break;
2487 }
2488
2489 default:
2490 status = HAL_ERROR;
2491 break;
2492 }
2493
2494 /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
2495 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
2496 {
2497 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
2499 {
2500 __HAL_TIM_ENABLE(htim);
2501 }
2502 }
2503 else
2504 {
2505 __HAL_TIM_ENABLE(htim);
2506 }
2507
2508 /* Return function status */
2509 return status;
2510}
2511
2524{
2525 HAL_StatusTypeDef status = HAL_OK;
2526
2527 /* Check the parameters */
2528 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
2529 assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
2530
2531 /* Disable the Input Capture channel */
2533
2534 switch (Channel)
2535 {
2536 case TIM_CHANNEL_1:
2537 {
2538 /* Disable the TIM Capture/Compare 1 DMA request */
2540 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
2541 break;
2542 }
2543
2544 case TIM_CHANNEL_2:
2545 {
2546 /* Disable the TIM Capture/Compare 2 DMA request */
2548 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
2549 break;
2550 }
2551
2552 case TIM_CHANNEL_3:
2553 {
2554 /* Disable the TIM Capture/Compare 3 DMA request */
2556 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);
2557 break;
2558 }
2559
2560 case TIM_CHANNEL_4:
2561 {
2562 /* Disable the TIM Capture/Compare 4 DMA request */
2564 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);
2565 break;
2566 }
2567
2568 default:
2569 status = HAL_ERROR;
2570 break;
2571 }
2572
2573 if (status == HAL_OK)
2574 {
2575 /* Disable the Peripheral */
2576 __HAL_TIM_DISABLE(htim);
2577
2578 /* Set the TIM channel state */
2581 }
2582
2583 /* Return function status */
2584 return status;
2585}
2629{
2630 /* Check the TIM handle allocation */
2631 if (htim == NULL)
2632 {
2633 return HAL_ERROR;
2634 }
2635
2636 /* Check the parameters */
2637 assert_param(IS_TIM_INSTANCE(htim->Instance));
2640 assert_param(IS_TIM_OPM_MODE(OnePulseMode));
2641 assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
2643
2644 if (htim->State == HAL_TIM_STATE_RESET)
2645 {
2646 /* Allocate lock resource and initialize it */
2647 htim->Lock = HAL_UNLOCKED;
2648
2649#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2650 /* Reset interrupt callbacks to legacy weak callbacks */
2651 TIM_ResetCallback(htim);
2652
2653 if (htim->OnePulse_MspInitCallback == NULL)
2654 {
2655 htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit;
2656 }
2657 /* Init the low level hardware : GPIO, CLOCK, NVIC */
2658 htim->OnePulse_MspInitCallback(htim);
2659#else
2660 /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
2662#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
2663 }
2664
2665 /* Set the TIM state */
2666 htim->State = HAL_TIM_STATE_BUSY;
2667
2668 /* Configure the Time base in the One Pulse Mode */
2669 TIM_Base_SetConfig(htim->Instance, &htim->Init);
2670
2671 /* Reset the OPM Bit */
2672 htim->Instance->CR1 &= ~TIM_CR1_OPM;
2673
2674 /* Configure the OPM Mode */
2675 htim->Instance->CR1 |= OnePulseMode;
2676
2677 /* Initialize the DMA burst operation state */
2679
2680 /* Initialize the TIM channels state */
2685
2686 /* Initialize the TIM state*/
2687 htim->State = HAL_TIM_STATE_READY;
2688
2689 return HAL_OK;
2690}
2691
2698{
2699 /* Check the parameters */
2700 assert_param(IS_TIM_INSTANCE(htim->Instance));
2701
2702 htim->State = HAL_TIM_STATE_BUSY;
2703
2704 /* Disable the TIM Peripheral Clock */
2705 __HAL_TIM_DISABLE(htim);
2706
2707#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2708 if (htim->OnePulse_MspDeInitCallback == NULL)
2709 {
2710 htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit;
2711 }
2712 /* DeInit the low level hardware */
2713 htim->OnePulse_MspDeInitCallback(htim);
2714#else
2715 /* DeInit the low level hardware: GPIO, CLOCK, NVIC */
2717#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
2718
2719 /* Change the DMA burst operation state */
2721
2722 /* Set the TIM channel state */
2727
2728 /* Change TIM state */
2729 htim->State = HAL_TIM_STATE_RESET;
2730
2731 /* Release Lock */
2732 __HAL_UNLOCK(htim);
2733
2734 return HAL_OK;
2735}
2736
2743{
2744 /* Prevent unused argument(s) compilation warning */
2745 UNUSED(htim);
2746
2747 /* NOTE : This function should not be modified, when the callback is needed,
2748 the HAL_TIM_OnePulse_MspInit could be implemented in the user file
2749 */
2750}
2751
2758{
2759 /* Prevent unused argument(s) compilation warning */
2760 UNUSED(htim);
2761
2762 /* NOTE : This function should not be modified, when the callback is needed,
2763 the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file
2764 */
2765}
2766
2778{
2781 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
2782 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
2783
2784 /* Prevent unused argument(s) compilation warning */
2785 UNUSED(OutputChannel);
2786
2787 /* Check the TIM channels state */
2788 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
2789 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
2790 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
2791 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
2792 {
2793 return HAL_ERROR;
2794 }
2795
2796 /* Set the TIM channels state */
2801
2802 /* Enable the Capture compare and the Input Capture channels
2803 (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)
2804 if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and
2805 if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output
2806 whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together
2807
2808 No need to enable the counter, it's enabled automatically by hardware
2809 (the counter starts in response to a stimulus and generate a pulse */
2810
2813
2814 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
2815 {
2816 /* Enable the main output */
2818 }
2819
2820 /* Return function status */
2821 return HAL_OK;
2822}
2823
2835{
2836 /* Prevent unused argument(s) compilation warning */
2837 UNUSED(OutputChannel);
2838
2839 /* Disable the Capture compare and the Input Capture channels
2840 (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)
2841 if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and
2842 if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output
2843 whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */
2844
2847
2848 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
2849 {
2850 /* Disable the Main Output */
2852 }
2853
2854 /* Disable the Peripheral */
2855 __HAL_TIM_DISABLE(htim);
2856
2857 /* Set the TIM channels state */
2862
2863 /* Return function status */
2864 return HAL_OK;
2865}
2866
2878{
2881 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
2882 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
2883
2884 /* Prevent unused argument(s) compilation warning */
2885 UNUSED(OutputChannel);
2886
2887 /* Check the TIM channels state */
2888 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
2889 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
2890 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
2891 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
2892 {
2893 return HAL_ERROR;
2894 }
2895
2896 /* Set the TIM channels state */
2901
2902 /* Enable the Capture compare and the Input Capture channels
2903 (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)
2904 if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and
2905 if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output
2906 whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together
2907
2908 No need to enable the counter, it's enabled automatically by hardware
2909 (the counter starts in response to a stimulus and generate a pulse */
2910
2911 /* Enable the TIM Capture/Compare 1 interrupt */
2913
2914 /* Enable the TIM Capture/Compare 2 interrupt */
2916
2919
2920 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
2921 {
2922 /* Enable the main output */
2924 }
2925
2926 /* Return function status */
2927 return HAL_OK;
2928}
2929
2941{
2942 /* Prevent unused argument(s) compilation warning */
2943 UNUSED(OutputChannel);
2944
2945 /* Disable the TIM Capture/Compare 1 interrupt */
2947
2948 /* Disable the TIM Capture/Compare 2 interrupt */
2950
2951 /* Disable the Capture compare and the Input Capture channels
2952 (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)
2953 if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and
2954 if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output
2955 whatever the combination, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */
2958
2959 if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
2960 {
2961 /* Disable the Main Output */
2963 }
2964
2965 /* Disable the Peripheral */
2966 __HAL_TIM_DISABLE(htim);
2967
2968 /* Set the TIM channels state */
2973
2974 /* Return function status */
2975 return HAL_OK;
2976}
2977
3020{
3021 uint32_t tmpsmcr;
3022 uint32_t tmpccmr1;
3023 uint32_t tmpccer;
3024
3025 /* Check the TIM handle allocation */
3026 if (htim == NULL)
3027 {
3028 return HAL_ERROR;
3029 }
3030
3031 /* Check the parameters */
3032 assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
3045 assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
3046
3047 if (htim->State == HAL_TIM_STATE_RESET)
3048 {
3049 /* Allocate lock resource and initialize it */
3050 htim->Lock = HAL_UNLOCKED;
3051
3052#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3053 /* Reset interrupt callbacks to legacy weak callbacks */
3054 TIM_ResetCallback(htim);
3055
3056 if (htim->Encoder_MspInitCallback == NULL)
3057 {
3058 htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit;
3059 }
3060 /* Init the low level hardware : GPIO, CLOCK, NVIC */
3061 htim->Encoder_MspInitCallback(htim);
3062#else
3063 /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
3065#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3066 }
3067
3068 /* Set the TIM state */
3069 htim->State = HAL_TIM_STATE_BUSY;
3070
3071 /* Reset the SMS and ECE bits */
3072 htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE);
3073
3074 /* Configure the Time base in the Encoder Mode */
3075 TIM_Base_SetConfig(htim->Instance, &htim->Init);
3076
3077 /* Get the TIMx SMCR register value */
3078 tmpsmcr = htim->Instance->SMCR;
3079
3080 /* Get the TIMx CCMR1 register value */
3081 tmpccmr1 = htim->Instance->CCMR1;
3082
3083 /* Get the TIMx CCER register value */
3084 tmpccer = htim->Instance->CCER;
3085
3086 /* Set the encoder Mode */
3087 tmpsmcr |= sConfig->EncoderMode;
3088
3089 /* Select the Capture Compare 1 and the Capture Compare 2 as input */
3090 tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S);
3091 tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U));
3092
3093 /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */
3094 tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC);
3095 tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F);
3096 tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U);
3097 tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U);
3098
3099 /* Set the TI1 and the TI2 Polarities */
3100 tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);
3101 tmpccer &= ~(TIM_CCER_CC1NP | TIM_CCER_CC2NP);
3102 tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U);
3103
3104 /* Write to TIMx SMCR */
3105 htim->Instance->SMCR = tmpsmcr;
3106
3107 /* Write to TIMx CCMR1 */
3108 htim->Instance->CCMR1 = tmpccmr1;
3109
3110 /* Write to TIMx CCER */
3111 htim->Instance->CCER = tmpccer;
3112
3113 /* Initialize the DMA burst operation state */
3115
3116 /* Set the TIM channels state */
3121
3122 /* Initialize the TIM state*/
3123 htim->State = HAL_TIM_STATE_READY;
3124
3125 return HAL_OK;
3126}
3127
3128
3135{
3136 /* Check the parameters */
3137 assert_param(IS_TIM_INSTANCE(htim->Instance));
3138
3139 htim->State = HAL_TIM_STATE_BUSY;
3140
3141 /* Disable the TIM Peripheral Clock */
3142 __HAL_TIM_DISABLE(htim);
3143
3144#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3145 if (htim->Encoder_MspDeInitCallback == NULL)
3146 {
3147 htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit;
3148 }
3149 /* DeInit the low level hardware */
3150 htim->Encoder_MspDeInitCallback(htim);
3151#else
3152 /* DeInit the low level hardware: GPIO, CLOCK, NVIC */
3154#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3155
3156 /* Change the DMA burst operation state */
3158
3159 /* Set the TIM channels state */
3164
3165 /* Change TIM state */
3166 htim->State = HAL_TIM_STATE_RESET;
3167
3168 /* Release Lock */
3169 __HAL_UNLOCK(htim);
3170
3171 return HAL_OK;
3172}
3173
3180{
3181 /* Prevent unused argument(s) compilation warning */
3182 UNUSED(htim);
3183
3184 /* NOTE : This function should not be modified, when the callback is needed,
3185 the HAL_TIM_Encoder_MspInit could be implemented in the user file
3186 */
3187}
3188
3195{
3196 /* Prevent unused argument(s) compilation warning */
3197 UNUSED(htim);
3198
3199 /* NOTE : This function should not be modified, when the callback is needed,
3200 the HAL_TIM_Encoder_MspDeInit could be implemented in the user file
3201 */
3202}
3203
3215{
3218 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
3219 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
3220
3221 /* Check the parameters */
3222 assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
3223
3224 /* Set the TIM channel(s) state */
3225 if (Channel == TIM_CHANNEL_1)
3226 {
3227 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
3228 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY))
3229 {
3230 return HAL_ERROR;
3231 }
3232 else
3233 {
3236 }
3237 }
3238 else if (Channel == TIM_CHANNEL_2)
3239 {
3240 if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
3241 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
3242 {
3243 return HAL_ERROR;
3244 }
3245 else
3246 {
3249 }
3250 }
3251 else
3252 {
3253 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
3254 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
3255 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
3256 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
3257 {
3258 return HAL_ERROR;
3259 }
3260 else
3261 {
3266 }
3267 }
3268
3269 /* Enable the encoder interface channels */
3270 switch (Channel)
3271 {
3272 case TIM_CHANNEL_1:
3273 {
3275 break;
3276 }
3277
3278 case TIM_CHANNEL_2:
3279 {
3281 break;
3282 }
3283
3284 default :
3285 {
3288 break;
3289 }
3290 }
3291 /* Enable the Peripheral */
3292 __HAL_TIM_ENABLE(htim);
3293
3294 /* Return function status */
3295 return HAL_OK;
3296}
3297
3309{
3310 /* Check the parameters */
3311 assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
3312
3313 /* Disable the Input Capture channels 1 and 2
3314 (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
3315 switch (Channel)
3316 {
3317 case TIM_CHANNEL_1:
3318 {
3320 break;
3321 }
3322
3323 case TIM_CHANNEL_2:
3324 {
3326 break;
3327 }
3328
3329 default :
3330 {
3333 break;
3334 }
3335 }
3336
3337 /* Disable the Peripheral */
3338 __HAL_TIM_DISABLE(htim);
3339
3340 /* Set the TIM channel(s) state */
3341 if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2))
3342 {
3345 }
3346 else
3347 {
3352 }
3353
3354 /* Return function status */
3355 return HAL_OK;
3356}
3357
3369{
3372 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
3373 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
3374
3375 /* Check the parameters */
3376 assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
3377
3378 /* Set the TIM channel(s) state */
3379 if (Channel == TIM_CHANNEL_1)
3380 {
3381 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
3382 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY))
3383 {
3384 return HAL_ERROR;
3385 }
3386 else
3387 {
3390 }
3391 }
3392 else if (Channel == TIM_CHANNEL_2)
3393 {
3394 if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
3395 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
3396 {
3397 return HAL_ERROR;
3398 }
3399 else
3400 {
3403 }
3404 }
3405 else
3406 {
3407 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
3408 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
3409 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
3410 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
3411 {
3412 return HAL_ERROR;
3413 }
3414 else
3415 {
3420 }
3421 }
3422
3423 /* Enable the encoder interface channels */
3424 /* Enable the capture compare Interrupts 1 and/or 2 */
3425 switch (Channel)
3426 {
3427 case TIM_CHANNEL_1:
3428 {
3431 break;
3432 }
3433
3434 case TIM_CHANNEL_2:
3435 {
3438 break;
3439 }
3440
3441 default :
3442 {
3447 break;
3448 }
3449 }
3450
3451 /* Enable the Peripheral */
3452 __HAL_TIM_ENABLE(htim);
3453
3454 /* Return function status */
3455 return HAL_OK;
3456}
3457
3469{
3470 /* Check the parameters */
3471 assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
3472
3473 /* Disable the Input Capture channels 1 and 2
3474 (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
3475 if (Channel == TIM_CHANNEL_1)
3476 {
3478
3479 /* Disable the capture compare Interrupts 1 */
3481 }
3482 else if (Channel == TIM_CHANNEL_2)
3483 {
3485
3486 /* Disable the capture compare Interrupts 2 */
3488 }
3489 else
3490 {
3493
3494 /* Disable the capture compare Interrupts 1 and 2 */
3497 }
3498
3499 /* Disable the Peripheral */
3500 __HAL_TIM_DISABLE(htim);
3501
3502 /* Set the TIM channel(s) state */
3503 if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2))
3504 {
3507 }
3508 else
3509 {
3514 }
3515
3516 /* Return function status */
3517 return HAL_OK;
3518}
3519
3533HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
3534 uint32_t *pData2, uint16_t Length)
3535{
3538 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
3539 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
3540
3541 /* Check the parameters */
3542 assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
3543
3544 /* Set the TIM channel(s) state */
3545 if (Channel == TIM_CHANNEL_1)
3546 {
3547 if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)
3548 || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY))
3549 {
3550 return HAL_BUSY;
3551 }
3552 else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY)
3553 && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY))
3554 {
3555 if ((pData1 == NULL) || (Length == 0U))
3556 {
3557 return HAL_ERROR;
3558 }
3559 else
3560 {
3563 }
3564 }
3565 else
3566 {
3567 return HAL_ERROR;
3568 }
3569 }
3570 else if (Channel == TIM_CHANNEL_2)
3571 {
3572 if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)
3573 || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY))
3574 {
3575 return HAL_BUSY;
3576 }
3577 else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY)
3578 && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY))
3579 {
3580 if ((pData2 == NULL) || (Length == 0U))
3581 {
3582 return HAL_ERROR;
3583 }
3584 else
3585 {
3588 }
3589 }
3590 else
3591 {
3592 return HAL_ERROR;
3593 }
3594 }
3595 else
3596 {
3597 if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)
3598 || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)
3599 || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)
3600 || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY))
3601 {
3602 return HAL_BUSY;
3603 }
3604 else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY)
3605 && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY)
3606 && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)
3607 && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY))
3608 {
3609 if ((((pData1 == NULL) || (pData2 == NULL))) || (Length == 0U))
3610 {
3611 return HAL_ERROR;
3612 }
3613 else
3614 {
3619 }
3620 }
3621 else
3622 {
3623 return HAL_ERROR;
3624 }
3625 }
3626
3627 switch (Channel)
3628 {
3629 case TIM_CHANNEL_1:
3630 {
3631 /* Set the DMA capture callbacks */
3634
3635 /* Set the DMA error callback */
3637
3638 /* Enable the DMA stream */
3639 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1,
3640 Length) != HAL_OK)
3641 {
3642 /* Return error status */
3643 return HAL_ERROR;
3644 }
3645 /* Enable the TIM Input Capture DMA request */
3647
3648 /* Enable the Capture compare channel */
3650
3651 /* Enable the Peripheral */
3652 __HAL_TIM_ENABLE(htim);
3653
3654 break;
3655 }
3656
3657 case TIM_CHANNEL_2:
3658 {
3659 /* Set the DMA capture callbacks */
3662
3663 /* Set the DMA error callback */
3665 /* Enable the DMA stream */
3666 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2,
3667 Length) != HAL_OK)
3668 {
3669 /* Return error status */
3670 return HAL_ERROR;
3671 }
3672 /* Enable the TIM Input Capture DMA request */
3674
3675 /* Enable the Capture compare channel */
3677
3678 /* Enable the Peripheral */
3679 __HAL_TIM_ENABLE(htim);
3680
3681 break;
3682 }
3683
3684 default:
3685 {
3686 /* Set the DMA capture callbacks */
3689
3690 /* Set the DMA error callback */
3692
3693 /* Enable the DMA stream */
3694 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1,
3695 Length) != HAL_OK)
3696 {
3697 /* Return error status */
3698 return HAL_ERROR;
3699 }
3700
3701 /* Set the DMA capture callbacks */
3704
3705 /* Set the DMA error callback */
3707
3708 /* Enable the DMA stream */
3709 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2,
3710 Length) != HAL_OK)
3711 {
3712 /* Return error status */
3713 return HAL_ERROR;
3714 }
3715
3716 /* Enable the TIM Input Capture DMA request */
3718 /* Enable the TIM Input Capture DMA request */
3720
3721 /* Enable the Capture compare channel */
3724
3725 /* Enable the Peripheral */
3726 __HAL_TIM_ENABLE(htim);
3727
3728 break;
3729 }
3730 }
3731
3732 /* Return function status */
3733 return HAL_OK;
3734}
3735
3747{
3748 /* Check the parameters */
3749 assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
3750
3751 /* Disable the Input Capture channels 1 and 2
3752 (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
3753 if (Channel == TIM_CHANNEL_1)
3754 {
3756
3757 /* Disable the capture compare DMA Request 1 */
3759 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
3760 }
3761 else if (Channel == TIM_CHANNEL_2)
3762 {
3764
3765 /* Disable the capture compare DMA Request 2 */
3767 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
3768 }
3769 else
3770 {
3773
3774 /* Disable the capture compare DMA Request 1 and 2 */
3777 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
3778 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
3779 }
3780
3781 /* Disable the Peripheral */
3782 __HAL_TIM_DISABLE(htim);
3783
3784 /* Set the TIM channel(s) state */
3785 if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2))
3786 {
3789 }
3790 else
3791 {
3796 }
3797
3798 /* Return function status */
3799 return HAL_OK;
3800}
3801
3824{
3825 uint32_t itsource = htim->Instance->DIER;
3826 uint32_t itflag = htim->Instance->SR;
3827
3828 /* Capture compare 1 event */
3829 if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1))
3830 {
3831 if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1))
3832 {
3833 {
3836
3837 /* Input capture event */
3838 if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)
3839 {
3840#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3841 htim->IC_CaptureCallback(htim);
3842#else
3844#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3845 }
3846 /* Output compare event */
3847 else
3848 {
3849#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3850 htim->OC_DelayElapsedCallback(htim);
3851 htim->PWM_PulseFinishedCallback(htim);
3852#else
3855#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3856 }
3858 }
3859 }
3860 }
3861 /* Capture compare 2 event */
3862 if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2))
3863 {
3864 if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2))
3865 {
3868 /* Input capture event */
3869 if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)
3870 {
3871#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3872 htim->IC_CaptureCallback(htim);
3873#else
3875#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3876 }
3877 /* Output compare event */
3878 else
3879 {
3880#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3881 htim->OC_DelayElapsedCallback(htim);
3882 htim->PWM_PulseFinishedCallback(htim);
3883#else
3886#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3887 }
3889 }
3890 }
3891 /* Capture compare 3 event */
3892 if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3))
3893 {
3894 if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3))
3895 {
3898 /* Input capture event */
3899 if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)
3900 {
3901#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3902 htim->IC_CaptureCallback(htim);
3903#else
3905#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3906 }
3907 /* Output compare event */
3908 else
3909 {
3910#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3911 htim->OC_DelayElapsedCallback(htim);
3912 htim->PWM_PulseFinishedCallback(htim);
3913#else
3916#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3917 }
3919 }
3920 }
3921 /* Capture compare 4 event */
3922 if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4))
3923 {
3924 if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4))
3925 {
3928 /* Input capture event */
3929 if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)
3930 {
3931#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3932 htim->IC_CaptureCallback(htim);
3933#else
3935#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3936 }
3937 /* Output compare event */
3938 else
3939 {
3940#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3941 htim->OC_DelayElapsedCallback(htim);
3942 htim->PWM_PulseFinishedCallback(htim);
3943#else
3946#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3947 }
3949 }
3950 }
3951 /* TIM Update event */
3952 if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE))
3953 {
3954 if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE))
3955 {
3957#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3958 htim->PeriodElapsedCallback(htim);
3959#else
3961#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3962 }
3963 }
3964 /* TIM Break input event */
3965 if ((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK))
3966 {
3967 if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
3968 {
3970#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3971 htim->BreakCallback(htim);
3972#else
3974#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3975 }
3976 }
3977 /* TIM Trigger detection event */
3978 if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER))
3979 {
3980 if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER))
3981 {
3983#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3984 htim->TriggerCallback(htim);
3985#else
3987#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
3988 }
3989 }
3990 /* TIM commutation event */
3991 if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM))
3992 {
3993 if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM))
3994 {
3996#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
3997 htim->CommutationCallback(htim);
3998#else
4000#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
4001 }
4002 }
4003}
4004
4042 const TIM_OC_InitTypeDef *sConfig,
4043 uint32_t Channel)
4044{
4045 HAL_StatusTypeDef status = HAL_OK;
4046
4047 /* Check the parameters */
4048 assert_param(IS_TIM_CHANNELS(Channel));
4051
4052 /* Process Locked */
4053 __HAL_LOCK(htim);
4054
4055 switch (Channel)
4056 {
4057 case TIM_CHANNEL_1:
4058 {
4059 /* Check the parameters */
4060 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
4061
4062 /* Configure the TIM Channel 1 in Output Compare */
4063 TIM_OC1_SetConfig(htim->Instance, sConfig);
4064 break;
4065 }
4066
4067 case TIM_CHANNEL_2:
4068 {
4069 /* Check the parameters */
4070 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
4071
4072 /* Configure the TIM Channel 2 in Output Compare */
4073 TIM_OC2_SetConfig(htim->Instance, sConfig);
4074 break;
4075 }
4076
4077 case TIM_CHANNEL_3:
4078 {
4079 /* Check the parameters */
4080 assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
4081
4082 /* Configure the TIM Channel 3 in Output Compare */
4083 TIM_OC3_SetConfig(htim->Instance, sConfig);
4084 break;
4085 }
4086
4087 case TIM_CHANNEL_4:
4088 {
4089 /* Check the parameters */
4090 assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
4091
4092 /* Configure the TIM Channel 4 in Output Compare */
4093 TIM_OC4_SetConfig(htim->Instance, sConfig);
4094 break;
4095 }
4096
4097 default:
4098 status = HAL_ERROR;
4099 break;
4100 }
4101
4102 __HAL_UNLOCK(htim);
4103
4104 return status;
4105}
4106
4121{
4122 HAL_StatusTypeDef status = HAL_OK;
4123
4124 /* Check the parameters */
4125 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
4130
4131 /* Process Locked */
4132 __HAL_LOCK(htim);
4133
4134 if (Channel == TIM_CHANNEL_1)
4135 {
4136 /* TI1 Configuration */
4138 sConfig->ICPolarity,
4139 sConfig->ICSelection,
4140 sConfig->ICFilter);
4141
4142 /* Reset the IC1PSC Bits */
4143 htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;
4144
4145 /* Set the IC1PSC value */
4146 htim->Instance->CCMR1 |= sConfig->ICPrescaler;
4147 }
4148 else if (Channel == TIM_CHANNEL_2)
4149 {
4150 /* TI2 Configuration */
4151 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
4152
4154 sConfig->ICPolarity,
4155 sConfig->ICSelection,
4156 sConfig->ICFilter);
4157
4158 /* Reset the IC2PSC Bits */
4159 htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;
4160
4161 /* Set the IC2PSC value */
4162 htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U);
4163 }
4164 else if (Channel == TIM_CHANNEL_3)
4165 {
4166 /* TI3 Configuration */
4167 assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
4168
4170 sConfig->ICPolarity,
4171 sConfig->ICSelection,
4172 sConfig->ICFilter);
4173
4174 /* Reset the IC3PSC Bits */
4175 htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC;
4176
4177 /* Set the IC3PSC value */
4178 htim->Instance->CCMR2 |= sConfig->ICPrescaler;
4179 }
4180 else if (Channel == TIM_CHANNEL_4)
4181 {
4182 /* TI4 Configuration */
4183 assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
4184
4186 sConfig->ICPolarity,
4187 sConfig->ICSelection,
4188 sConfig->ICFilter);
4189
4190 /* Reset the IC4PSC Bits */
4191 htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC;
4192
4193 /* Set the IC4PSC value */
4194 htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U);
4195 }
4196 else
4197 {
4198 status = HAL_ERROR;
4199 }
4200
4201 __HAL_UNLOCK(htim);
4202
4203 return status;
4204}
4205
4220 const TIM_OC_InitTypeDef *sConfig,
4221 uint32_t Channel)
4222{
4223 HAL_StatusTypeDef status = HAL_OK;
4224
4225 /* Check the parameters */
4226 assert_param(IS_TIM_CHANNELS(Channel));
4230
4231 /* Process Locked */
4232 __HAL_LOCK(htim);
4233
4234 switch (Channel)
4235 {
4236 case TIM_CHANNEL_1:
4237 {
4238 /* Check the parameters */
4239 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
4240
4241 /* Configure the Channel 1 in PWM mode */
4242 TIM_OC1_SetConfig(htim->Instance, sConfig);
4243
4244 /* Set the Preload enable bit for channel1 */
4245 htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;
4246
4247 /* Configure the Output Fast mode */
4248 htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;
4249 htim->Instance->CCMR1 |= sConfig->OCFastMode;
4250 break;
4251 }
4252
4253 case TIM_CHANNEL_2:
4254 {
4255 /* Check the parameters */
4256 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
4257
4258 /* Configure the Channel 2 in PWM mode */
4259 TIM_OC2_SetConfig(htim->Instance, sConfig);
4260
4261 /* Set the Preload enable bit for channel2 */
4262 htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;
4263
4264 /* Configure the Output Fast mode */
4265 htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;
4266 htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;
4267 break;
4268 }
4269
4270 case TIM_CHANNEL_3:
4271 {
4272 /* Check the parameters */
4273 assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
4274
4275 /* Configure the Channel 3 in PWM mode */
4276 TIM_OC3_SetConfig(htim->Instance, sConfig);
4277
4278 /* Set the Preload enable bit for channel3 */
4279 htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;
4280
4281 /* Configure the Output Fast mode */
4282 htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;
4283 htim->Instance->CCMR2 |= sConfig->OCFastMode;
4284 break;
4285 }
4286
4287 case TIM_CHANNEL_4:
4288 {
4289 /* Check the parameters */
4290 assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
4291
4292 /* Configure the Channel 4 in PWM mode */
4293 TIM_OC4_SetConfig(htim->Instance, sConfig);
4294
4295 /* Set the Preload enable bit for channel4 */
4296 htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;
4297
4298 /* Configure the Output Fast mode */
4299 htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;
4300 htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;
4301 break;
4302 }
4303
4304 default:
4305 status = HAL_ERROR;
4306 break;
4307 }
4308
4309 __HAL_UNLOCK(htim);
4310
4311 return status;
4312}
4313
4334 uint32_t OutputChannel, uint32_t InputChannel)
4335{
4336 HAL_StatusTypeDef status = HAL_OK;
4337 TIM_OC_InitTypeDef temp1;
4338
4339 /* Check the parameters */
4340 assert_param(IS_TIM_OPM_CHANNELS(OutputChannel));
4341 assert_param(IS_TIM_OPM_CHANNELS(InputChannel));
4342
4343 if (OutputChannel != InputChannel)
4344 {
4345 /* Process Locked */
4346 __HAL_LOCK(htim);
4347
4348 htim->State = HAL_TIM_STATE_BUSY;
4349
4350 /* Extract the Output compare configuration from sConfig structure */
4351 temp1.OCMode = sConfig->OCMode;
4352 temp1.Pulse = sConfig->Pulse;
4353 temp1.OCPolarity = sConfig->OCPolarity;
4354 temp1.OCNPolarity = sConfig->OCNPolarity;
4355 temp1.OCIdleState = sConfig->OCIdleState;
4356 temp1.OCNIdleState = sConfig->OCNIdleState;
4357
4358 switch (OutputChannel)
4359 {
4360 case TIM_CHANNEL_1:
4361 {
4362 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
4363
4364 TIM_OC1_SetConfig(htim->Instance, &temp1);
4365 break;
4366 }
4367
4368 case TIM_CHANNEL_2:
4369 {
4370 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
4371
4372 TIM_OC2_SetConfig(htim->Instance, &temp1);
4373 break;
4374 }
4375
4376 default:
4377 status = HAL_ERROR;
4378 break;
4379 }
4380
4381 if (status == HAL_OK)
4382 {
4383 switch (InputChannel)
4384 {
4385 case TIM_CHANNEL_1:
4386 {
4387 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
4388
4389 TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity,
4390 sConfig->ICSelection, sConfig->ICFilter);
4391
4392 /* Reset the IC1PSC Bits */
4393 htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;
4394
4395 /* Select the Trigger source */
4396 htim->Instance->SMCR &= ~TIM_SMCR_TS;
4397 htim->Instance->SMCR |= TIM_TS_TI1FP1;
4398
4399 /* Select the Slave Mode */
4400 htim->Instance->SMCR &= ~TIM_SMCR_SMS;
4401 htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;
4402 break;
4403 }
4404
4405 case TIM_CHANNEL_2:
4406 {
4407 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
4408
4409 TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity,
4410 sConfig->ICSelection, sConfig->ICFilter);
4411
4412 /* Reset the IC2PSC Bits */
4413 htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;
4414
4415 /* Select the Trigger source */
4416 htim->Instance->SMCR &= ~TIM_SMCR_TS;
4417 htim->Instance->SMCR |= TIM_TS_TI2FP2;
4418
4419 /* Select the Slave Mode */
4420 htim->Instance->SMCR &= ~TIM_SMCR_SMS;
4421 htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;
4422 break;
4423 }
4424
4425 default:
4426 status = HAL_ERROR;
4427 break;
4428 }
4429 }
4430
4431 htim->State = HAL_TIM_STATE_READY;
4432
4433 __HAL_UNLOCK(htim);
4434
4435 return status;
4436 }
4437 else
4438 {
4439 return HAL_ERROR;
4440 }
4441}
4442
4482 uint32_t BurstRequestSrc, const uint32_t *BurstBuffer,
4483 uint32_t BurstLength)
4484{
4485 HAL_StatusTypeDef status;
4486
4487 status = HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength,
4488 ((BurstLength) >> 8U) + 1U);
4489
4490
4491
4492 return status;
4493}
4494
4535 uint32_t BurstRequestSrc, const uint32_t *BurstBuffer,
4536 uint32_t BurstLength, uint32_t DataLength)
4537{
4538 HAL_StatusTypeDef status = HAL_OK;
4539
4540 /* Check the parameters */
4541 assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
4542 assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));
4543 assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
4544 assert_param(IS_TIM_DMA_LENGTH(BurstLength));
4546
4548 {
4549 return HAL_BUSY;
4550 }
4551 else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY)
4552 {
4553 if ((BurstBuffer == NULL) && (BurstLength > 0U))
4554 {
4555 return HAL_ERROR;
4556 }
4557 else
4558 {
4560 }
4561 }
4562 else
4563 {
4564 /* nothing to do */
4565 }
4566
4567 switch (BurstRequestSrc)
4568 {
4569 case TIM_DMA_UPDATE:
4570 {
4571 /* Set the DMA Period elapsed callbacks */
4574
4575 /* Set the DMA error callback */
4577
4578 /* Enable the DMA stream */
4579 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer,
4580 (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK)
4581 {
4582 /* Return error status */
4583 return HAL_ERROR;
4584 }
4585 break;
4586 }
4587 case TIM_DMA_CC1:
4588 {
4589 /* Set the DMA compare callbacks */
4592
4593 /* Set the DMA error callback */
4595
4596 /* Enable the DMA stream */
4597 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
4598 (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK)
4599 {
4600 /* Return error status */
4601 return HAL_ERROR;
4602 }
4603 break;
4604 }
4605 case TIM_DMA_CC2:
4606 {
4607 /* Set the DMA compare callbacks */
4610
4611 /* Set the DMA error callback */
4613
4614 /* Enable the DMA stream */
4615 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
4616 (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK)
4617 {
4618 /* Return error status */
4619 return HAL_ERROR;
4620 }
4621 break;
4622 }
4623 case TIM_DMA_CC3:
4624 {
4625 /* Set the DMA compare callbacks */
4628
4629 /* Set the DMA error callback */
4631
4632 /* Enable the DMA stream */
4633 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
4634 (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK)
4635 {
4636 /* Return error status */
4637 return HAL_ERROR;
4638 }
4639 break;
4640 }
4641 case TIM_DMA_CC4:
4642 {
4643 /* Set the DMA compare callbacks */
4646
4647 /* Set the DMA error callback */
4649
4650 /* Enable the DMA stream */
4651 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
4652 (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK)
4653 {
4654 /* Return error status */
4655 return HAL_ERROR;
4656 }
4657 break;
4658 }
4659 case TIM_DMA_COM:
4660 {
4661 /* Set the DMA commutation callbacks */
4664
4665 /* Set the DMA error callback */
4667
4668 /* Enable the DMA stream */
4669 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
4670 (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK)
4671 {
4672 /* Return error status */
4673 return HAL_ERROR;
4674 }
4675 break;
4676 }
4677 case TIM_DMA_TRIGGER:
4678 {
4679 /* Set the DMA trigger callbacks */
4682
4683 /* Set the DMA error callback */
4685
4686 /* Enable the DMA stream */
4687 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
4688 (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK)
4689 {
4690 /* Return error status */
4691 return HAL_ERROR;
4692 }
4693 break;
4694 }
4695 default:
4696 status = HAL_ERROR;
4697 break;
4698 }
4699
4700 if (status == HAL_OK)
4701 {
4702 /* Configure the DMA Burst Mode */
4703 htim->Instance->DCR = (BurstBaseAddress | BurstLength);
4704 /* Enable the TIM DMA Request */
4705 __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);
4706 }
4707
4708 /* Return function status */
4709 return status;
4710}
4711
4719{
4720 HAL_StatusTypeDef status = HAL_OK;
4721
4722 /* Check the parameters */
4723 assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
4724
4725 /* Abort the DMA transfer (at least disable the DMA stream) */
4726 switch (BurstRequestSrc)
4727 {
4728 case TIM_DMA_UPDATE:
4729 {
4731 break;
4732 }
4733 case TIM_DMA_CC1:
4734 {
4735 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
4736 break;
4737 }
4738 case TIM_DMA_CC2:
4739 {
4740 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
4741 break;
4742 }
4743 case TIM_DMA_CC3:
4744 {
4745 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);
4746 break;
4747 }
4748 case TIM_DMA_CC4:
4749 {
4750 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);
4751 break;
4752 }
4753 case TIM_DMA_COM:
4754 {
4756 break;
4757 }
4758 case TIM_DMA_TRIGGER:
4759 {
4761 break;
4762 }
4763 default:
4764 status = HAL_ERROR;
4765 break;
4766 }
4767
4768 if (status == HAL_OK)
4769 {
4770 /* Disable the TIM Update DMA request */
4771 __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);
4772
4773 /* Change the DMA burst operation state */
4775 }
4776
4777 /* Return function status */
4778 return status;
4779}
4780
4820 uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
4821{
4822 HAL_StatusTypeDef status;
4823
4824 status = HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength,
4825 ((BurstLength) >> 8U) + 1U);
4826
4827
4828 return status;
4829}
4830
4871 uint32_t BurstRequestSrc, uint32_t *BurstBuffer,
4872 uint32_t BurstLength, uint32_t DataLength)
4873{
4874 HAL_StatusTypeDef status = HAL_OK;
4875
4876 /* Check the parameters */
4877 assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
4878 assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));
4879 assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
4880 assert_param(IS_TIM_DMA_LENGTH(BurstLength));
4882
4884 {
4885 return HAL_BUSY;
4886 }
4887 else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY)
4888 {
4889 if ((BurstBuffer == NULL) && (BurstLength > 0U))
4890 {
4891 return HAL_ERROR;
4892 }
4893 else
4894 {
4896 }
4897 }
4898 else
4899 {
4900 /* nothing to do */
4901 }
4902 switch (BurstRequestSrc)
4903 {
4904 case TIM_DMA_UPDATE:
4905 {
4906 /* Set the DMA Period elapsed callbacks */
4909
4910 /* Set the DMA error callback */
4912
4913 /* Enable the DMA stream */
4914 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer,
4915 DataLength) != HAL_OK)
4916 {
4917 /* Return error status */
4918 return HAL_ERROR;
4919 }
4920 break;
4921 }
4922 case TIM_DMA_CC1:
4923 {
4924 /* Set the DMA capture callbacks */
4927
4928 /* Set the DMA error callback */
4930
4931 /* Enable the DMA stream */
4932 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer,
4933 DataLength) != HAL_OK)
4934 {
4935 /* Return error status */
4936 return HAL_ERROR;
4937 }
4938 break;
4939 }
4940 case TIM_DMA_CC2:
4941 {
4942 /* Set the DMA capture callbacks */
4945
4946 /* Set the DMA error callback */
4948
4949 /* Enable the DMA stream */
4950 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer,
4951 DataLength) != HAL_OK)
4952 {
4953 /* Return error status */
4954 return HAL_ERROR;
4955 }
4956 break;
4957 }
4958 case TIM_DMA_CC3:
4959 {
4960 /* Set the DMA capture callbacks */
4963
4964 /* Set the DMA error callback */
4966
4967 /* Enable the DMA stream */
4968 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer,
4969 DataLength) != HAL_OK)
4970 {
4971 /* Return error status */
4972 return HAL_ERROR;
4973 }
4974 break;
4975 }
4976 case TIM_DMA_CC4:
4977 {
4978 /* Set the DMA capture callbacks */
4981
4982 /* Set the DMA error callback */
4984
4985 /* Enable the DMA stream */
4986 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer,
4987 DataLength) != HAL_OK)
4988 {
4989 /* Return error status */
4990 return HAL_ERROR;
4991 }
4992 break;
4993 }
4994 case TIM_DMA_COM:
4995 {
4996 /* Set the DMA commutation callbacks */
4999
5000 /* Set the DMA error callback */
5002
5003 /* Enable the DMA stream */
5004 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer,
5005 DataLength) != HAL_OK)
5006 {
5007 /* Return error status */
5008 return HAL_ERROR;
5009 }
5010 break;
5011 }
5012 case TIM_DMA_TRIGGER:
5013 {
5014 /* Set the DMA trigger callbacks */
5017
5018 /* Set the DMA error callback */
5020
5021 /* Enable the DMA stream */
5022 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer,
5023 DataLength) != HAL_OK)
5024 {
5025 /* Return error status */
5026 return HAL_ERROR;
5027 }
5028 break;
5029 }
5030 default:
5031 status = HAL_ERROR;
5032 break;
5033 }
5034
5035 if (status == HAL_OK)
5036 {
5037 /* Configure the DMA Burst Mode */
5038 htim->Instance->DCR = (BurstBaseAddress | BurstLength);
5039
5040 /* Enable the TIM DMA Request */
5041 __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);
5042 }
5043
5044 /* Return function status */
5045 return status;
5046}
5047
5055{
5056 HAL_StatusTypeDef status = HAL_OK;
5057
5058 /* Check the parameters */
5059 assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
5060
5061 /* Abort the DMA transfer (at least disable the DMA stream) */
5062 switch (BurstRequestSrc)
5063 {
5064 case TIM_DMA_UPDATE:
5065 {
5067 break;
5068 }
5069 case TIM_DMA_CC1:
5070 {
5071 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
5072 break;
5073 }
5074 case TIM_DMA_CC2:
5075 {
5076 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
5077 break;
5078 }
5079 case TIM_DMA_CC3:
5080 {
5081 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);
5082 break;
5083 }
5084 case TIM_DMA_CC4:
5085 {
5086 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);
5087 break;
5088 }
5089 case TIM_DMA_COM:
5090 {
5092 break;
5093 }
5094 case TIM_DMA_TRIGGER:
5095 {
5097 break;
5098 }
5099 default:
5100 status = HAL_ERROR;
5101 break;
5102 }
5103
5104 if (status == HAL_OK)
5105 {
5106 /* Disable the TIM Update DMA request */
5107 __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);
5108
5109 /* Change the DMA burst operation state */
5111 }
5112
5113 /* Return function status */
5114 return status;
5115}
5116
5138{
5139 /* Check the parameters */
5140 assert_param(IS_TIM_INSTANCE(htim->Instance));
5141 assert_param(IS_TIM_EVENT_SOURCE(EventSource));
5142
5143 /* Process Locked */
5144 __HAL_LOCK(htim);
5145
5146 /* Change the TIM state */
5147 htim->State = HAL_TIM_STATE_BUSY;
5148
5149 /* Set the event sources */
5150 htim->Instance->EGR = EventSource;
5151
5152 /* Change the TIM state */
5153 htim->State = HAL_TIM_STATE_READY;
5154
5155 __HAL_UNLOCK(htim);
5156
5157 /* Return function status */
5158 return HAL_OK;
5159}
5160
5175 const TIM_ClearInputConfigTypeDef *sClearInputConfig,
5176 uint32_t Channel)
5177{
5178 HAL_StatusTypeDef status = HAL_OK;
5179
5180 /* Check the parameters */
5181 assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance));
5183
5184 /* Process Locked */
5185 __HAL_LOCK(htim);
5186
5187 htim->State = HAL_TIM_STATE_BUSY;
5188
5189 switch (sClearInputConfig->ClearInputSource)
5190 {
5192 {
5193 /* Clear the OCREF clear selection bit and the the ETR Bits */
5194 CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP));
5195 break;
5196 }
5197
5199 {
5200 /* Check the parameters */
5204
5205 /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
5206 if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
5207 {
5208 htim->State = HAL_TIM_STATE_READY;
5209 __HAL_UNLOCK(htim);
5210 return HAL_ERROR;
5211 }
5212
5214 sClearInputConfig->ClearInputPrescaler,
5215 sClearInputConfig->ClearInputPolarity,
5216 sClearInputConfig->ClearInputFilter);
5217 break;
5218 }
5219
5220 default:
5221 status = HAL_ERROR;
5222 break;
5223 }
5224
5225 if (status == HAL_OK)
5226 {
5227 switch (Channel)
5228 {
5229 case TIM_CHANNEL_1:
5230 {
5231 if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)
5232 {
5233 /* Enable the OCREF clear feature for Channel 1 */
5234 SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);
5235 }
5236 else
5237 {
5238 /* Disable the OCREF clear feature for Channel 1 */
5239 CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);
5240 }
5241 break;
5242 }
5243 case TIM_CHANNEL_2:
5244 {
5245 if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)
5246 {
5247 /* Enable the OCREF clear feature for Channel 2 */
5248 SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);
5249 }
5250 else
5251 {
5252 /* Disable the OCREF clear feature for Channel 2 */
5253 CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);
5254 }
5255 break;
5256 }
5257 case TIM_CHANNEL_3:
5258 {
5259 if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)
5260 {
5261 /* Enable the OCREF clear feature for Channel 3 */
5262 SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);
5263 }
5264 else
5265 {
5266 /* Disable the OCREF clear feature for Channel 3 */
5267 CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);
5268 }
5269 break;
5270 }
5271 case TIM_CHANNEL_4:
5272 {
5273 if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE)
5274 {
5275 /* Enable the OCREF clear feature for Channel 4 */
5276 SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);
5277 }
5278 else
5279 {
5280 /* Disable the OCREF clear feature for Channel 4 */
5281 CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);
5282 }
5283 break;
5284 }
5285 default:
5286 break;
5287 }
5288 }
5289
5290 htim->State = HAL_TIM_STATE_READY;
5291
5292 __HAL_UNLOCK(htim);
5293
5294 return status;
5295}
5296
5305{
5306 HAL_StatusTypeDef status = HAL_OK;
5307 uint32_t tmpsmcr;
5308
5309 /* Process Locked */
5310 __HAL_LOCK(htim);
5311
5312 htim->State = HAL_TIM_STATE_BUSY;
5313
5314 /* Check the parameters */
5315 assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));
5316
5317 /* Reset the SMS, TS, ECE, ETPS and ETRF bits */
5318 tmpsmcr = htim->Instance->SMCR;
5319 tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);
5320 tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
5321 htim->Instance->SMCR = tmpsmcr;
5322
5323 switch (sClockSourceConfig->ClockSource)
5324 {
5326 {
5327 assert_param(IS_TIM_INSTANCE(htim->Instance));
5328 break;
5329 }
5330
5332 {
5333 /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/
5334 assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));
5335
5336 /* Check ETR input conditioning related parameters */
5338 assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
5339 assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
5340
5341 /* Configure the ETR Clock source */
5343 sClockSourceConfig->ClockPrescaler,
5344 sClockSourceConfig->ClockPolarity,
5345 sClockSourceConfig->ClockFilter);
5346
5347 /* Select the External clock mode1 and the ETRF trigger */
5348 tmpsmcr = htim->Instance->SMCR;
5350 /* Write to TIMx SMCR */
5351 htim->Instance->SMCR = tmpsmcr;
5352 break;
5353 }
5354
5356 {
5357 /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/
5358 assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance));
5359
5360 /* Check ETR input conditioning related parameters */
5362 assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
5363 assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
5364
5365 /* Configure the ETR Clock source */
5367 sClockSourceConfig->ClockPrescaler,
5368 sClockSourceConfig->ClockPolarity,
5369 sClockSourceConfig->ClockFilter);
5370 /* Enable the External clock mode2 */
5371 htim->Instance->SMCR |= TIM_SMCR_ECE;
5372 break;
5373 }
5374
5376 {
5377 /* Check whether or not the timer instance supports external clock mode 1 */
5378 assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));
5379
5380 /* Check TI1 input conditioning related parameters */
5381 assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
5382 assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
5383
5385 sClockSourceConfig->ClockPolarity,
5386 sClockSourceConfig->ClockFilter);
5388 break;
5389 }
5390
5392 {
5393 /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/
5394 assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));
5395
5396 /* Check TI2 input conditioning related parameters */
5397 assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
5398 assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
5399
5401 sClockSourceConfig->ClockPolarity,
5402 sClockSourceConfig->ClockFilter);
5404 break;
5405 }
5406
5408 {
5409 /* Check whether or not the timer instance supports external clock mode 1 */
5410 assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));
5411
5412 /* Check TI1 input conditioning related parameters */
5413 assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
5414 assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
5415
5417 sClockSourceConfig->ClockPolarity,
5418 sClockSourceConfig->ClockFilter);
5420 break;
5421 }
5422
5427 {
5428 /* Check whether or not the timer instance supports internal trigger input */
5429 assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));
5430
5431 TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);
5432 break;
5433 }
5434
5435 default:
5436 status = HAL_ERROR;
5437 break;
5438 }
5439 htim->State = HAL_TIM_STATE_READY;
5440
5441 __HAL_UNLOCK(htim);
5442
5443 return status;
5444}
5445
5459{
5460 uint32_t tmpcr2;
5461
5462 /* Check the parameters */
5463 assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));
5464 assert_param(IS_TIM_TI1SELECTION(TI1_Selection));
5465
5466 /* Get the TIMx CR2 register value */
5467 tmpcr2 = htim->Instance->CR2;
5468
5469 /* Reset the TI1 selection */
5470 tmpcr2 &= ~TIM_CR2_TI1S;
5471
5472 /* Set the TI1 selection */
5473 tmpcr2 |= TI1_Selection;
5474
5475 /* Write to TIMxCR2 */
5476 htim->Instance->CR2 = tmpcr2;
5477
5478 return HAL_OK;
5479}
5480
5491{
5492 /* Check the parameters */
5493 assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
5496
5497 __HAL_LOCK(htim);
5498
5499 htim->State = HAL_TIM_STATE_BUSY;
5500
5501 if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
5502 {
5503 htim->State = HAL_TIM_STATE_READY;
5504 __HAL_UNLOCK(htim);
5505 return HAL_ERROR;
5506 }
5507
5508 /* Disable Trigger Interrupt */
5510
5511 /* Disable Trigger DMA request */
5513
5514 htim->State = HAL_TIM_STATE_READY;
5515
5516 __HAL_UNLOCK(htim);
5517
5518 return HAL_OK;
5519}
5520
5531 const TIM_SlaveConfigTypeDef *sSlaveConfig)
5532{
5533 /* Check the parameters */
5534 assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
5537
5538 __HAL_LOCK(htim);
5539
5540 htim->State = HAL_TIM_STATE_BUSY;
5541
5542 if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
5543 {
5544 htim->State = HAL_TIM_STATE_READY;
5545 __HAL_UNLOCK(htim);
5546 return HAL_ERROR;
5547 }
5548
5549 /* Enable Trigger Interrupt */
5551
5552 /* Disable Trigger DMA request */
5554
5555 htim->State = HAL_TIM_STATE_READY;
5556
5557 __HAL_UNLOCK(htim);
5558
5559 return HAL_OK;
5560}
5561
5573uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel)
5574{
5575 uint32_t tmpreg = 0U;
5576
5577 switch (Channel)
5578 {
5579 case TIM_CHANNEL_1:
5580 {
5581 /* Check the parameters */
5582 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
5583
5584 /* Return the capture 1 value */
5585 tmpreg = htim->Instance->CCR1;
5586
5587 break;
5588 }
5589 case TIM_CHANNEL_2:
5590 {
5591 /* Check the parameters */
5592 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
5593
5594 /* Return the capture 2 value */
5595 tmpreg = htim->Instance->CCR2;
5596
5597 break;
5598 }
5599
5600 case TIM_CHANNEL_3:
5601 {
5602 /* Check the parameters */
5603 assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
5604
5605 /* Return the capture 3 value */
5606 tmpreg = htim->Instance->CCR3;
5607
5608 break;
5609 }
5610
5611 case TIM_CHANNEL_4:
5612 {
5613 /* Check the parameters */
5614 assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
5615
5616 /* Return the capture 4 value */
5617 tmpreg = htim->Instance->CCR4;
5618
5619 break;
5620 }
5621
5622 default:
5623 break;
5624 }
5625
5626 return tmpreg;
5627}
5628
5658{
5659 /* Prevent unused argument(s) compilation warning */
5660 UNUSED(htim);
5661
5662 /* NOTE : This function should not be modified, when the callback is needed,
5663 the HAL_TIM_PeriodElapsedCallback could be implemented in the user file
5664 */
5665}
5666
5673{
5674 /* Prevent unused argument(s) compilation warning */
5675 UNUSED(htim);
5676
5677 /* NOTE : This function should not be modified, when the callback is needed,
5678 the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file
5679 */
5680}
5681
5688{
5689 /* Prevent unused argument(s) compilation warning */
5690 UNUSED(htim);
5691
5692 /* NOTE : This function should not be modified, when the callback is needed,
5693 the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file
5694 */
5695}
5696
5703{
5704 /* Prevent unused argument(s) compilation warning */
5705 UNUSED(htim);
5706
5707 /* NOTE : This function should not be modified, when the callback is needed,
5708 the HAL_TIM_IC_CaptureCallback could be implemented in the user file
5709 */
5710}
5711
5718{
5719 /* Prevent unused argument(s) compilation warning */
5720 UNUSED(htim);
5721
5722 /* NOTE : This function should not be modified, when the callback is needed,
5723 the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file
5724 */
5725}
5726
5733{
5734 /* Prevent unused argument(s) compilation warning */
5735 UNUSED(htim);
5736
5737 /* NOTE : This function should not be modified, when the callback is needed,
5738 the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file
5739 */
5740}
5741
5748{
5749 /* Prevent unused argument(s) compilation warning */
5750 UNUSED(htim);
5751
5752 /* NOTE : This function should not be modified, when the callback is needed,
5753 the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file
5754 */
5755}
5756
5763{
5764 /* Prevent unused argument(s) compilation warning */
5765 UNUSED(htim);
5766
5767 /* NOTE : This function should not be modified, when the callback is needed,
5768 the HAL_TIM_TriggerCallback could be implemented in the user file
5769 */
5770}
5771
5778{
5779 /* Prevent unused argument(s) compilation warning */
5780 UNUSED(htim);
5781
5782 /* NOTE : This function should not be modified, when the callback is needed,
5783 the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file
5784 */
5785}
5786
5793{
5794 /* Prevent unused argument(s) compilation warning */
5795 UNUSED(htim);
5796
5797 /* NOTE : This function should not be modified, when the callback is needed,
5798 the HAL_TIM_ErrorCallback could be implemented in the user file
5799 */
5800}
5801
5802#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
5838HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
5839 pTIM_CallbackTypeDef pCallback)
5840{
5841 HAL_StatusTypeDef status = HAL_OK;
5842
5843 if (pCallback == NULL)
5844 {
5845 return HAL_ERROR;
5846 }
5847
5848 if (htim->State == HAL_TIM_STATE_READY)
5849 {
5850 switch (CallbackID)
5851 {
5852 case HAL_TIM_BASE_MSPINIT_CB_ID :
5853 htim->Base_MspInitCallback = pCallback;
5854 break;
5855
5856 case HAL_TIM_BASE_MSPDEINIT_CB_ID :
5857 htim->Base_MspDeInitCallback = pCallback;
5858 break;
5859
5860 case HAL_TIM_IC_MSPINIT_CB_ID :
5861 htim->IC_MspInitCallback = pCallback;
5862 break;
5863
5864 case HAL_TIM_IC_MSPDEINIT_CB_ID :
5865 htim->IC_MspDeInitCallback = pCallback;
5866 break;
5867
5868 case HAL_TIM_OC_MSPINIT_CB_ID :
5869 htim->OC_MspInitCallback = pCallback;
5870 break;
5871
5872 case HAL_TIM_OC_MSPDEINIT_CB_ID :
5873 htim->OC_MspDeInitCallback = pCallback;
5874 break;
5875
5876 case HAL_TIM_PWM_MSPINIT_CB_ID :
5877 htim->PWM_MspInitCallback = pCallback;
5878 break;
5879
5880 case HAL_TIM_PWM_MSPDEINIT_CB_ID :
5881 htim->PWM_MspDeInitCallback = pCallback;
5882 break;
5883
5884 case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :
5885 htim->OnePulse_MspInitCallback = pCallback;
5886 break;
5887
5888 case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :
5889 htim->OnePulse_MspDeInitCallback = pCallback;
5890 break;
5891
5892 case HAL_TIM_ENCODER_MSPINIT_CB_ID :
5893 htim->Encoder_MspInitCallback = pCallback;
5894 break;
5895
5896 case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :
5897 htim->Encoder_MspDeInitCallback = pCallback;
5898 break;
5899
5900 case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID :
5901 htim->HallSensor_MspInitCallback = pCallback;
5902 break;
5903
5904 case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID :
5905 htim->HallSensor_MspDeInitCallback = pCallback;
5906 break;
5907
5908 case HAL_TIM_PERIOD_ELAPSED_CB_ID :
5909 htim->PeriodElapsedCallback = pCallback;
5910 break;
5911
5912 case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID :
5913 htim->PeriodElapsedHalfCpltCallback = pCallback;
5914 break;
5915
5916 case HAL_TIM_TRIGGER_CB_ID :
5917 htim->TriggerCallback = pCallback;
5918 break;
5919
5920 case HAL_TIM_TRIGGER_HALF_CB_ID :
5921 htim->TriggerHalfCpltCallback = pCallback;
5922 break;
5923
5924 case HAL_TIM_IC_CAPTURE_CB_ID :
5925 htim->IC_CaptureCallback = pCallback;
5926 break;
5927
5928 case HAL_TIM_IC_CAPTURE_HALF_CB_ID :
5929 htim->IC_CaptureHalfCpltCallback = pCallback;
5930 break;
5931
5932 case HAL_TIM_OC_DELAY_ELAPSED_CB_ID :
5933 htim->OC_DelayElapsedCallback = pCallback;
5934 break;
5935
5936 case HAL_TIM_PWM_PULSE_FINISHED_CB_ID :
5937 htim->PWM_PulseFinishedCallback = pCallback;
5938 break;
5939
5940 case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID :
5941 htim->PWM_PulseFinishedHalfCpltCallback = pCallback;
5942 break;
5943
5944 case HAL_TIM_ERROR_CB_ID :
5945 htim->ErrorCallback = pCallback;
5946 break;
5947
5948 case HAL_TIM_COMMUTATION_CB_ID :
5949 htim->CommutationCallback = pCallback;
5950 break;
5951
5952 case HAL_TIM_COMMUTATION_HALF_CB_ID :
5953 htim->CommutationHalfCpltCallback = pCallback;
5954 break;
5955
5956 case HAL_TIM_BREAK_CB_ID :
5957 htim->BreakCallback = pCallback;
5958 break;
5959
5960 default :
5961 /* Return error status */
5962 status = HAL_ERROR;
5963 break;
5964 }
5965 }
5966 else if (htim->State == HAL_TIM_STATE_RESET)
5967 {
5968 switch (CallbackID)
5969 {
5970 case HAL_TIM_BASE_MSPINIT_CB_ID :
5971 htim->Base_MspInitCallback = pCallback;
5972 break;
5973
5974 case HAL_TIM_BASE_MSPDEINIT_CB_ID :
5975 htim->Base_MspDeInitCallback = pCallback;
5976 break;
5977
5978 case HAL_TIM_IC_MSPINIT_CB_ID :
5979 htim->IC_MspInitCallback = pCallback;
5980 break;
5981
5982 case HAL_TIM_IC_MSPDEINIT_CB_ID :
5983 htim->IC_MspDeInitCallback = pCallback;
5984 break;
5985
5986 case HAL_TIM_OC_MSPINIT_CB_ID :
5987 htim->OC_MspInitCallback = pCallback;
5988 break;
5989
5990 case HAL_TIM_OC_MSPDEINIT_CB_ID :
5991 htim->OC_MspDeInitCallback = pCallback;
5992 break;
5993
5994 case HAL_TIM_PWM_MSPINIT_CB_ID :
5995 htim->PWM_MspInitCallback = pCallback;
5996 break;
5997
5998 case HAL_TIM_PWM_MSPDEINIT_CB_ID :
5999 htim->PWM_MspDeInitCallback = pCallback;
6000 break;
6001
6002 case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :
6003 htim->OnePulse_MspInitCallback = pCallback;
6004 break;
6005
6006 case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :
6007 htim->OnePulse_MspDeInitCallback = pCallback;
6008 break;
6009
6010 case HAL_TIM_ENCODER_MSPINIT_CB_ID :
6011 htim->Encoder_MspInitCallback = pCallback;
6012 break;
6013
6014 case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :
6015 htim->Encoder_MspDeInitCallback = pCallback;
6016 break;
6017
6018 case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID :
6019 htim->HallSensor_MspInitCallback = pCallback;
6020 break;
6021
6022 case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID :
6023 htim->HallSensor_MspDeInitCallback = pCallback;
6024 break;
6025
6026 default :
6027 /* Return error status */
6028 status = HAL_ERROR;
6029 break;
6030 }
6031 }
6032 else
6033 {
6034 /* Return error status */
6035 status = HAL_ERROR;
6036 }
6037
6038 return status;
6039}
6040
6076HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID)
6077{
6078 HAL_StatusTypeDef status = HAL_OK;
6079
6080 if (htim->State == HAL_TIM_STATE_READY)
6081 {
6082 switch (CallbackID)
6083 {
6084 case HAL_TIM_BASE_MSPINIT_CB_ID :
6085 /* Legacy weak Base MspInit Callback */
6086 htim->Base_MspInitCallback = HAL_TIM_Base_MspInit;
6087 break;
6088
6089 case HAL_TIM_BASE_MSPDEINIT_CB_ID :
6090 /* Legacy weak Base Msp DeInit Callback */
6091 htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit;
6092 break;
6093
6094 case HAL_TIM_IC_MSPINIT_CB_ID :
6095 /* Legacy weak IC Msp Init Callback */
6096 htim->IC_MspInitCallback = HAL_TIM_IC_MspInit;
6097 break;
6098
6099 case HAL_TIM_IC_MSPDEINIT_CB_ID :
6100 /* Legacy weak IC Msp DeInit Callback */
6101 htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit;
6102 break;
6103
6104 case HAL_TIM_OC_MSPINIT_CB_ID :
6105 /* Legacy weak OC Msp Init Callback */
6106 htim->OC_MspInitCallback = HAL_TIM_OC_MspInit;
6107 break;
6108
6109 case HAL_TIM_OC_MSPDEINIT_CB_ID :
6110 /* Legacy weak OC Msp DeInit Callback */
6111 htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit;
6112 break;
6113
6114 case HAL_TIM_PWM_MSPINIT_CB_ID :
6115 /* Legacy weak PWM Msp Init Callback */
6116 htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit;
6117 break;
6118
6119 case HAL_TIM_PWM_MSPDEINIT_CB_ID :
6120 /* Legacy weak PWM Msp DeInit Callback */
6121 htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit;
6122 break;
6123
6124 case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :
6125 /* Legacy weak One Pulse Msp Init Callback */
6126 htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit;
6127 break;
6128
6129 case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :
6130 /* Legacy weak One Pulse Msp DeInit Callback */
6131 htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit;
6132 break;
6133
6134 case HAL_TIM_ENCODER_MSPINIT_CB_ID :
6135 /* Legacy weak Encoder Msp Init Callback */
6136 htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit;
6137 break;
6138
6139 case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :
6140 /* Legacy weak Encoder Msp DeInit Callback */
6141 htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit;
6142 break;
6143
6144 case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID :
6145 /* Legacy weak Hall Sensor Msp Init Callback */
6146 htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit;
6147 break;
6148
6149 case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID :
6150 /* Legacy weak Hall Sensor Msp DeInit Callback */
6151 htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit;
6152 break;
6153
6154 case HAL_TIM_PERIOD_ELAPSED_CB_ID :
6155 /* Legacy weak Period Elapsed Callback */
6156 htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback;
6157 break;
6158
6159 case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID :
6160 /* Legacy weak Period Elapsed half complete Callback */
6161 htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback;
6162 break;
6163
6164 case HAL_TIM_TRIGGER_CB_ID :
6165 /* Legacy weak Trigger Callback */
6166 htim->TriggerCallback = HAL_TIM_TriggerCallback;
6167 break;
6168
6169 case HAL_TIM_TRIGGER_HALF_CB_ID :
6170 /* Legacy weak Trigger half complete Callback */
6171 htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback;
6172 break;
6173
6174 case HAL_TIM_IC_CAPTURE_CB_ID :
6175 /* Legacy weak IC Capture Callback */
6176 htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback;
6177 break;
6178
6179 case HAL_TIM_IC_CAPTURE_HALF_CB_ID :
6180 /* Legacy weak IC Capture half complete Callback */
6181 htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback;
6182 break;
6183
6184 case HAL_TIM_OC_DELAY_ELAPSED_CB_ID :
6185 /* Legacy weak OC Delay Elapsed Callback */
6186 htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback;
6187 break;
6188
6189 case HAL_TIM_PWM_PULSE_FINISHED_CB_ID :
6190 /* Legacy weak PWM Pulse Finished Callback */
6191 htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback;
6192 break;
6193
6194 case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID :
6195 /* Legacy weak PWM Pulse Finished half complete Callback */
6196 htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback;
6197 break;
6198
6199 case HAL_TIM_ERROR_CB_ID :
6200 /* Legacy weak Error Callback */
6201 htim->ErrorCallback = HAL_TIM_ErrorCallback;
6202 break;
6203
6204 case HAL_TIM_COMMUTATION_CB_ID :
6205 /* Legacy weak Commutation Callback */
6206 htim->CommutationCallback = HAL_TIMEx_CommutCallback;
6207 break;
6208
6209 case HAL_TIM_COMMUTATION_HALF_CB_ID :
6210 /* Legacy weak Commutation half complete Callback */
6211 htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback;
6212 break;
6213
6214 case HAL_TIM_BREAK_CB_ID :
6215 /* Legacy weak Break Callback */
6216 htim->BreakCallback = HAL_TIMEx_BreakCallback;
6217 break;
6218
6219 default :
6220 /* Return error status */
6221 status = HAL_ERROR;
6222 break;
6223 }
6224 }
6225 else if (htim->State == HAL_TIM_STATE_RESET)
6226 {
6227 switch (CallbackID)
6228 {
6229 case HAL_TIM_BASE_MSPINIT_CB_ID :
6230 /* Legacy weak Base MspInit Callback */
6231 htim->Base_MspInitCallback = HAL_TIM_Base_MspInit;
6232 break;
6233
6234 case HAL_TIM_BASE_MSPDEINIT_CB_ID :
6235 /* Legacy weak Base Msp DeInit Callback */
6236 htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit;
6237 break;
6238
6239 case HAL_TIM_IC_MSPINIT_CB_ID :
6240 /* Legacy weak IC Msp Init Callback */
6241 htim->IC_MspInitCallback = HAL_TIM_IC_MspInit;
6242 break;
6243
6244 case HAL_TIM_IC_MSPDEINIT_CB_ID :
6245 /* Legacy weak IC Msp DeInit Callback */
6246 htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit;
6247 break;
6248
6249 case HAL_TIM_OC_MSPINIT_CB_ID :
6250 /* Legacy weak OC Msp Init Callback */
6251 htim->OC_MspInitCallback = HAL_TIM_OC_MspInit;
6252 break;
6253
6254 case HAL_TIM_OC_MSPDEINIT_CB_ID :
6255 /* Legacy weak OC Msp DeInit Callback */
6256 htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit;
6257 break;
6258
6259 case HAL_TIM_PWM_MSPINIT_CB_ID :
6260 /* Legacy weak PWM Msp Init Callback */
6261 htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit;
6262 break;
6263
6264 case HAL_TIM_PWM_MSPDEINIT_CB_ID :
6265 /* Legacy weak PWM Msp DeInit Callback */
6266 htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit;
6267 break;
6268
6269 case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID :
6270 /* Legacy weak One Pulse Msp Init Callback */
6271 htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit;
6272 break;
6273
6274 case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID :
6275 /* Legacy weak One Pulse Msp DeInit Callback */
6276 htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit;
6277 break;
6278
6279 case HAL_TIM_ENCODER_MSPINIT_CB_ID :
6280 /* Legacy weak Encoder Msp Init Callback */
6281 htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit;
6282 break;
6283
6284 case HAL_TIM_ENCODER_MSPDEINIT_CB_ID :
6285 /* Legacy weak Encoder Msp DeInit Callback */
6286 htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit;
6287 break;
6288
6289 case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID :
6290 /* Legacy weak Hall Sensor Msp Init Callback */
6291 htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit;
6292 break;
6293
6294 case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID :
6295 /* Legacy weak Hall Sensor Msp DeInit Callback */
6296 htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit;
6297 break;
6298
6299 default :
6300 /* Return error status */
6301 status = HAL_ERROR;
6302 break;
6303 }
6304 }
6305 else
6306 {
6307 /* Return error status */
6308 status = HAL_ERROR;
6309 }
6310
6311 return status;
6312}
6313#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6314
6340{
6341 return htim->State;
6342}
6343
6350{
6351 return htim->State;
6352}
6353
6360{
6361 return htim->State;
6362}
6363
6370{
6371 return htim->State;
6372}
6373
6380{
6381 return htim->State;
6382}
6383
6390{
6391 return htim->State;
6392}
6393
6403
6418{
6419 HAL_TIM_ChannelStateTypeDef channel_state;
6420
6421 /* Check the parameters */
6422 assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
6423
6424 channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
6425
6426 return channel_state;
6427}
6428
6435{
6436 /* Check the parameters */
6437 assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
6438
6439 return htim->DMABurstState;
6440}
6441
6460{
6461 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6462
6463 if (hdma == htim->hdma[TIM_DMA_ID_CC1])
6464 {
6467 }
6468 else if (hdma == htim->hdma[TIM_DMA_ID_CC2])
6469 {
6472 }
6473 else if (hdma == htim->hdma[TIM_DMA_ID_CC3])
6474 {
6477 }
6478 else if (hdma == htim->hdma[TIM_DMA_ID_CC4])
6479 {
6482 }
6483 else
6484 {
6485 htim->State = HAL_TIM_STATE_READY;
6486 }
6487
6488#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6489 htim->ErrorCallback(htim);
6490#else
6492#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6493
6495}
6496
6503{
6504 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6505
6506 if (hdma == htim->hdma[TIM_DMA_ID_CC1])
6507 {
6509
6510 if (hdma->Init.Mode == DMA_NORMAL)
6511 {
6513 }
6514 }
6515 else if (hdma == htim->hdma[TIM_DMA_ID_CC2])
6516 {
6518
6519 if (hdma->Init.Mode == DMA_NORMAL)
6520 {
6522 }
6523 }
6524 else if (hdma == htim->hdma[TIM_DMA_ID_CC3])
6525 {
6527
6528 if (hdma->Init.Mode == DMA_NORMAL)
6529 {
6531 }
6532 }
6533 else if (hdma == htim->hdma[TIM_DMA_ID_CC4])
6534 {
6536
6537 if (hdma->Init.Mode == DMA_NORMAL)
6538 {
6540 }
6541 }
6542 else
6543 {
6544 /* nothing to do */
6545 }
6546
6547#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6548 htim->PWM_PulseFinishedCallback(htim);
6549#else
6551#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6552
6554}
6555
6562{
6563 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6564
6565 if (hdma == htim->hdma[TIM_DMA_ID_CC1])
6566 {
6568 }
6569 else if (hdma == htim->hdma[TIM_DMA_ID_CC2])
6570 {
6572 }
6573 else if (hdma == htim->hdma[TIM_DMA_ID_CC3])
6574 {
6576 }
6577 else if (hdma == htim->hdma[TIM_DMA_ID_CC4])
6578 {
6580 }
6581 else
6582 {
6583 /* nothing to do */
6584 }
6585
6586#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6587 htim->PWM_PulseFinishedHalfCpltCallback(htim);
6588#else
6590#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6591
6593}
6594
6601{
6602 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6603
6604 if (hdma == htim->hdma[TIM_DMA_ID_CC1])
6605 {
6607
6608 if (hdma->Init.Mode == DMA_NORMAL)
6609 {
6612 }
6613 }
6614 else if (hdma == htim->hdma[TIM_DMA_ID_CC2])
6615 {
6617
6618 if (hdma->Init.Mode == DMA_NORMAL)
6619 {
6622 }
6623 }
6624 else if (hdma == htim->hdma[TIM_DMA_ID_CC3])
6625 {
6627
6628 if (hdma->Init.Mode == DMA_NORMAL)
6629 {
6632 }
6633 }
6634 else if (hdma == htim->hdma[TIM_DMA_ID_CC4])
6635 {
6637
6638 if (hdma->Init.Mode == DMA_NORMAL)
6639 {
6642 }
6643 }
6644 else
6645 {
6646 /* nothing to do */
6647 }
6648
6649#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6650 htim->IC_CaptureCallback(htim);
6651#else
6653#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6654
6656}
6657
6664{
6665 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6666
6667 if (hdma == htim->hdma[TIM_DMA_ID_CC1])
6668 {
6670 }
6671 else if (hdma == htim->hdma[TIM_DMA_ID_CC2])
6672 {
6674 }
6675 else if (hdma == htim->hdma[TIM_DMA_ID_CC3])
6676 {
6678 }
6679 else if (hdma == htim->hdma[TIM_DMA_ID_CC4])
6680 {
6682 }
6683 else
6684 {
6685 /* nothing to do */
6686 }
6687
6688#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6689 htim->IC_CaptureHalfCpltCallback(htim);
6690#else
6692#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6693
6695}
6696
6703{
6704 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6705
6706 if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL)
6707 {
6708 htim->State = HAL_TIM_STATE_READY;
6709 }
6710
6711#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6712 htim->PeriodElapsedCallback(htim);
6713#else
6715#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6716}
6717
6724{
6725 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6726
6727#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6728 htim->PeriodElapsedHalfCpltCallback(htim);
6729#else
6731#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6732}
6733
6740{
6741 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6742
6744 {
6745 htim->State = HAL_TIM_STATE_READY;
6746 }
6747
6748#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6749 htim->TriggerCallback(htim);
6750#else
6752#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6753}
6754
6761{
6762 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
6763
6764#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
6765 htim->TriggerHalfCpltCallback(htim);
6766#else
6768#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
6769}
6770
6777void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure)
6778{
6779 uint32_t tmpcr1;
6780 tmpcr1 = TIMx->CR1;
6781
6782 /* Set TIM Time Base Unit parameters ---------------------------------------*/
6783 if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))
6784 {
6785 /* Select the Counter Mode */
6786 tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
6787 tmpcr1 |= Structure->CounterMode;
6788 }
6789
6790 if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))
6791 {
6792 /* Set the clock division */
6793 tmpcr1 &= ~TIM_CR1_CKD;
6794 tmpcr1 |= (uint32_t)Structure->ClockDivision;
6795 }
6796
6797 /* Set the auto-reload preload */
6798 MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
6799
6800 TIMx->CR1 = tmpcr1;
6801
6802 /* Set the Autoreload value */
6803 TIMx->ARR = (uint32_t)Structure->Period ;
6804
6805 /* Set the Prescaler value */
6806 TIMx->PSC = Structure->Prescaler;
6807
6808 if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))
6809 {
6810 /* Set the Repetition Counter value */
6811 TIMx->RCR = Structure->RepetitionCounter;
6812 }
6813
6814 /* Generate an update event to reload the Prescaler
6815 and the repetition counter (only for advanced timer) value immediately */
6816 TIMx->EGR = TIM_EGR_UG;
6817
6818 /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */
6819 if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE))
6820 {
6821 /* Clear the update flag */
6822 CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE);
6823 }
6824}
6825
6832static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
6833{
6834 uint32_t tmpccmrx;
6835 uint32_t tmpccer;
6836 uint32_t tmpcr2;
6837
6838 /* Get the TIMx CCER register value */
6839 tmpccer = TIMx->CCER;
6840
6841 /* Disable the Channel 1: Reset the CC1E Bit */
6842 TIMx->CCER &= ~TIM_CCER_CC1E;
6843
6844 /* Get the TIMx CR2 register value */
6845 tmpcr2 = TIMx->CR2;
6846
6847 /* Get the TIMx CCMR1 register value */
6848 tmpccmrx = TIMx->CCMR1;
6849
6850 /* Reset the Output Compare Mode Bits */
6851 tmpccmrx &= ~TIM_CCMR1_OC1M;
6852 tmpccmrx &= ~TIM_CCMR1_CC1S;
6853 /* Select the Output Compare Mode */
6854 tmpccmrx |= OC_Config->OCMode;
6855
6856 /* Reset the Output Polarity level */
6857 tmpccer &= ~TIM_CCER_CC1P;
6858 /* Set the Output Compare Polarity */
6859 tmpccer |= OC_Config->OCPolarity;
6860
6861 if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1))
6862 {
6863 /* Check parameters */
6865
6866 /* Reset the Output N Polarity level */
6867 tmpccer &= ~TIM_CCER_CC1NP;
6868 /* Set the Output N Polarity */
6869 tmpccer |= OC_Config->OCNPolarity;
6870 /* Reset the Output N State */
6871 tmpccer &= ~TIM_CCER_CC1NE;
6872 }
6873
6874 if (IS_TIM_BREAK_INSTANCE(TIMx))
6875 {
6876 /* Check parameters */
6879
6880 /* Reset the Output Compare and Output Compare N IDLE State */
6881 tmpcr2 &= ~TIM_CR2_OIS1;
6882 tmpcr2 &= ~TIM_CR2_OIS1N;
6883 /* Set the Output Idle state */
6884 tmpcr2 |= OC_Config->OCIdleState;
6885 /* Set the Output N Idle state */
6886 tmpcr2 |= OC_Config->OCNIdleState;
6887 }
6888
6889 /* Write to TIMx CR2 */
6890 TIMx->CR2 = tmpcr2;
6891
6892 /* Write to TIMx CCMR1 */
6893 TIMx->CCMR1 = tmpccmrx;
6894
6895 /* Set the Capture Compare Register value */
6896 TIMx->CCR1 = OC_Config->Pulse;
6897
6898 /* Write to TIMx CCER */
6899 TIMx->CCER = tmpccer;
6900}
6901
6908void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
6909{
6910 uint32_t tmpccmrx;
6911 uint32_t tmpccer;
6912 uint32_t tmpcr2;
6913
6914 /* Get the TIMx CCER register value */
6915 tmpccer = TIMx->CCER;
6916
6917 /* Disable the Channel 2: Reset the CC2E Bit */
6918 TIMx->CCER &= ~TIM_CCER_CC2E;
6919
6920 /* Get the TIMx CR2 register value */
6921 tmpcr2 = TIMx->CR2;
6922
6923 /* Get the TIMx CCMR1 register value */
6924 tmpccmrx = TIMx->CCMR1;
6925
6926 /* Reset the Output Compare mode and Capture/Compare selection Bits */
6927 tmpccmrx &= ~TIM_CCMR1_OC2M;
6928 tmpccmrx &= ~TIM_CCMR1_CC2S;
6929
6930 /* Select the Output Compare Mode */
6931 tmpccmrx |= (OC_Config->OCMode << 8U);
6932
6933 /* Reset the Output Polarity level */
6934 tmpccer &= ~TIM_CCER_CC2P;
6935 /* Set the Output Compare Polarity */
6936 tmpccer |= (OC_Config->OCPolarity << 4U);
6937
6938 if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2))
6939 {
6941
6942 /* Reset the Output N Polarity level */
6943 tmpccer &= ~TIM_CCER_CC2NP;
6944 /* Set the Output N Polarity */
6945 tmpccer |= (OC_Config->OCNPolarity << 4U);
6946 /* Reset the Output N State */
6947 tmpccer &= ~TIM_CCER_CC2NE;
6948 }
6949
6950 if (IS_TIM_BREAK_INSTANCE(TIMx))
6951 {
6952 /* Check parameters */
6955
6956 /* Reset the Output Compare and Output Compare N IDLE State */
6957 tmpcr2 &= ~TIM_CR2_OIS2;
6958 tmpcr2 &= ~TIM_CR2_OIS2N;
6959 /* Set the Output Idle state */
6960 tmpcr2 |= (OC_Config->OCIdleState << 2U);
6961 /* Set the Output N Idle state */
6962 tmpcr2 |= (OC_Config->OCNIdleState << 2U);
6963 }
6964
6965 /* Write to TIMx CR2 */
6966 TIMx->CR2 = tmpcr2;
6967
6968 /* Write to TIMx CCMR1 */
6969 TIMx->CCMR1 = tmpccmrx;
6970
6971 /* Set the Capture Compare Register value */
6972 TIMx->CCR2 = OC_Config->Pulse;
6973
6974 /* Write to TIMx CCER */
6975 TIMx->CCER = tmpccer;
6976}
6977
6984static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
6985{
6986 uint32_t tmpccmrx;
6987 uint32_t tmpccer;
6988 uint32_t tmpcr2;
6989
6990 /* Get the TIMx CCER register value */
6991 tmpccer = TIMx->CCER;
6992
6993 /* Disable the Channel 3: Reset the CC2E Bit */
6994 TIMx->CCER &= ~TIM_CCER_CC3E;
6995
6996 /* Get the TIMx CR2 register value */
6997 tmpcr2 = TIMx->CR2;
6998
6999 /* Get the TIMx CCMR2 register value */
7000 tmpccmrx = TIMx->CCMR2;
7001
7002 /* Reset the Output Compare mode and Capture/Compare selection Bits */
7003 tmpccmrx &= ~TIM_CCMR2_OC3M;
7004 tmpccmrx &= ~TIM_CCMR2_CC3S;
7005 /* Select the Output Compare Mode */
7006 tmpccmrx |= OC_Config->OCMode;
7007
7008 /* Reset the Output Polarity level */
7009 tmpccer &= ~TIM_CCER_CC3P;
7010 /* Set the Output Compare Polarity */
7011 tmpccer |= (OC_Config->OCPolarity << 8U);
7012
7013 if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3))
7014 {
7016
7017 /* Reset the Output N Polarity level */
7018 tmpccer &= ~TIM_CCER_CC3NP;
7019 /* Set the Output N Polarity */
7020 tmpccer |= (OC_Config->OCNPolarity << 8U);
7021 /* Reset the Output N State */
7022 tmpccer &= ~TIM_CCER_CC3NE;
7023 }
7024
7025 if (IS_TIM_BREAK_INSTANCE(TIMx))
7026 {
7027 /* Check parameters */
7030
7031 /* Reset the Output Compare and Output Compare N IDLE State */
7032 tmpcr2 &= ~TIM_CR2_OIS3;
7033 tmpcr2 &= ~TIM_CR2_OIS3N;
7034 /* Set the Output Idle state */
7035 tmpcr2 |= (OC_Config->OCIdleState << 4U);
7036 /* Set the Output N Idle state */
7037 tmpcr2 |= (OC_Config->OCNIdleState << 4U);
7038 }
7039
7040 /* Write to TIMx CR2 */
7041 TIMx->CR2 = tmpcr2;
7042
7043 /* Write to TIMx CCMR2 */
7044 TIMx->CCMR2 = tmpccmrx;
7045
7046 /* Set the Capture Compare Register value */
7047 TIMx->CCR3 = OC_Config->Pulse;
7048
7049 /* Write to TIMx CCER */
7050 TIMx->CCER = tmpccer;
7051}
7052
7059static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
7060{
7061 uint32_t tmpccmrx;
7062 uint32_t tmpccer;
7063 uint32_t tmpcr2;
7064
7065 /* Get the TIMx CCER register value */
7066 tmpccer = TIMx->CCER;
7067
7068 /* Disable the Channel 4: Reset the CC4E Bit */
7069 TIMx->CCER &= ~TIM_CCER_CC4E;
7070
7071 /* Get the TIMx CR2 register value */
7072 tmpcr2 = TIMx->CR2;
7073
7074 /* Get the TIMx CCMR2 register value */
7075 tmpccmrx = TIMx->CCMR2;
7076
7077 /* Reset the Output Compare mode and Capture/Compare selection Bits */
7078 tmpccmrx &= ~TIM_CCMR2_OC4M;
7079 tmpccmrx &= ~TIM_CCMR2_CC4S;
7080
7081 /* Select the Output Compare Mode */
7082 tmpccmrx |= (OC_Config->OCMode << 8U);
7083
7084 /* Reset the Output Polarity level */
7085 tmpccer &= ~TIM_CCER_CC4P;
7086 /* Set the Output Compare Polarity */
7087 tmpccer |= (OC_Config->OCPolarity << 12U);
7088
7089 if (IS_TIM_BREAK_INSTANCE(TIMx))
7090 {
7091 /* Check parameters */
7093
7094 /* Reset the Output Compare IDLE State */
7095 tmpcr2 &= ~TIM_CR2_OIS4;
7096
7097 /* Set the Output Idle state */
7098 tmpcr2 |= (OC_Config->OCIdleState << 6U);
7099 }
7100
7101 /* Write to TIMx CR2 */
7102 TIMx->CR2 = tmpcr2;
7103
7104 /* Write to TIMx CCMR2 */
7105 TIMx->CCMR2 = tmpccmrx;
7106
7107 /* Set the Capture Compare Register value */
7108 TIMx->CCR4 = OC_Config->Pulse;
7109
7110 /* Write to TIMx CCER */
7111 TIMx->CCER = tmpccer;
7112}
7113
7121 const TIM_SlaveConfigTypeDef *sSlaveConfig)
7122{
7123 HAL_StatusTypeDef status = HAL_OK;
7124 uint32_t tmpsmcr;
7125 uint32_t tmpccmr1;
7126 uint32_t tmpccer;
7127
7128 /* Get the TIMx SMCR register value */
7129 tmpsmcr = htim->Instance->SMCR;
7130
7131 /* Reset the Trigger Selection Bits */
7132 tmpsmcr &= ~TIM_SMCR_TS;
7133 /* Set the Input Trigger source */
7134 tmpsmcr |= sSlaveConfig->InputTrigger;
7135
7136 /* Reset the slave mode Bits */
7137 tmpsmcr &= ~TIM_SMCR_SMS;
7138 /* Set the slave mode */
7139 tmpsmcr |= sSlaveConfig->SlaveMode;
7140
7141 /* Write to TIMx SMCR */
7142 htim->Instance->SMCR = tmpsmcr;
7143
7144 /* Configure the trigger prescaler, filter, and polarity */
7145 switch (sSlaveConfig->InputTrigger)
7146 {
7147 case TIM_TS_ETRF:
7148 {
7149 /* Check the parameters */
7150 assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));
7154 /* Configure the ETR Trigger source */
7156 sSlaveConfig->TriggerPrescaler,
7157 sSlaveConfig->TriggerPolarity,
7158 sSlaveConfig->TriggerFilter);
7159 break;
7160 }
7161
7162 case TIM_TS_TI1F_ED:
7163 {
7164 /* Check the parameters */
7165 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
7167
7168 if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED)
7169 {
7170 return HAL_ERROR;
7171 }
7172
7173 /* Disable the Channel 1: Reset the CC1E Bit */
7174 tmpccer = htim->Instance->CCER;
7175 htim->Instance->CCER &= ~TIM_CCER_CC1E;
7176 tmpccmr1 = htim->Instance->CCMR1;
7177
7178 /* Set the filter */
7179 tmpccmr1 &= ~TIM_CCMR1_IC1F;
7180 tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U);
7181
7182 /* Write to TIMx CCMR1 and CCER registers */
7183 htim->Instance->CCMR1 = tmpccmr1;
7184 htim->Instance->CCER = tmpccer;
7185 break;
7186 }
7187
7188 case TIM_TS_TI1FP1:
7189 {
7190 /* Check the parameters */
7191 assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
7194
7195 /* Configure TI1 Filter and Polarity */
7197 sSlaveConfig->TriggerPolarity,
7198 sSlaveConfig->TriggerFilter);
7199 break;
7200 }
7201
7202 case TIM_TS_TI2FP2:
7203 {
7204 /* Check the parameters */
7205 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
7208
7209 /* Configure TI2 Filter and Polarity */
7211 sSlaveConfig->TriggerPolarity,
7212 sSlaveConfig->TriggerFilter);
7213 break;
7214 }
7215
7216 case TIM_TS_ITR0:
7217 case TIM_TS_ITR1:
7218 case TIM_TS_ITR2:
7219 case TIM_TS_ITR3:
7220 {
7221 /* Check the parameter */
7222 assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
7223 break;
7224 }
7225
7226 default:
7227 status = HAL_ERROR;
7228 break;
7229 }
7230
7231 return status;
7232}
7233
7254void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
7255 uint32_t TIM_ICFilter)
7256{
7257 uint32_t tmpccmr1;
7258 uint32_t tmpccer;
7259
7260 /* Disable the Channel 1: Reset the CC1E Bit */
7261 tmpccer = TIMx->CCER;
7262 TIMx->CCER &= ~TIM_CCER_CC1E;
7263 tmpccmr1 = TIMx->CCMR1;
7264
7265 /* Select the Input */
7266 if (IS_TIM_CC2_INSTANCE(TIMx) != RESET)
7267 {
7268 tmpccmr1 &= ~TIM_CCMR1_CC1S;
7269 tmpccmr1 |= TIM_ICSelection;
7270 }
7271 else
7272 {
7273 tmpccmr1 |= TIM_CCMR1_CC1S_0;
7274 }
7275
7276 /* Set the filter */
7277 tmpccmr1 &= ~TIM_CCMR1_IC1F;
7278 tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F);
7279
7280 /* Select the Polarity and set the CC1E Bit */
7281 tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
7282 tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP));
7283
7284 /* Write to TIMx CCMR1 and CCER registers */
7285 TIMx->CCMR1 = tmpccmr1;
7286 TIMx->CCER = tmpccer;
7287}
7288
7301static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
7302{
7303 uint32_t tmpccmr1;
7304 uint32_t tmpccer;
7305
7306 /* Disable the Channel 1: Reset the CC1E Bit */
7307 tmpccer = TIMx->CCER;
7308 TIMx->CCER &= ~TIM_CCER_CC1E;
7309 tmpccmr1 = TIMx->CCMR1;
7310
7311 /* Set the filter */
7312 tmpccmr1 &= ~TIM_CCMR1_IC1F;
7313 tmpccmr1 |= (TIM_ICFilter << 4U);
7314
7315 /* Select the Polarity and set the CC1E Bit */
7316 tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
7317 tmpccer |= TIM_ICPolarity;
7318
7319 /* Write to TIMx CCMR1 and CCER registers */
7320 TIMx->CCMR1 = tmpccmr1;
7321 TIMx->CCER = tmpccer;
7322}
7323
7344static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
7345 uint32_t TIM_ICFilter)
7346{
7347 uint32_t tmpccmr1;
7348 uint32_t tmpccer;
7349
7350 /* Disable the Channel 2: Reset the CC2E Bit */
7351 tmpccer = TIMx->CCER;
7352 TIMx->CCER &= ~TIM_CCER_CC2E;
7353 tmpccmr1 = TIMx->CCMR1;
7354
7355 /* Select the Input */
7356 tmpccmr1 &= ~TIM_CCMR1_CC2S;
7357 tmpccmr1 |= (TIM_ICSelection << 8U);
7358
7359 /* Set the filter */
7360 tmpccmr1 &= ~TIM_CCMR1_IC2F;
7361 tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F);
7362
7363 /* Select the Polarity and set the CC2E Bit */
7364 tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
7365 tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP));
7366
7367 /* Write to TIMx CCMR1 and CCER registers */
7368 TIMx->CCMR1 = tmpccmr1 ;
7369 TIMx->CCER = tmpccer;
7370}
7371
7384static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
7385{
7386 uint32_t tmpccmr1;
7387 uint32_t tmpccer;
7388
7389 /* Disable the Channel 2: Reset the CC2E Bit */
7390 tmpccer = TIMx->CCER;
7391 TIMx->CCER &= ~TIM_CCER_CC2E;
7392 tmpccmr1 = TIMx->CCMR1;
7393
7394 /* Set the filter */
7395 tmpccmr1 &= ~TIM_CCMR1_IC2F;
7396 tmpccmr1 |= (TIM_ICFilter << 12U);
7397
7398 /* Select the Polarity and set the CC2E Bit */
7399 tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
7400 tmpccer |= (TIM_ICPolarity << 4U);
7401
7402 /* Write to TIMx CCMR1 and CCER registers */
7403 TIMx->CCMR1 = tmpccmr1 ;
7404 TIMx->CCER = tmpccer;
7405}
7406
7427static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
7428 uint32_t TIM_ICFilter)
7429{
7430 uint32_t tmpccmr2;
7431 uint32_t tmpccer;
7432
7433 /* Disable the Channel 3: Reset the CC3E Bit */
7434 tmpccer = TIMx->CCER;
7435 TIMx->CCER &= ~TIM_CCER_CC3E;
7436 tmpccmr2 = TIMx->CCMR2;
7437
7438 /* Select the Input */
7439 tmpccmr2 &= ~TIM_CCMR2_CC3S;
7440 tmpccmr2 |= TIM_ICSelection;
7441
7442 /* Set the filter */
7443 tmpccmr2 &= ~TIM_CCMR2_IC3F;
7444 tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F);
7445
7446 /* Select the Polarity and set the CC3E Bit */
7447 tmpccer &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP);
7448 tmpccer |= ((TIM_ICPolarity << 8U) & (TIM_CCER_CC3P | TIM_CCER_CC3NP));
7449
7450 /* Write to TIMx CCMR2 and CCER registers */
7451 TIMx->CCMR2 = tmpccmr2;
7452 TIMx->CCER = tmpccer;
7453}
7454
7475static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
7476 uint32_t TIM_ICFilter)
7477{
7478 uint32_t tmpccmr2;
7479 uint32_t tmpccer;
7480
7481 /* Disable the Channel 4: Reset the CC4E Bit */
7482 tmpccer = TIMx->CCER;
7483 TIMx->CCER &= ~TIM_CCER_CC4E;
7484 tmpccmr2 = TIMx->CCMR2;
7485
7486 /* Select the Input */
7487 tmpccmr2 &= ~TIM_CCMR2_CC4S;
7488 tmpccmr2 |= (TIM_ICSelection << 8U);
7489
7490 /* Set the filter */
7491 tmpccmr2 &= ~TIM_CCMR2_IC4F;
7492 tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F);
7493
7494 /* Select the Polarity and set the CC4E Bit */
7495 tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP);
7496 tmpccer |= ((TIM_ICPolarity << 12U) & (TIM_CCER_CC4P | TIM_CCER_CC4NP));
7497
7498 /* Write to TIMx CCMR2 and CCER registers */
7499 TIMx->CCMR2 = tmpccmr2;
7500 TIMx->CCER = tmpccer ;
7501}
7502
7518static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)
7519{
7520 uint32_t tmpsmcr;
7521
7522 /* Get the TIMx SMCR register value */
7523 tmpsmcr = TIMx->SMCR;
7524 /* Reset the TS Bits */
7525 tmpsmcr &= ~TIM_SMCR_TS;
7526 /* Set the Input Trigger source and the slave mode*/
7527 tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);
7528 /* Write to TIMx SMCR */
7529 TIMx->SMCR = tmpsmcr;
7530}
7548void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,
7549 uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
7550{
7551 uint32_t tmpsmcr;
7552
7553 tmpsmcr = TIMx->SMCR;
7554
7555 /* Reset the ETR Bits */
7556 tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
7557
7558 /* Set the Prescaler, the Filter value and the Polarity */
7559 tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));
7560
7561 /* Write to TIMx SMCR */
7562 TIMx->SMCR = tmpsmcr;
7563}
7564
7578void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState)
7579{
7580 uint32_t tmp;
7581
7582 /* Check the parameters */
7583 assert_param(IS_TIM_CC1_INSTANCE(TIMx));
7584 assert_param(IS_TIM_CHANNELS(Channel));
7585
7586 tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */
7587
7588 /* Reset the CCxE Bit */
7589 TIMx->CCER &= ~tmp;
7590
7591 /* Set or reset the CCxE Bit */
7592 TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */
7593}
7594
7595#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
7602void TIM_ResetCallback(TIM_HandleTypeDef *htim)
7603{
7604 /* Reset the TIM callback to the legacy weak callbacks */
7605 htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback;
7606 htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback;
7607 htim->TriggerCallback = HAL_TIM_TriggerCallback;
7608 htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback;
7609 htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback;
7610 htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback;
7611 htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback;
7612 htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback;
7613 htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback;
7614 htim->ErrorCallback = HAL_TIM_ErrorCallback;
7615 htim->CommutationCallback = HAL_TIMEx_CommutCallback;
7616 htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback;
7617 htim->BreakCallback = HAL_TIMEx_BreakCallback;
7618}
7619#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
7620
7625#endif /* HAL_TIM_MODULE_ENABLED */
#define TIM_CCx_DISABLE
#define TIM_CCx_ENABLE
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
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 TIM_DMA_ID_UPDATE
#define TIM_DMA_ID_CC4
#define TIM_DMA_ID_TRIGGER
#define TIM_DMA_ID_CC3
#define TIM_DMA_ID_CC1
#define TIM_DMA_ID_CC2
#define TIM_DMA_ID_COMMUTATION
#define DMA_NORMAL
void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim)
Initializes the TIM Hall Sensor MSP.
void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim)
DeInitializes TIM Hall Sensor MSP.
void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
Break detection callback in non-blocking mode.
void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
Commutation callback in non-blocking mode.
void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim)
Commutation half complete callback in non-blocking mode.
void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma)
TIM DMA Commutation half complete callback.
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma)
TIM DMA Commutation callback.
#define TIM_CHANNEL_2
#define TIM_CHANNEL_3
#define TIM_CHANNEL_1
#define TIM_CHANNEL_4
#define TIM_CLEARINPUTPRESCALER_DIV1
#define TIM_CLEARINPUTSOURCE_NONE
#define TIM_CLEARINPUTSOURCE_ETR
#define TIM_CLOCKSOURCE_TI1
#define TIM_CLOCKSOURCE_ITR3
#define TIM_CLOCKSOURCE_ITR0
#define TIM_CLOCKSOURCE_TI2
#define TIM_CLOCKSOURCE_INTERNAL
#define TIM_CLOCKSOURCE_ETRMODE1
#define TIM_CLOCKSOURCE_ETRMODE2
#define TIM_CLOCKSOURCE_TI1ED
#define TIM_CLOCKSOURCE_ITR1
#define TIM_CLOCKSOURCE_ITR2
#define TIM_DMA_TRIGGER
#define TIM_DMA_CC1
#define TIM_DMA_CC3
#define TIM_DMA_UPDATE
#define TIM_DMA_CC4
#define TIM_DMA_CC2
#define TIM_DMA_COM
HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(const TIM_HandleTypeDef *htim)
Return the TIM One Pulse Mode handle state.
HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(const TIM_HandleTypeDef *htim)
Return the TIM Input Capture handle state.
HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel)
Return actual state of the TIM channel.
HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(const TIM_HandleTypeDef *htim)
Return the TIM Base handle state.
HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(const TIM_HandleTypeDef *htim)
Return the TIM Encoder Mode handle state.
HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(const TIM_HandleTypeDef *htim)
Return the TIM PWM handle state.
HAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(const TIM_HandleTypeDef *htim)
Return the TIM Encoder Mode handle state.
HAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(const TIM_HandleTypeDef *htim)
Return actual state of a DMA burst operation.
HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(const TIM_HandleTypeDef *htim)
Return the TIM OC handle state.
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)
Stops the TIM Base generation in interrupt mode.
HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
Initializes the TIM Time base Unit according to the specified parameters in the TIM_HandleTypeDef and...
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
Initializes the TIM Base MSP.
HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length)
Starts the TIM Base generation in DMA mode.
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim)
DeInitializes TIM Base MSP.
HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
Stops the TIM Base generation in DMA mode.
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim)
Stops the TIM Base generation.
HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim)
DeInitializes the TIM Base peripheral.
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
Starts the TIM Base generation in interrupt mode.
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
Starts the TIM Base generation.
void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim)
DeInitializes TIM Output Compare MSP.
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, uint16_t Length)
Starts the TIM Output Compare signal generation in DMA mode.
HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Output Compare signal generation in DMA mode.
HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the TIM Output Compare signal generation.
HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim)
Initializes the TIM Output Compare according to the specified parameters in the TIM_HandleTypeDef and...
HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim)
DeInitializes the TIM peripheral.
HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Output Compare signal generation.
void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim)
Initializes the TIM Output Compare MSP.
HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Output Compare signal generation in interrupt mode.
HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the TIM Output Compare signal generation in interrupt mode.
HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the PWM signal generation in interrupt mode.
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the PWM signal generation.
HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)
Initializes the TIM PWM Time Base according to the specified parameters in the TIM_HandleTypeDef and ...
HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData, uint16_t Length)
Starts the TIM PWM signal generation in DMA mode.
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
Initializes the TIM PWM MSP.
HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim)
DeInitializes the TIM peripheral.
void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim)
DeInitializes TIM PWM MSP.
HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the PWM signal generation in interrupt mode.
HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM PWM signal generation in DMA mode.
HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the PWM signal generation.
HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Input Capture measurement.
void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)
Initializes the TIM Input Capture MSP.
HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim)
DeInitializes the TIM peripheral.
HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim)
Initializes the TIM Input Capture Time base according to the specified parameters in the TIM_HandleTy...
HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Input Capture measurement in DMA mode.
HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the TIM Input Capture measurement.
HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the TIM Input Capture measurement in interrupt mode.
HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
Starts the TIM Input Capture measurement in DMA mode.
void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim)
DeInitializes TIM Input Capture MSP.
HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Input Capture measurement in interrupt mode.
HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
Starts the TIM One Pulse signal generation.
HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode)
Initializes the TIM One Pulse Time Base according to the specified parameters in the TIM_HandleTypeDe...
void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim)
DeInitializes TIM One Pulse MSP.
HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
Stops the TIM One Pulse signal generation in interrupt mode.
void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim)
Initializes the TIM One Pulse MSP.
HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
Stops the TIM One Pulse signal generation.
HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim)
DeInitializes the TIM One Pulse.
HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
Starts the TIM One Pulse signal generation in interrupt mode.
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Encoder Interface in DMA mode.
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Encoder Interface.
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the TIM Encoder Interface.
HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
Starts the TIM Encoder Interface in DMA mode.
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim)
Initializes the TIM Encoder Interface MSP.
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Starts the TIM Encoder Interface in interrupt mode.
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
DeInitializes TIM Encoder Interface MSP.
HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim)
DeInitializes the TIM Encoder interface.
HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, const TIM_Encoder_InitTypeDef *sConfig)
Initializes the TIM Encoder Interface and initialize the associated handle.
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
Stops the TIM Encoder Interface in interrupt mode.
void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
This function handles TIM interrupts requests.
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, uint32_t Channel)
Initializes the TIM Input Capture Channels according to the specified parameters in the TIM_IC_InitTy...
HAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength)
Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral.
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, uint32_t Channel)
Initializes the TIM PWM channels according to the specified parameters in the TIM_OC_InitTypeDef.
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, const uint32_t *BurstBuffer, uint32_t BurstLength)
Configure the DMA Burst to transfer Data from the memory to the TIM peripheral.
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
Configure the DMA Burst to transfer Data from the TIM peripheral to the memory.
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc)
Stop the DMA burst reading.
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig)
Configures the TIM in Slave mode.
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig)
Configures the TIM in Slave mode in interrupt mode.
uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel)
Read the captured value from Capture Compare unit.
HAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength)
Configure the DMA Burst to transfer Data from the TIM peripheral to the memory.
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection)
Selects the signal connected to the TI1 input: direct from CH1_input or a XOR combination between CH1...
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc)
Stops the TIM DMA Burst mode.
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_OC_InitTypeDef *sConfig, uint32_t Channel)
Initializes the TIM Output Compare Channels according to the specified parameters in the TIM_OC_InitT...
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig)
Configures the clock source to be used.
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource)
Generate a software event.
HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, const TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel)
Configures the OCRef clear feature.
HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
Initializes the TIM One Pulse Channels according to the specified parameters in the TIM_OnePulse_Init...
void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim)
Hall Trigger detection half complete callback in non-blocking mode.
void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim)
Input Capture half complete callback in non-blocking mode.
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
Output Compare callback in non-blocking mode.
void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim)
PWM Pulse finished half complete callback in non-blocking mode.
void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
Timer error callback in non-blocking mode.
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
PWM Pulse finished callback in non-blocking mode.
void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
Hall Trigger detection callback in non-blocking mode.
void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim)
Period elapsed half complete callback in non-blocking mode.
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
Period elapsed callback in non-blocking mode.
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
Input Capture callback in non-blocking mode.
#define __HAL_TIM_MOE_ENABLE(__HANDLE__)
Enable the TIM main Output.
#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__)
Disable the specified DMA request.
#define __HAL_TIM_ENABLE(__HANDLE__)
Enable the TIM peripheral.
#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the specified TIM interrupt flag.
#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the specified TIM interrupt.
#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the specified TIM interrupt.
#define __HAL_TIM_MOE_DISABLE(__HANDLE__)
Disable the TIM main Output.
#define __HAL_TIM_DISABLE(__HANDLE__)
Disable the TIM peripheral.
#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__)
Enable the specified DMA request.
HAL_TIM_ChannelStateTypeDef
TIM Channel States definition.
HAL_TIM_DMABurstStateTypeDef
DMA Burst States definition.
HAL_TIM_ActiveChannel
HAL Active channel structures definition.
HAL_TIM_StateTypeDef
HAL State structures definition.
@ HAL_TIM_CHANNEL_STATE_READY
@ HAL_TIM_CHANNEL_STATE_RESET
@ HAL_TIM_CHANNEL_STATE_BUSY
@ HAL_DMA_BURST_STATE_BUSY
@ HAL_DMA_BURST_STATE_READY
@ HAL_DMA_BURST_STATE_RESET
@ HAL_TIM_ACTIVE_CHANNEL_1
@ HAL_TIM_ACTIVE_CHANNEL_CLEARED
@ HAL_TIM_ACTIVE_CHANNEL_4
@ HAL_TIM_ACTIVE_CHANNEL_3
@ HAL_TIM_ACTIVE_CHANNEL_2
@ HAL_TIM_STATE_BUSY
@ HAL_TIM_STATE_RESET
@ HAL_TIM_STATE_READY
#define TIM_FLAG_BREAK
#define TIM_FLAG_CC3
#define TIM_FLAG_CC2
#define TIM_FLAG_CC1
#define TIM_FLAG_UPDATE
#define TIM_FLAG_TRIGGER
#define TIM_FLAG_COM
#define TIM_FLAG_CC4
#define TIM_IT_CC1
#define TIM_IT_CC4
#define TIM_IT_TRIGGER
#define TIM_IT_BREAK
#define TIM_IT_CC2
#define TIM_IT_UPDATE
#define TIM_IT_CC3
#define TIM_IT_COM
static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter)
Configure the TI3 as Input.
static void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma)
TIM DMA Delay Pulse complete callback.
void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
Configures the TIMx External Trigger (ETR).
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, const TIM_SlaveConfigTypeDef *sSlaveConfig)
Slave Timer configuration function.
void TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma)
TIM DMA Capture half complete callback.
static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter)
Configure the TI4 as Input.
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma)
TIM DMA Trigger half complete callback.
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
Timer Output Compare 2 configuration.
void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma)
TIM DMA Capture complete callback.
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma)
TIM DMA Trigger callback.
static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)
Selects the Input Trigger source.
void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState)
Enables or disables the TIM Capture Compare Channel x.
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter)
Configure the TI1 as Input.
void TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma)
TIM DMA Delay Pulse half complete callback.
static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
Timer Output Compare 4 configuration.
void TIM_DMAError(DMA_HandleTypeDef *hdma)
TIM DMA error callback.
static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
Timer Output Compare 3 configuration.
static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter)
Configure the TI2 as Input.
static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
Timer Output Compare 1 configuration.
static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma)
TIM DMA Period Elapse half complete callback.
static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
Configure the Polarity and Filter for TI1.
static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
Configure the Polarity and Filter for TI2.
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure)
Time Base configuration.
static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma)
TIM DMA Period Elapse complete callback.
#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__)
#define IS_TIM_CLEARINPUT_SOURCE(__MODE__)
#define IS_TIM_TRIGGER_SELECTION(__SELECTION__)
#define IS_TIM_IC_POLARITY(__POLARITY__)
#define IS_TIM_CHANNELS(__CHANNEL__)
#define IS_TIM_IC_FILTER(__ICFILTER__)
#define IS_TIM_OPM_MODE(__MODE__)
#define IS_TIM_IC_SELECTION(__SELECTION__)
#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)
#define IS_TIM_TRIGGERPOLARITY(__POLARITY__)
#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__)
#define IS_TIM_ENCODER_MODE(__MODE__)
#define IS_TIM_COUNTER_MODE(__MODE__)
#define IS_TIM_DMA_LENGTH(__LENGTH__)
#define IS_TIM_TI1SELECTION(__TI1SELECTION__)
#define IS_TIM_DMA_SOURCE(__SOURCE__)
#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__)
#define IS_TIM_OCNIDLE_STATE(__STATE__)
#define IS_TIM_PWM_MODE(__MODE__)
#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__)
#define IS_TIM_OCIDLE_STATE(__STATE__)
#define IS_TIM_CLOCKFILTER(__ICFILTER__)
#define IS_TIM_DMA_DATA_LENGTH(LENGTH)
#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__)
#define IS_TIM_IC_PRESCALER(__PRESCALER__)
#define IS_TIM_CLOCKPOLARITY(__POLARITY__)
#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)
#define IS_TIM_OCN_POLARITY(__POLARITY__)
#define IS_TIM_TRIGGERFILTER(__ICFILTER__)
#define IS_TIM_OPM_CHANNELS(__CHANNEL__)
#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD)
#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)
#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__)
#define IS_TIM_OC_MODE(__MODE__)
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__)
#define IS_TIM_CLOCKPRESCALER(__PRESCALER__)
#define IS_TIM_EVENT_SOURCE(__SOURCE__)
#define IS_TIM_CLOCKSOURCE(__CLOCK__)
#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)
#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__)
#define IS_TIM_FAST_STATE(__STATE__)
#define IS_TIM_DMA_BASE(__BASE__)
#define IS_TIM_PERIOD(__HANDLE__, __PERIOD__)
#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__)
#define IS_TIM_SLAVE_MODE(__MODE__)
#define IS_TIM_OC_POLARITY(__POLARITY__)
#define TIM_SLAVEMODE_TRIGGER
#define TIM_SLAVEMODE_GATED
#define TIM_SLAVEMODE_EXTERNAL1
#define TIM_TS_TI2FP2
#define TIM_TS_TI1FP1
#define TIM_TS_ITR3
#define TIM_TS_ITR2
#define TIM_TS_TI1F_ED
#define TIM_TS_ITR0
#define TIM_TS_ITR1
#define TIM_TS_ETRF
#define assert_param(expr)
This file contains all the functions prototypes for the HAL module driver.
#define HAL_IS_BIT_SET(REG, BIT)
HAL_StatusTypeDef
HAL Status structures definition
@ HAL_ERROR
@ HAL_OK
@ HAL_BUSY
#define UNUSED(X)
#define __HAL_UNLOCK(__HANDLE__)
@ HAL_UNLOCKED
#define __HAL_LOCK(__HANDLE__)
TIM Time base Configuration Structure definition.
TIM Clear Input Configuration Handle Structure definition.
Clock Configuration Handle Structure definition.
TIM Encoder Configuration Structure definition.
TIM Time Base Handle Structure definition.
DMA_HandleTypeDef * hdma[7]
HAL_LockTypeDef Lock
__IO HAL_TIM_StateTypeDef State
TIM_Base_InitTypeDef Init
__IO HAL_TIM_DMABurstStateTypeDef DMABurstState
HAL_TIM_ActiveChannel Channel
TIM Input Capture Configuration Structure definition.
TIM Output Compare Configuration Structure definition.
TIM One Pulse Mode Configuration Structure definition.
TIM Slave configuration Structure definition.
DMA handle Structure definition.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)