1回答

1收藏

STM32F4 timer example

STMCU STMCU 5416 人阅读 | 1 人回复 | 2017-02-04

本帖最后由 crazy78 于 2017-3-8 00:35 编辑
  1. #include "stm32f4xx.h"                 
  2. #include "transceiver_internal.h"

  3. uint8_t state = 0;
  4. void TIM1_UP_TIM10_IRQHandler()
  5. {
  6.         if (TIM10->SR &0x01)
  7.         TIM10->SR &= ~ 0x01;
  8. {
  9.         switch(state)
  10.         {
  11.                 case STATE_IS_0:
  12.                 {
  13.                         TIM_SetAutoreload(TIM10,500);
  14.                         GPIOG->ODR = 0x00006000;
  15.                         state = STATE_IS_1;
  16.                 }
  17.                 break;
  18.     case STATE_IS_1:
  19.                 {
  20.                         TIM_SetAutoreload(TIM10,500);
  21.                         GPIOG->ODR = 0x00000000;
  22.                         state = STATE_IS_0;
  23.                 }
  24.                 break;
  25.                 default:
  26.                 break;
  27.         }
  28. }
  29. }
  30. int main()
  31. {
  32.    RCC->AHB1ENR |= 0x00000040;//GPIOG
  33.    RCC->APB2ENR |= 0x00020000;  // Timer
  34.    GPIOG->MODER = 0x14000000; //
  35.    GPIOG->OSPEEDR = 0x3C000000; //GPIOG 13,14
  36.    TIM10->CR1=0x0080; //
  37.    TIM10->PSC =42000-1; // prescaler
  38.    TIM10->ARR = 80; //
  39.    TIM10->DIER=0x0001;
  40.    NVIC->ISER[0] = 0x02000000;//
  41.    TIM10->CR1|=0x0001; // Counter Enable
  42.         
  43.         while(1)
  44.         {
  45.         }
  46. }
复制代码
  1. #ifndef  TRANCEIVER_INTERNAL_H_
  2. #define  TRANCEIVER_INTERNAL_H_

  3. enum{
  4.         
  5. STATE_IS_0,
  6.         STATE_IS_1,
  7.         STATE_IS_2,
  8.         STATE_IS_3,
  9.         STATE_IS_4,
  10.         STATE_IS_5,
  11.         STATE_IS_6,
  12.         STATE_IS_7,
  13.         STATE_IS_8,
  14.         STATE_IS_9,
  15.         STATE_IS_10,
  16.         STATE_IS_11,
  17.         STATE_IS_12,
  18.         STATE_IS_13,
  19.         STATE_IS_14,
  20.         STATE_IS_15,
  21.         STATE_IS_16,
  22.         STATE_IS_17,
  23.         STATE_IS_18,
  24.         STATE_IS_19,
  25.         STATE_IS_20,
  26.         STATE_IS_21,
  27.         STATE_IS_22,
  28.         STATE_IS_23,
  29.         STATE_IS_24,
  30.         STATE_IS_25,
  31.         STATE_IS_26,
  32. };

  33. #endif
复制代码
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

crazy78

发表于 2017-2-13 02:52:32 | 只看该作者

  1. #include "stm32f4xx.h"                  // Device header


  2. void Tim1(uint16_t PSC1,uint32_t ARR1)
  3.            {
  4.             RCC->APB2ENR |= 0x00000001;
  5.             TIM1->ARR = ARR1;   
  6.             TIM1->PSC = PSC1;   
  7.             TIM1->SR &= ~0x0001;
  8.             TIM1->DIER |= 0x0001;
  9.             NVIC->ISER[0] = 0x02000000;
  10.            // NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
  11. }

  12. void Tim2(uint16_t PSC2,uint32_t ARR2)
  13.            {
  14.             RCC->APB1ENR |= 0x00000001;
  15.             TIM2->ARR = ARR2;   
  16.             TIM2->PSC = PSC2;
  17.             TIM2->SR &= ~0x0001;
  18.             TIM2->DIER |= 0x0001;
  19.             NVIC->ISER[0] = 0x10000000;
  20.             //NVIC_EnableIRQ(TIM2_IRQn);
  21. }

  22. void Tim3(uint16_t PSC3,uint32_t ARR3)
  23.            {
  24.             RCC->APB1ENR |= 0x00000002 ;
  25.             TIM3->ARR = ARR3;   
  26.             TIM3->PSC = PSC3;  
  27.             TIM3->SR &= ~0x0001;
  28.             TIM3->DIER |= 0x0001;
  29.             NVIC->ISER[0] = 0x20000000;
  30.             //NVIC_EnableIRQ(TIM3_IRQn);
  31. }
  32. void Tim4(uint16_t PSC4,uint32_t ARR4)
  33.            {
  34.             RCC->APB1ENR |= 0x00000004 ;
  35.             TIM4->ARR = ARR4;   
  36.             TIM4->PSC = PSC4;  
  37.             TIM4->SR &= ~0x0001;
  38.             TIM4->DIER |= 0x0001;
  39.             NVIC->ISER[0] = 0x40000000;
  40.             //NVIC_EnableIRQ(TIM4_IRQn);
  41. }
  42. void Tim5(uint16_t PSC5,uint32_t ARR5)
  43.            {
  44.             RCC->APB1ENR |= 0x00000008 ;
  45.             TIM5->ARR = ARR5;   
  46.             TIM5->PSC = PSC5;   
  47.             TIM5->SR &= ~0x0001;
  48.             TIM5->DIER |= 0x0001;
  49.            NVIC->ISER[1] = 0x00040000;
  50.            // NVIC_EnableIRQ(TIM5_IRQn);
  51.         }
  52.              void Set_GPIO()
  53.                       {
  54.                  // Set Speed GPIOD is 100Mhz       
  55.                  GPIOD->OSPEEDR         = 0xFFFF;
  56.                   // Open clock to GPIOD                                               
  57.                   RCC->AHB1ENR    |=   0x08;
  58.                   GPIOD->MODER    =    0x55000400;  // Set GPIO  D.15,D.14,D.13,D.12,D.5 is Output             
  59.                   GPIOD->ODR    =  0x20;//
  60. }

  61. //.................... Timer1........................................                                       
  62. void TIM1_UP_TIM10_IRQHandler(void){
  63.     TIM1->SR &= 0;
  64.     GPIOD->ODR    ^=0x20;
  65. }                                               
  66.                                                
  67. //....................Timer2........................................
  68. void TIM2_IRQHandler(void){
  69.     TIM2->SR &= 0;
  70.     GPIOD->ODR    ^=0x8000;
  71. }
  72. //....................Timer3........................................
  73. void TIM3_IRQHandler(void){
  74.    TIM3->SR &= 0;
  75.    GPIOD->ODR    ^=0x4000;
  76. }
  77. //.................... Timer4........................................
  78. void TIM4_IRQHandler(void){
  79.    TIM4->SR &= 0;
  80.    GPIOD->ODR    ^=0x2000;
  81. }
  82. //.................... Timer5........................................
  83. void TIM5_IRQHandler(void){
  84.    TIM1->SR &= 0;
  85.    GPIOD->ODR    ^=0x1000;
  86. }       

  87. int main(void)
  88.                    {
  89.                   
  90.                     Set_GPIO();
  91.                     Tim1(5000,2000);    // Bus Clock 90Mhz  
  92.                     Tim2(5000,2000);    // Bus Clock 45Mhz  
  93.                     Tim3(5000,4000);    // Bus Clock 45Mhz  
  94.                     Tim4(5000,8000);    // Bus Clock 45Mhz
  95.                     Tim5(5000,16000);  // Bus Clock 45Mhz  
  96.                     TIM1->CR1 = 0x0001;  //  Timer1 counter enable
  97.                     TIM2->CR1 = 0x0001;  //  Timer2  
  98.                     TIM3->CR1 = 0x0001;  //  Timer3  
  99.                     TIM4->CR1 = 0x0001;  //  Timer4  
  100.                     TIM5->CR1 = 0x0001;  //  Timer5  
  101.                     while(1)
  102.                               {
  103.                               
  104.                               }
  105. }
复制代码
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条