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
184
185/* Includes ------------------------------------------------------------------*/
186#include "stm32f4xx_hal.h"
187
191
196
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
234
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
618
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
1283
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
1947
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}
2586
2589
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
2981
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
4008
4027
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
5136
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
5632
5651
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
6318
6333
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
6445
6449
6453
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}
7531
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
7624
7625#endif /* HAL_TIM_MODULE_ENABLED */
7629
#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.
struct __DMA_HandleTypeDef DMA_HandleTypeDef
DMA handle Structure definition.
#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.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)