乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用stm32主從門(mén)控模式精確控制脈沖個(gè)數(shù)

       denvice 2018-08-04

      1,主從門(mén)控模式的介紹

      STM32的每個(gè)定時(shí)器都可以由另一個(gè)定時(shí)器觸發(fā)啟動(dòng)定時(shí)器一般是通過(guò)軟件設(shè)置而啟動(dòng),STM32的每個(gè)定時(shí)器也可以通過(guò)外部信號(hào)觸發(fā)而啟動(dòng),還可以通過(guò)另外一個(gè)定時(shí)器的某一個(gè)條件被觸發(fā)而啟動(dòng).這里所謂某一個(gè)條件可以是定時(shí)到時(shí)、定時(shí)器超時(shí)、比較成功等許多條件.這種通過(guò)一個(gè)定時(shí)器觸發(fā)另一個(gè)定時(shí)器的工作方式稱為定時(shí)器的同步,發(fā)出觸發(fā)信號(hào)的定時(shí)器工作于主模式,接受觸發(fā)信號(hào)而啟動(dòng)的定時(shí)器工作于從模式。


      從這個(gè)圖中可以TIM3(master)控制TIM1(slave)需要將TIM1的ITR設(shè)置為ITR2

      2,使用主從門(mén)控模式輸出如下要求的波形


      使用TIM3的CH1控制TIM1的CH1和CH2,每一個(gè)波的周期是25us,一組波的頻率是10HZ

      3,TIM的配置

      TIM3:





      從3,



      4,代碼實(shí)現(xiàn)

      使用的芯片是stm32f051k6u6,HCLK= 48MHZ

      1. /* TIM3 init function */
      2. static void MX_TIM3_Init(void)
      3. {

      4. TIM_MasterConfigTypeDef sMasterConfig;
      5. TIM_OC_InitTypeDef sConfigOC;

      6. htim3.Instance = TIM3;
      7. htim3.Init.Prescaler = 480-1;
      8. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
      9. htim3.Init.Period = 10020-1; //100ms一組
      10. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
      11. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
      12. if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
      13. {
      14. Error_Handler();
      15. }

      16. sMasterConfig.MasterOutputTrigger = TIM_TRGO_OC1REF;
      17. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
      18. if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
      19. {
      20. Error_Handler();
      21. }

      22. sConfigOC.OCMode = TIM_OCMODE_PWM1;
      23. sConfigOC.Pulse = 25;//10個(gè)波
      24. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
      25. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
      26. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
      27. {
      28. Error_Handler();
      29. }

      30. HAL_TIM_MspPostInit(&htim3);

      31. }

      1. /* TIM1 init function */
      2. static void MX_TIM1_Init(void)
      3. {

      4. TIM_SlaveConfigTypeDef sSlaveConfig;
      5. TIM_MasterConfigTypeDef sMasterConfig;
      6. TIM_OC_InitTypeDef sConfigOC;
      7. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;

      8. htim1.Instance = TIM1;
      9. htim1.Init.Prescaler = 48-1;
      10. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
      11. htim1.Init.Period = 25-1;
      12. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
      13. htim1.Init.RepetitionCounter = 0;
      14. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
      15. if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
      16. {
      17. Error_Handler();
      18. }

      19. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
      20. {
      21. Error_Handler();
      22. }

      23. sSlaveConfig.SlaveMode = TIM_SLAVEMODE_GATED;
      24. sSlaveConfig.InputTrigger = TIM_TS_ITR2; //TIM3 control TIM1
      25. if (HAL_TIM_SlaveConfigSynchronization(&htim1, &sSlaveConfig) != HAL_OK)
      26. {
      27. Error_Handler();
      28. }

      29. sMasterConfig.MasterOutputTrigger = TIM_TRGO_OC1REF;
      30. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
      31. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
      32. {
      33. Error_Handler();
      34. }

      35. sConfigOC.OCMode = TIM_OCMODE_PWM1;
      36. sConfigOC.Pulse = 12;
      37. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
      38. sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
      39. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
      40. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
      41. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
      42. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
      43. {
      44. Error_Handler();
      45. }

      46. sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
      47. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
      48. {
      49. Error_Handler();
      50. }

      51. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
      52. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
      53. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
      54. sBreakDeadTimeConfig.DeadTime = 0;
      55. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
      56. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
      57. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
      58. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
      59. {
      60. Error_Handler();
      61. }

      62. HAL_TIM_MspPostInit(&htim1);

      63. }

      在main函數(shù)中:

      1. HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);

      2. HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);

      3. HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);

      在剛上電的時(shí)候PIN腳的電平我們可以在初始的時(shí)候拉高或者拉低:

          GPIO_InitStruct.Pull = GPIO_PULLDOWN;

      但是PWM波輸出停止之后的PIN腳的電平我們不容易控制,他跟PWM波停止時(shí)的電平狀態(tài)相關(guān),可以使用PIN重新初始化的方式,但是需要耗費(fèi)較長(zhǎng)的時(shí)間。



        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多