查看: 4515|回复: 1

STM32F4 timer example

[复制链接]
  • TA的每日心情
    慵懒
    2018-11-14 04:19
  • 签到天数: 46 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2017-2-4 14:10:23 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-11-14 04:19
  • 签到天数: 46 天

    连续签到: 1 天

    [LV.5]常住居民I

     楼主| 发表于 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. }
    复制代码
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 03:46 , Processed in 0.119654 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.