File indexing completed on 2025-05-11 08:23:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 #include "stm32h7xx_hal.h"
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094 #ifdef HAL_TIM_MODULE_ENABLED
0095
0096
0097
0098 #if defined(TIM_BDTR_BKBID)
0099
0100
0101
0102
0103
0104
0105 #define TIM_BREAKINPUT_REARM_TIMEOUT 5UL
0106
0107
0108
0109
0110
0111 #endif
0112
0113
0114
0115 static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma);
0116 static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma);
0117 static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState);
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, const TIM_HallSensor_InitTypeDef *sConfig)
0157 {
0158 TIM_OC_InitTypeDef OC_Config;
0159
0160
0161 if (htim == NULL)
0162 {
0163 return HAL_ERROR;
0164 }
0165
0166
0167 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
0168 assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
0169 assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
0170 assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
0171 assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
0172 assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
0173 assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
0174 assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
0175
0176 if (htim->State == HAL_TIM_STATE_RESET)
0177 {
0178
0179 htim->Lock = HAL_UNLOCKED;
0180
0181 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
0182
0183 TIM_ResetCallback(htim);
0184
0185 if (htim->HallSensor_MspInitCallback == NULL)
0186 {
0187 htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit;
0188 }
0189
0190 htim->HallSensor_MspInitCallback(htim);
0191 #else
0192
0193 HAL_TIMEx_HallSensor_MspInit(htim);
0194 #endif
0195 }
0196
0197
0198 htim->State = HAL_TIM_STATE_BUSY;
0199
0200
0201 TIM_Base_SetConfig(htim->Instance, &htim->Init);
0202
0203
0204 TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter);
0205
0206
0207 htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;
0208
0209 htim->Instance->CCMR1 |= sConfig->IC1Prescaler;
0210
0211
0212 htim->Instance->CR2 |= TIM_CR2_TI1S;
0213
0214
0215 htim->Instance->SMCR &= ~TIM_SMCR_TS;
0216 htim->Instance->SMCR |= TIM_TS_TI1F_ED;
0217
0218
0219 htim->Instance->SMCR &= ~TIM_SMCR_SMS;
0220 htim->Instance->SMCR |= TIM_SLAVEMODE_RESET;
0221
0222
0223 OC_Config.OCFastMode = TIM_OCFAST_DISABLE;
0224 OC_Config.OCIdleState = TIM_OCIDLESTATE_RESET;
0225 OC_Config.OCMode = TIM_OCMODE_PWM2;
0226 OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET;
0227 OC_Config.OCNPolarity = TIM_OCNPOLARITY_HIGH;
0228 OC_Config.OCPolarity = TIM_OCPOLARITY_HIGH;
0229 OC_Config.Pulse = sConfig->Commutation_Delay;
0230
0231 TIM_OC2_SetConfig(htim->Instance, &OC_Config);
0232
0233
0234
0235 htim->Instance->CR2 &= ~TIM_CR2_MMS;
0236 htim->Instance->CR2 |= TIM_TRGO_OC2REF;
0237
0238
0239 htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
0240
0241
0242 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0243 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
0244 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0245 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
0246
0247
0248 htim->State = HAL_TIM_STATE_READY;
0249
0250 return HAL_OK;
0251 }
0252
0253
0254
0255
0256
0257
0258 HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim)
0259 {
0260
0261 assert_param(IS_TIM_INSTANCE(htim->Instance));
0262
0263 htim->State = HAL_TIM_STATE_BUSY;
0264
0265
0266 __HAL_TIM_DISABLE(htim);
0267
0268 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
0269 if (htim->HallSensor_MspDeInitCallback == NULL)
0270 {
0271 htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit;
0272 }
0273
0274 htim->HallSensor_MspDeInitCallback(htim);
0275 #else
0276
0277 HAL_TIMEx_HallSensor_MspDeInit(htim);
0278 #endif
0279
0280
0281 htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;
0282
0283
0284 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);
0285 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);
0286 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);
0287 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);
0288
0289
0290 htim->State = HAL_TIM_STATE_RESET;
0291
0292
0293 __HAL_UNLOCK(htim);
0294
0295 return HAL_OK;
0296 }
0297
0298
0299
0300
0301
0302
0303 __weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim)
0304 {
0305
0306 UNUSED(htim);
0307
0308
0309
0310
0311 }
0312
0313
0314
0315
0316
0317
0318 __weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim)
0319 {
0320
0321 UNUSED(htim);
0322
0323
0324
0325
0326 }
0327
0328
0329
0330
0331
0332
0333 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim)
0334 {
0335 uint32_t tmpsmcr;
0336 HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);
0337 HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);
0338 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
0339 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
0340
0341
0342 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
0343
0344
0345 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
0346 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
0347 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
0348 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
0349 {
0350 return HAL_ERROR;
0351 }
0352
0353
0354 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
0355 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
0356 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
0357 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
0358
0359
0360
0361
0362 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);
0363
0364
0365 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
0366 {
0367 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
0368 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
0369 {
0370 __HAL_TIM_ENABLE(htim);
0371 }
0372 }
0373 else
0374 {
0375 __HAL_TIM_ENABLE(htim);
0376 }
0377
0378
0379 return HAL_OK;
0380 }
0381
0382
0383
0384
0385
0386
0387 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim)
0388 {
0389
0390 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
0391
0392
0393
0394
0395 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);
0396
0397
0398 __HAL_TIM_DISABLE(htim);
0399
0400
0401 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0402 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
0403 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0404 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
0405
0406
0407 return HAL_OK;
0408 }
0409
0410
0411
0412
0413
0414
0415 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim)
0416 {
0417 uint32_t tmpsmcr;
0418 HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);
0419 HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);
0420 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
0421 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
0422
0423
0424 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
0425
0426
0427 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
0428 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
0429 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
0430 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
0431 {
0432 return HAL_ERROR;
0433 }
0434
0435
0436 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
0437 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
0438 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
0439 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
0440
0441
0442 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);
0443
0444
0445
0446
0447 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);
0448
0449
0450 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
0451 {
0452 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
0453 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
0454 {
0455 __HAL_TIM_ENABLE(htim);
0456 }
0457 }
0458 else
0459 {
0460 __HAL_TIM_ENABLE(htim);
0461 }
0462
0463
0464 return HAL_OK;
0465 }
0466
0467
0468
0469
0470
0471
0472 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim)
0473 {
0474
0475 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
0476
0477
0478
0479
0480 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);
0481
0482
0483 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);
0484
0485
0486 __HAL_TIM_DISABLE(htim);
0487
0488
0489 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0490 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
0491 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0492 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
0493
0494
0495 return HAL_OK;
0496 }
0497
0498
0499
0500
0501
0502
0503
0504
0505 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length)
0506 {
0507 uint32_t tmpsmcr;
0508 HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);
0509 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
0510
0511
0512 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
0513
0514
0515 if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)
0516 || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY))
0517 {
0518 return HAL_BUSY;
0519 }
0520 else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY)
0521 && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY))
0522 {
0523 if ((pData == NULL) || (Length == 0U))
0524 {
0525 return HAL_ERROR;
0526 }
0527 else
0528 {
0529 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
0530 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
0531 }
0532 }
0533 else
0534 {
0535 return HAL_ERROR;
0536 }
0537
0538
0539
0540
0541 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);
0542
0543
0544 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMACaptureCplt;
0545 htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;
0546
0547 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
0548
0549
0550 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK)
0551 {
0552
0553 return HAL_ERROR;
0554 }
0555
0556 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);
0557
0558
0559 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
0560 {
0561 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
0562 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
0563 {
0564 __HAL_TIM_ENABLE(htim);
0565 }
0566 }
0567 else
0568 {
0569 __HAL_TIM_ENABLE(htim);
0570 }
0571
0572
0573 return HAL_OK;
0574 }
0575
0576
0577
0578
0579
0580
0581 HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim)
0582 {
0583
0584 assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
0585
0586
0587
0588
0589 TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);
0590
0591
0592
0593 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);
0594
0595 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
0596
0597
0598 __HAL_TIM_DISABLE(htim);
0599
0600
0601 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0602 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
0603
0604
0605 return HAL_OK;
0606 }
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644 HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
0645 {
0646 uint32_t tmpsmcr;
0647
0648
0649 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
0650
0651
0652 if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
0653 {
0654 return HAL_ERROR;
0655 }
0656
0657
0658 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
0659
0660
0661 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);
0662
0663
0664 __HAL_TIM_MOE_ENABLE(htim);
0665
0666
0667 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
0668 {
0669 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
0670 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
0671 {
0672 __HAL_TIM_ENABLE(htim);
0673 }
0674 }
0675 else
0676 {
0677 __HAL_TIM_ENABLE(htim);
0678 }
0679
0680
0681 return HAL_OK;
0682 }
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
0696 {
0697
0698 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
0699
0700
0701 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);
0702
0703
0704 __HAL_TIM_MOE_DISABLE(htim);
0705
0706
0707 __HAL_TIM_DISABLE(htim);
0708
0709
0710 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
0711
0712
0713 return HAL_OK;
0714 }
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724
0725
0726
0727 HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
0728 {
0729 HAL_StatusTypeDef status = HAL_OK;
0730 uint32_t tmpsmcr;
0731
0732
0733 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
0734
0735
0736 if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
0737 {
0738 return HAL_ERROR;
0739 }
0740
0741
0742 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
0743
0744 switch (Channel)
0745 {
0746 case TIM_CHANNEL_1:
0747 {
0748
0749 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);
0750 break;
0751 }
0752
0753 case TIM_CHANNEL_2:
0754 {
0755
0756 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);
0757 break;
0758 }
0759
0760 case TIM_CHANNEL_3:
0761 {
0762
0763 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);
0764 break;
0765 }
0766
0767
0768 default:
0769 status = HAL_ERROR;
0770 break;
0771 }
0772
0773 if (status == HAL_OK)
0774 {
0775
0776 __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);
0777
0778
0779 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);
0780
0781
0782 __HAL_TIM_MOE_ENABLE(htim);
0783
0784
0785 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
0786 {
0787 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
0788 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
0789 {
0790 __HAL_TIM_ENABLE(htim);
0791 }
0792 }
0793 else
0794 {
0795 __HAL_TIM_ENABLE(htim);
0796 }
0797 }
0798
0799
0800 return status;
0801 }
0802
0803
0804
0805
0806
0807
0808
0809
0810
0811
0812
0813
0814 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
0815 {
0816 HAL_StatusTypeDef status = HAL_OK;
0817 uint32_t tmpccer;
0818
0819
0820 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
0821
0822 switch (Channel)
0823 {
0824 case TIM_CHANNEL_1:
0825 {
0826
0827 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);
0828 break;
0829 }
0830
0831 case TIM_CHANNEL_2:
0832 {
0833
0834 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);
0835 break;
0836 }
0837
0838 case TIM_CHANNEL_3:
0839 {
0840
0841 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);
0842 break;
0843 }
0844
0845 default:
0846 status = HAL_ERROR;
0847 break;
0848 }
0849
0850 if (status == HAL_OK)
0851 {
0852
0853 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);
0854
0855
0856 tmpccer = htim->Instance->CCER;
0857 if ((tmpccer & TIM_CCER_CCxNE_MASK) == (uint32_t)RESET)
0858 {
0859 __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);
0860 }
0861
0862
0863 __HAL_TIM_MOE_DISABLE(htim);
0864
0865
0866 __HAL_TIM_DISABLE(htim);
0867
0868
0869 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
0870 }
0871
0872
0873 return status;
0874 }
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889 HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData,
0890 uint16_t Length)
0891 {
0892 HAL_StatusTypeDef status = HAL_OK;
0893 uint32_t tmpsmcr;
0894
0895
0896 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
0897
0898
0899 if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY)
0900 {
0901 return HAL_BUSY;
0902 }
0903 else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY)
0904 {
0905 if ((pData == NULL) || (Length == 0U))
0906 {
0907 return HAL_ERROR;
0908 }
0909 else
0910 {
0911 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
0912 }
0913 }
0914 else
0915 {
0916 return HAL_ERROR;
0917 }
0918
0919 switch (Channel)
0920 {
0921 case TIM_CHANNEL_1:
0922 {
0923
0924 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt;
0925 htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;
0926
0927
0928 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ;
0929
0930
0931 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1,
0932 Length) != HAL_OK)
0933 {
0934
0935 return HAL_ERROR;
0936 }
0937
0938 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);
0939 break;
0940 }
0941
0942 case TIM_CHANNEL_2:
0943 {
0944
0945 htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt;
0946 htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;
0947
0948
0949 htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ;
0950
0951
0952 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2,
0953 Length) != HAL_OK)
0954 {
0955
0956 return HAL_ERROR;
0957 }
0958
0959 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);
0960 break;
0961 }
0962
0963 case TIM_CHANNEL_3:
0964 {
0965
0966 htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt;
0967 htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;
0968
0969
0970 htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ;
0971
0972
0973 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,
0974 Length) != HAL_OK)
0975 {
0976
0977 return HAL_ERROR;
0978 }
0979
0980 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);
0981 break;
0982 }
0983
0984 default:
0985 status = HAL_ERROR;
0986 break;
0987 }
0988
0989 if (status == HAL_OK)
0990 {
0991
0992 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);
0993
0994
0995 __HAL_TIM_MOE_ENABLE(htim);
0996
0997
0998 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
0999 {
1000 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1001 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
1002 {
1003 __HAL_TIM_ENABLE(htim);
1004 }
1005 }
1006 else
1007 {
1008 __HAL_TIM_ENABLE(htim);
1009 }
1010 }
1011
1012
1013 return status;
1014 }
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027 HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
1028 {
1029 HAL_StatusTypeDef status = HAL_OK;
1030
1031
1032 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
1033
1034 switch (Channel)
1035 {
1036 case TIM_CHANNEL_1:
1037 {
1038
1039 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);
1040 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
1041 break;
1042 }
1043
1044 case TIM_CHANNEL_2:
1045 {
1046
1047 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);
1048 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
1049 break;
1050 }
1051
1052 case TIM_CHANNEL_3:
1053 {
1054
1055 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);
1056 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);
1057 break;
1058 }
1059
1060 default:
1061 status = HAL_ERROR;
1062 break;
1063 }
1064
1065 if (status == HAL_OK)
1066 {
1067
1068 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);
1069
1070
1071 __HAL_TIM_MOE_DISABLE(htim);
1072
1073
1074 __HAL_TIM_DISABLE(htim);
1075
1076
1077 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
1078 }
1079
1080
1081 return status;
1082 }
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
1119 {
1120 uint32_t tmpsmcr;
1121
1122
1123 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
1124
1125
1126 if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
1127 {
1128 return HAL_ERROR;
1129 }
1130
1131
1132 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
1133
1134
1135 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);
1136
1137
1138 __HAL_TIM_MOE_ENABLE(htim);
1139
1140
1141 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
1142 {
1143 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1144 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
1145 {
1146 __HAL_TIM_ENABLE(htim);
1147 }
1148 }
1149 else
1150 {
1151 __HAL_TIM_ENABLE(htim);
1152 }
1153
1154
1155 return HAL_OK;
1156 }
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
1169 {
1170
1171 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
1172
1173
1174 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);
1175
1176
1177 __HAL_TIM_MOE_DISABLE(htim);
1178
1179
1180 __HAL_TIM_DISABLE(htim);
1181
1182
1183 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
1184
1185
1186 return HAL_OK;
1187 }
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
1201 {
1202 HAL_StatusTypeDef status = HAL_OK;
1203 uint32_t tmpsmcr;
1204
1205
1206 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
1207
1208
1209 if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
1210 {
1211 return HAL_ERROR;
1212 }
1213
1214
1215 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
1216
1217 switch (Channel)
1218 {
1219 case TIM_CHANNEL_1:
1220 {
1221
1222 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);
1223 break;
1224 }
1225
1226 case TIM_CHANNEL_2:
1227 {
1228
1229 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);
1230 break;
1231 }
1232
1233 case TIM_CHANNEL_3:
1234 {
1235
1236 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);
1237 break;
1238 }
1239
1240 default:
1241 status = HAL_ERROR;
1242 break;
1243 }
1244
1245 if (status == HAL_OK)
1246 {
1247
1248 __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);
1249
1250
1251 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);
1252
1253
1254 __HAL_TIM_MOE_ENABLE(htim);
1255
1256
1257 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
1258 {
1259 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1260 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
1261 {
1262 __HAL_TIM_ENABLE(htim);
1263 }
1264 }
1265 else
1266 {
1267 __HAL_TIM_ENABLE(htim);
1268 }
1269 }
1270
1271
1272 return status;
1273 }
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
1287 {
1288 HAL_StatusTypeDef status = HAL_OK;
1289 uint32_t tmpccer;
1290
1291
1292 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
1293
1294 switch (Channel)
1295 {
1296 case TIM_CHANNEL_1:
1297 {
1298
1299 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);
1300 break;
1301 }
1302
1303 case TIM_CHANNEL_2:
1304 {
1305
1306 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);
1307 break;
1308 }
1309
1310 case TIM_CHANNEL_3:
1311 {
1312
1313 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);
1314 break;
1315 }
1316
1317 default:
1318 status = HAL_ERROR;
1319 break;
1320 }
1321
1322 if (status == HAL_OK)
1323 {
1324
1325 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);
1326
1327
1328 tmpccer = htim->Instance->CCER;
1329 if ((tmpccer & TIM_CCER_CCxNE_MASK) == (uint32_t)RESET)
1330 {
1331 __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);
1332 }
1333
1334
1335 __HAL_TIM_MOE_DISABLE(htim);
1336
1337
1338 __HAL_TIM_DISABLE(htim);
1339
1340
1341 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
1342 }
1343
1344
1345 return status;
1346 }
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361 HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, const uint32_t *pData,
1362 uint16_t Length)
1363 {
1364 HAL_StatusTypeDef status = HAL_OK;
1365 uint32_t tmpsmcr;
1366
1367
1368 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
1369
1370
1371 if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY)
1372 {
1373 return HAL_BUSY;
1374 }
1375 else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY)
1376 {
1377 if ((pData == NULL) || (Length == 0U))
1378 {
1379 return HAL_ERROR;
1380 }
1381 else
1382 {
1383 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
1384 }
1385 }
1386 else
1387 {
1388 return HAL_ERROR;
1389 }
1390
1391 switch (Channel)
1392 {
1393 case TIM_CHANNEL_1:
1394 {
1395
1396 htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback = TIM_DMADelayPulseNCplt;
1397 htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;
1398
1399
1400 htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN ;
1401
1402
1403 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1,
1404 Length) != HAL_OK)
1405 {
1406
1407 return HAL_ERROR;
1408 }
1409
1410 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);
1411 break;
1412 }
1413
1414 case TIM_CHANNEL_2:
1415 {
1416
1417 htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback = TIM_DMADelayPulseNCplt;
1418 htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;
1419
1420
1421 htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN ;
1422
1423
1424 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2,
1425 Length) != HAL_OK)
1426 {
1427
1428 return HAL_ERROR;
1429 }
1430
1431 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);
1432 break;
1433 }
1434
1435 case TIM_CHANNEL_3:
1436 {
1437
1438 htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback = TIM_DMADelayPulseNCplt;
1439 htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;
1440
1441
1442 htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN ;
1443
1444
1445 if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3,
1446 Length) != HAL_OK)
1447 {
1448
1449 return HAL_ERROR;
1450 }
1451
1452 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);
1453 break;
1454 }
1455
1456 default:
1457 status = HAL_ERROR;
1458 break;
1459 }
1460
1461 if (status == HAL_OK)
1462 {
1463
1464 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);
1465
1466
1467 __HAL_TIM_MOE_ENABLE(htim);
1468
1469
1470 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
1471 {
1472 tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
1473 if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
1474 {
1475 __HAL_TIM_ENABLE(htim);
1476 }
1477 }
1478 else
1479 {
1480 __HAL_TIM_ENABLE(htim);
1481 }
1482 }
1483
1484
1485 return status;
1486 }
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499 HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
1500 {
1501 HAL_StatusTypeDef status = HAL_OK;
1502
1503
1504 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
1505
1506 switch (Channel)
1507 {
1508 case TIM_CHANNEL_1:
1509 {
1510
1511 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);
1512 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);
1513 break;
1514 }
1515
1516 case TIM_CHANNEL_2:
1517 {
1518
1519 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);
1520 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);
1521 break;
1522 }
1523
1524 case TIM_CHANNEL_3:
1525 {
1526
1527 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);
1528 (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);
1529 break;
1530 }
1531
1532 default:
1533 status = HAL_ERROR;
1534 break;
1535 }
1536
1537 if (status == HAL_OK)
1538 {
1539
1540 TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);
1541
1542
1543 __HAL_TIM_MOE_DISABLE(htim);
1544
1545
1546 __HAL_TIM_DISABLE(htim);
1547
1548
1549 TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
1550 }
1551
1552
1553 return status;
1554 }
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
1592 {
1593 uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;
1594 HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);
1595 HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);
1596 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
1597 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
1598
1599
1600 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));
1601
1602
1603 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
1604 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
1605 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
1606 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
1607 {
1608 return HAL_ERROR;
1609 }
1610
1611
1612 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
1613 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
1614 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
1615 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
1616
1617
1618 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);
1619 TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);
1620
1621
1622 __HAL_TIM_MOE_ENABLE(htim);
1623
1624
1625 return HAL_OK;
1626 }
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
1641 {
1642 uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;
1643
1644
1645 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));
1646
1647
1648 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);
1649 TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);
1650
1651
1652 __HAL_TIM_MOE_DISABLE(htim);
1653
1654
1655 __HAL_TIM_DISABLE(htim);
1656
1657
1658 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
1659 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
1660 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
1661 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
1662
1663
1664 return HAL_OK;
1665 }
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
1680 {
1681 uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;
1682 HAL_TIM_ChannelStateTypeDef channel_1_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);
1683 HAL_TIM_ChannelStateTypeDef channel_2_state = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);
1684 HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);
1685 HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);
1686
1687
1688 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));
1689
1690
1691 if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
1692 || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY)
1693 || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)
1694 || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY))
1695 {
1696 return HAL_ERROR;
1697 }
1698
1699
1700 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
1701 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
1702 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);
1703 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);
1704
1705
1706 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);
1707
1708
1709 __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);
1710
1711
1712 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);
1713 TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);
1714
1715
1716 __HAL_TIM_MOE_ENABLE(htim);
1717
1718
1719 return HAL_OK;
1720 }
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734 HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel)
1735 {
1736 uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;
1737
1738
1739 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));
1740
1741
1742 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);
1743
1744
1745 __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);
1746
1747
1748 TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);
1749 TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);
1750
1751
1752 __HAL_TIM_MOE_DISABLE(htim);
1753
1754
1755 __HAL_TIM_DISABLE(htim);
1756
1757
1758 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
1759 TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
1760 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
1761 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
1762
1763
1764 return HAL_OK;
1765 }
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
1822 uint32_t CommutationSource)
1823 {
1824
1825 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
1826 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));
1827
1828 __HAL_LOCK(htim);
1829
1830 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) ||
1831 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3) ||
1832 (InputTrigger == TIM_TS_ITR12) || (InputTrigger == TIM_TS_ITR13))
1833 {
1834
1835 htim->Instance->SMCR &= ~TIM_SMCR_TS;
1836 htim->Instance->SMCR |= InputTrigger;
1837 }
1838
1839
1840 htim->Instance->CR2 |= TIM_CR2_CCPC;
1841
1842 htim->Instance->CR2 &= ~TIM_CR2_CCUS;
1843 htim->Instance->CR2 |= CommutationSource;
1844
1845
1846 __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);
1847
1848
1849 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);
1850
1851 __HAL_UNLOCK(htim);
1852
1853 return HAL_OK;
1854 }
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
1884 uint32_t CommutationSource)
1885 {
1886
1887 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
1888 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));
1889
1890 __HAL_LOCK(htim);
1891
1892 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) ||
1893 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3) ||
1894 (InputTrigger == TIM_TS_ITR12) || (InputTrigger == TIM_TS_ITR13))
1895 {
1896
1897 htim->Instance->SMCR &= ~TIM_SMCR_TS;
1898 htim->Instance->SMCR |= InputTrigger;
1899 }
1900
1901
1902 htim->Instance->CR2 |= TIM_CR2_CCPC;
1903
1904 htim->Instance->CR2 &= ~TIM_CR2_CCUS;
1905 htim->Instance->CR2 |= CommutationSource;
1906
1907
1908 __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);
1909
1910
1911 __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM);
1912
1913 __HAL_UNLOCK(htim);
1914
1915 return HAL_OK;
1916 }
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946 HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
1947 uint32_t CommutationSource)
1948 {
1949
1950 assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
1951 assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));
1952
1953 __HAL_LOCK(htim);
1954
1955 if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) ||
1956 (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3) ||
1957 (InputTrigger == TIM_TS_ITR12) || (InputTrigger == TIM_TS_ITR13))
1958 {
1959
1960 htim->Instance->SMCR &= ~TIM_SMCR_TS;
1961 htim->Instance->SMCR |= InputTrigger;
1962 }
1963
1964
1965 htim->Instance->CR2 |= TIM_CR2_CCPC;
1966
1967 htim->Instance->CR2 &= ~TIM_CR2_CCUS;
1968 htim->Instance->CR2 |= CommutationSource;
1969
1970
1971
1972 htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback = TIMEx_DMACommutationCplt;
1973 htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;
1974
1975 htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;
1976
1977
1978 __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);
1979
1980
1981 __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM);
1982
1983 __HAL_UNLOCK(htim);
1984
1985 return HAL_OK;
1986 }
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996 HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
1997 const TIM_MasterConfigTypeDef *sMasterConfig)
1998 {
1999 uint32_t tmpcr2;
2000 uint32_t tmpsmcr;
2001
2002
2003 assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
2004 assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
2005 assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
2006
2007
2008 __HAL_LOCK(htim);
2009
2010
2011 htim->State = HAL_TIM_STATE_BUSY;
2012
2013
2014 tmpcr2 = htim->Instance->CR2;
2015
2016
2017 tmpsmcr = htim->Instance->SMCR;
2018
2019
2020 if (IS_TIM_TRGO2_INSTANCE(htim->Instance))
2021 {
2022
2023 assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2));
2024
2025
2026 tmpcr2 &= ~TIM_CR2_MMS2;
2027
2028 tmpcr2 |= sMasterConfig->MasterOutputTrigger2;
2029 }
2030
2031
2032 tmpcr2 &= ~TIM_CR2_MMS;
2033
2034 tmpcr2 |= sMasterConfig->MasterOutputTrigger;
2035
2036
2037 htim->Instance->CR2 = tmpcr2;
2038
2039 if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
2040 {
2041
2042 tmpsmcr &= ~TIM_SMCR_MSM;
2043
2044 tmpsmcr |= sMasterConfig->MasterSlaveMode;
2045
2046
2047 htim->Instance->SMCR = tmpsmcr;
2048 }
2049
2050
2051 htim->State = HAL_TIM_STATE_READY;
2052
2053 __HAL_UNLOCK(htim);
2054
2055 return HAL_OK;
2056 }
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069 HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
2070 const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig)
2071 {
2072
2073 uint32_t tmpbdtr = 0U;
2074
2075
2076 assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
2077 assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode));
2078 assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode));
2079 assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel));
2080 assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime));
2081 assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState));
2082 assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity));
2083 assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->BreakFilter));
2084 assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput));
2085 #if defined(TIM_BDTR_BKBID)
2086 assert_param(IS_TIM_BREAK_AFMODE(sBreakDeadTimeConfig->BreakAFMode));
2087 #endif
2088
2089
2090 __HAL_LOCK(htim);
2091
2092
2093
2094
2095
2096 MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);
2097 MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);
2098 MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);
2099 MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);
2100 MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);
2101 MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);
2102 MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);
2103 MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos));
2104 #if defined(TIM_BDTR_BKBID)
2105 MODIFY_REG(tmpbdtr, TIM_BDTR_BKBID, sBreakDeadTimeConfig->BreakAFMode);
2106 #endif
2107
2108 if (IS_TIM_BKIN2_INSTANCE(htim->Instance))
2109 {
2110
2111 assert_param(IS_TIM_BREAK2_STATE(sBreakDeadTimeConfig->Break2State));
2112 assert_param(IS_TIM_BREAK2_POLARITY(sBreakDeadTimeConfig->Break2Polarity));
2113 assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->Break2Filter));
2114 #if defined(TIM_BDTR_BKBID)
2115 assert_param(IS_TIM_BREAK2_AFMODE(sBreakDeadTimeConfig->Break2AFMode));
2116 #endif
2117
2118
2119 MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (sBreakDeadTimeConfig->Break2Filter << TIM_BDTR_BK2F_Pos));
2120 MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State);
2121 MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity);
2122 #if defined(TIM_BDTR_BKBID)
2123 MODIFY_REG(tmpbdtr, TIM_BDTR_BK2BID, sBreakDeadTimeConfig->Break2AFMode);
2124 #endif
2125 }
2126
2127
2128 htim->Instance->BDTR = tmpbdtr;
2129
2130 __HAL_UNLOCK(htim);
2131
2132 return HAL_OK;
2133 }
2134 #if defined(TIM_BREAK_INPUT_SUPPORT)
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146 HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
2147 uint32_t BreakInput,
2148 const TIMEx_BreakInputConfigTypeDef *sBreakInputConfig)
2149 {
2150 HAL_StatusTypeDef status = HAL_OK;
2151 uint32_t tmporx;
2152 uint32_t bkin_enable_mask;
2153 uint32_t bkin_polarity_mask;
2154 uint32_t bkin_enable_bitpos;
2155 uint32_t bkin_polarity_bitpos;
2156
2157
2158 assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
2159 assert_param(IS_TIM_BREAKINPUT(BreakInput));
2160 assert_param(IS_TIM_BREAKINPUTSOURCE(sBreakInputConfig->Source));
2161 assert_param(IS_TIM_BREAKINPUTSOURCE_STATE(sBreakInputConfig->Enable));
2162 if (sBreakInputConfig->Source != TIM_BREAKINPUTSOURCE_DFSDM1)
2163 {
2164 assert_param(IS_TIM_BREAKINPUTSOURCE_POLARITY(sBreakInputConfig->Polarity));
2165 }
2166
2167
2168 __HAL_LOCK(htim);
2169
2170 switch (sBreakInputConfig->Source)
2171 {
2172 case TIM_BREAKINPUTSOURCE_BKIN:
2173 {
2174 bkin_enable_mask = TIM1_AF1_BKINE;
2175 bkin_enable_bitpos = TIM1_AF1_BKINE_Pos;
2176 bkin_polarity_mask = TIM1_AF1_BKINP;
2177 bkin_polarity_bitpos = TIM1_AF1_BKINP_Pos;
2178 break;
2179 }
2180 case TIM_BREAKINPUTSOURCE_COMP1:
2181 {
2182 bkin_enable_mask = TIM1_AF1_BKCMP1E;
2183 bkin_enable_bitpos = TIM1_AF1_BKCMP1E_Pos;
2184 bkin_polarity_mask = TIM1_AF1_BKCMP1P;
2185 bkin_polarity_bitpos = TIM1_AF1_BKCMP1P_Pos;
2186 break;
2187 }
2188 case TIM_BREAKINPUTSOURCE_COMP2:
2189 {
2190 bkin_enable_mask = TIM1_AF1_BKCMP2E;
2191 bkin_enable_bitpos = TIM1_AF1_BKCMP2E_Pos;
2192 bkin_polarity_mask = TIM1_AF1_BKCMP2P;
2193 bkin_polarity_bitpos = TIM1_AF1_BKCMP2P_Pos;
2194 break;
2195 }
2196 case TIM_BREAKINPUTSOURCE_DFSDM1:
2197 {
2198 bkin_enable_mask = TIM1_AF1_BKDF1BK0E;
2199 bkin_enable_bitpos = TIM1_AF1_BKDF1BK0E_Pos;
2200 bkin_polarity_mask = 0U;
2201 bkin_polarity_bitpos = 0U;
2202 break;
2203 }
2204
2205 default:
2206 {
2207 bkin_enable_mask = 0U;
2208 bkin_polarity_mask = 0U;
2209 bkin_enable_bitpos = 0U;
2210 bkin_polarity_bitpos = 0U;
2211 break;
2212 }
2213 }
2214
2215 switch (BreakInput)
2216 {
2217 case TIM_BREAKINPUT_BRK:
2218 {
2219
2220 tmporx = htim->Instance->AF1;
2221
2222
2223 tmporx &= ~bkin_enable_mask;
2224 tmporx |= (sBreakInputConfig->Enable << bkin_enable_bitpos) & bkin_enable_mask;
2225
2226
2227 if (sBreakInputConfig->Source != TIM_BREAKINPUTSOURCE_DFSDM1)
2228 {
2229 tmporx &= ~bkin_polarity_mask;
2230 tmporx |= (sBreakInputConfig->Polarity << bkin_polarity_bitpos) & bkin_polarity_mask;
2231 }
2232
2233
2234 htim->Instance->AF1 = tmporx;
2235 break;
2236 }
2237 case TIM_BREAKINPUT_BRK2:
2238 {
2239
2240 tmporx = htim->Instance->AF2;
2241
2242
2243 tmporx &= ~bkin_enable_mask;
2244 tmporx |= (sBreakInputConfig->Enable << bkin_enable_bitpos) & bkin_enable_mask;
2245
2246
2247 if (sBreakInputConfig->Source != TIM_BREAKINPUTSOURCE_DFSDM1)
2248 {
2249 tmporx &= ~bkin_polarity_mask;
2250 tmporx |= (sBreakInputConfig->Polarity << bkin_polarity_bitpos) & bkin_polarity_mask;
2251 }
2252
2253
2254 htim->Instance->AF2 = tmporx;
2255 break;
2256 }
2257 default:
2258 status = HAL_ERROR;
2259 break;
2260 }
2261
2262 __HAL_UNLOCK(htim);
2263
2264 return status;
2265 }
2266 #endif
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329 HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap)
2330 {
2331
2332 assert_param(IS_TIM_REMAP_INSTANCE(htim->Instance));
2333 assert_param(IS_TIM_REMAP(Remap));
2334
2335 __HAL_LOCK(htim);
2336
2337 MODIFY_REG(htim->Instance->AF1, TIM1_AF1_ETRSEL_Msk, Remap);
2338
2339 __HAL_UNLOCK(htim);
2340
2341 return HAL_OK;
2342 }
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423 HAL_StatusTypeDef HAL_TIMEx_TISelection(TIM_HandleTypeDef *htim, uint32_t TISelection, uint32_t Channel)
2424 {
2425 HAL_StatusTypeDef status = HAL_OK;
2426
2427
2428 assert_param(IS_TIM_TISEL_INSTANCE(htim->Instance));
2429 assert_param(IS_TIM_TISEL(TISelection));
2430
2431 __HAL_LOCK(htim);
2432
2433 switch (Channel)
2434 {
2435 case TIM_CHANNEL_1:
2436 MODIFY_REG(htim->Instance->TISEL, TIM_TISEL_TI1SEL, TISelection);
2437 break;
2438 case TIM_CHANNEL_2:
2439 MODIFY_REG(htim->Instance->TISEL, TIM_TISEL_TI2SEL, TISelection);
2440 break;
2441 case TIM_CHANNEL_3:
2442 MODIFY_REG(htim->Instance->TISEL, TIM_TISEL_TI3SEL, TISelection);
2443 break;
2444 case TIM_CHANNEL_4:
2445 MODIFY_REG(htim->Instance->TISEL, TIM_TISEL_TI4SEL, TISelection);
2446 break;
2447 default:
2448 status = HAL_ERROR;
2449 break;
2450 }
2451
2452 __HAL_UNLOCK(htim);
2453
2454 return status;
2455 }
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468 HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels)
2469 {
2470
2471 assert_param(IS_TIM_COMBINED3PHASEPWM_INSTANCE(htim->Instance));
2472 assert_param(IS_TIM_GROUPCH5(Channels));
2473
2474
2475 __HAL_LOCK(htim);
2476
2477 htim->State = HAL_TIM_STATE_BUSY;
2478
2479
2480 htim->Instance->CCR5 &= ~(TIM_CCR5_GC5C3 | TIM_CCR5_GC5C2 | TIM_CCR5_GC5C1);
2481
2482
2483 htim->Instance->CCR5 |= Channels;
2484
2485
2486 htim->State = HAL_TIM_STATE_READY;
2487
2488 __HAL_UNLOCK(htim);
2489
2490 return HAL_OK;
2491 }
2492 #if defined(TIM_BDTR_BKBID)
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507 HAL_StatusTypeDef HAL_TIMEx_DisarmBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput)
2508 {
2509 HAL_StatusTypeDef status = HAL_OK;
2510 uint32_t tmpbdtr;
2511
2512
2513 assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
2514 assert_param(IS_TIM_BREAKINPUT(BreakInput));
2515
2516 switch (BreakInput)
2517 {
2518 case TIM_BREAKINPUT_BRK:
2519 {
2520
2521 tmpbdtr = READ_REG(htim->Instance->BDTR);
2522 if ((READ_BIT(tmpbdtr, TIM_BDTR_BKBID) == TIM_BDTR_BKBID) &&
2523 (READ_BIT(tmpbdtr, TIM_BDTR_MOE) == 0U))
2524 {
2525
2526 SET_BIT(htim->Instance->BDTR, TIM_BDTR_BKDSRM);
2527 }
2528 break;
2529 }
2530 case TIM_BREAKINPUT_BRK2:
2531 {
2532
2533 tmpbdtr = READ_REG(htim->Instance->BDTR);
2534 if ((READ_BIT(tmpbdtr, TIM_BDTR_BK2BID) == TIM_BDTR_BK2BID) &&
2535 (READ_BIT(tmpbdtr, TIM_BDTR_MOE) == 0U))
2536 {
2537
2538 SET_BIT(htim->Instance->BDTR, TIM_BDTR_BK2DSRM);
2539 }
2540 break;
2541 }
2542 default:
2543 status = HAL_ERROR;
2544 break;
2545 }
2546
2547 return status;
2548 }
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561 HAL_StatusTypeDef HAL_TIMEx_ReArmBreakInput(const TIM_HandleTypeDef *htim, uint32_t BreakInput)
2562 {
2563 HAL_StatusTypeDef status = HAL_OK;
2564 uint32_t tickstart;
2565
2566
2567 assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
2568 assert_param(IS_TIM_BREAKINPUT(BreakInput));
2569
2570 switch (BreakInput)
2571 {
2572 case TIM_BREAKINPUT_BRK:
2573 {
2574
2575 if (READ_BIT(htim->Instance->BDTR, TIM_BDTR_BKBID) == TIM_BDTR_BKBID)
2576 {
2577
2578
2579 tickstart = HAL_GetTick();
2580 while (READ_BIT(htim->Instance->BDTR, TIM_BDTR_BKDSRM) != 0UL)
2581 {
2582 if ((HAL_GetTick() - tickstart) > TIM_BREAKINPUT_REARM_TIMEOUT)
2583 {
2584
2585 if (READ_BIT(htim->Instance->BDTR, TIM_BDTR_BKDSRM) != 0UL)
2586 {
2587 return HAL_TIMEOUT;
2588 }
2589 }
2590 }
2591 }
2592 break;
2593 }
2594
2595 case TIM_BREAKINPUT_BRK2:
2596 {
2597
2598 if (READ_BIT(htim->Instance->BDTR, TIM_BDTR_BK2BID) == TIM_BDTR_BK2BID)
2599 {
2600
2601
2602 tickstart = HAL_GetTick();
2603 while (READ_BIT(htim->Instance->BDTR, TIM_BDTR_BK2DSRM) != 0UL)
2604 {
2605 if ((HAL_GetTick() - tickstart) > TIM_BREAKINPUT_REARM_TIMEOUT)
2606 {
2607
2608 if (READ_BIT(htim->Instance->BDTR, TIM_BDTR_BK2DSRM) != 0UL)
2609 {
2610 return HAL_TIMEOUT;
2611 }
2612 }
2613 }
2614 }
2615 break;
2616 }
2617 default:
2618 status = HAL_ERROR;
2619 break;
2620 }
2621
2622 return status;
2623 }
2624 #endif
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652 __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
2653 {
2654
2655 UNUSED(htim);
2656
2657
2658
2659
2660 }
2661
2662
2663
2664
2665
2666 __weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim)
2667 {
2668
2669 UNUSED(htim);
2670
2671
2672
2673
2674 }
2675
2676
2677
2678
2679
2680
2681 __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
2682 {
2683
2684 UNUSED(htim);
2685
2686
2687
2688
2689 }
2690
2691
2692
2693
2694
2695
2696 __weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim)
2697 {
2698
2699 UNUSED(htim);
2700
2701
2702
2703
2704 }
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730 HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(const TIM_HandleTypeDef *htim)
2731 {
2732 return htim->State;
2733 }
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745 HAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(const TIM_HandleTypeDef *htim, uint32_t ChannelN)
2746 {
2747 HAL_TIM_ChannelStateTypeDef channel_state;
2748
2749
2750 assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN));
2751
2752 channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN);
2753
2754 return channel_state;
2755 }
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775 void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma)
2776 {
2777 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2778
2779
2780 htim->State = HAL_TIM_STATE_READY;
2781
2782 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2783 htim->CommutationCallback(htim);
2784 #else
2785 HAL_TIMEx_CommutCallback(htim);
2786 #endif
2787 }
2788
2789
2790
2791
2792
2793
2794 void TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma)
2795 {
2796 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2797
2798
2799 htim->State = HAL_TIM_STATE_READY;
2800
2801 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2802 htim->CommutationHalfCpltCallback(htim);
2803 #else
2804 HAL_TIMEx_CommutHalfCpltCallback(htim);
2805 #endif
2806 }
2807
2808
2809
2810
2811
2812
2813
2814 static void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma)
2815 {
2816 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2817
2818 if (hdma == htim->hdma[TIM_DMA_ID_CC1])
2819 {
2820 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
2821
2822 if (hdma->Init.Mode == DMA_NORMAL)
2823 {
2824 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
2825 }
2826 }
2827 else if (hdma == htim->hdma[TIM_DMA_ID_CC2])
2828 {
2829 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
2830
2831 if (hdma->Init.Mode == DMA_NORMAL)
2832 {
2833 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
2834 }
2835 }
2836 else if (hdma == htim->hdma[TIM_DMA_ID_CC3])
2837 {
2838 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
2839
2840 if (hdma->Init.Mode == DMA_NORMAL)
2841 {
2842 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);
2843 }
2844 }
2845 else
2846 {
2847
2848 }
2849
2850 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2851 htim->PWM_PulseFinishedCallback(htim);
2852 #else
2853 HAL_TIM_PWM_PulseFinishedCallback(htim);
2854 #endif
2855
2856 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
2857 }
2858
2859
2860
2861
2862
2863
2864 static void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma)
2865 {
2866 TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2867
2868 if (hdma == htim->hdma[TIM_DMA_ID_CC1])
2869 {
2870 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
2871 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);
2872 }
2873 else if (hdma == htim->hdma[TIM_DMA_ID_CC2])
2874 {
2875 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
2876 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);
2877 }
2878 else if (hdma == htim->hdma[TIM_DMA_ID_CC3])
2879 {
2880 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
2881 TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);
2882 }
2883 else
2884 {
2885
2886 }
2887
2888 #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
2889 htim->ErrorCallback(htim);
2890 #else
2891 HAL_TIM_ErrorCallback(htim);
2892 #endif
2893
2894 htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
2895 }
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909 static void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState)
2910 {
2911 uint32_t tmp;
2912
2913 tmp = TIM_CCER_CC1NE << (Channel & 0xFU);
2914
2915
2916 TIMx->CCER &= ~tmp;
2917
2918
2919 TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0xFU));
2920 }
2921
2922
2923
2924
2925 #endif
2926
2927
2928
2929
2930
2931
2932