1. <th id="uou7b"></th>
        2. <tbody id="uou7b"></tbody>
          <tbody id="uou7b"></tbody>
        3. <span id="uou7b"></span>

          <tbody id="uou7b"></tbody>
          <em id="uou7b"></em>

          專注電子技術學習與研究
          當前位置:單片機教程網 >> STM32 >> 瀏覽文章

          STM8S103移植到STM8S207時TIMER2定時器不能進入中斷的問題

          作者:佚名   來源:轉自十四一心的空間   點擊數:  更新時間:2014年09月04日   【字體:

          STM8S103的引腳封裝圖如下


          是一個20管腳的51類型單片機,8Kflash 1kRAM。
          STM8S207引腳封裝如下

          一個48引腳64KFLASH和6K的RAM,也是51單片機,但串口和定時器的功能多了。
          從手冊看,timer1是ADVANCED 定時器,timer 2 3是通用型定時器。
          在移植過程中以為只要改動器件類型同時在stm8s.h內將
          #ifndef __STM8S_H
          #define __STM8S_H
           
          #define STM8S207   //STM8S103  
          103注釋掉并開通207的宏定義。
          定時器初始化如下
          void TIM1_Init(void)
          {
                  TIM1_DeInit();                                          //定時器1相關寄存器復位
                 
                  TIM1_TimeBaseInit(7, TIM1_COUNTERMODE_UP, 9999, 0);     //中斷時間10ms  
                  // TIM1_TimeBaseInit(8, TIM1_COUNTERMODE_UP, 1500, 0);     //中斷時間ms  
                  TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);                  //使能中斷  
                  TIM1_Cmd(ENABLE); //使能TIM1
          }
           
          void TIM2_Init(void)
          {
                TIM2_DeInit();
                TIM2_TimeBaseInit(TIM2_PRESCALER_1, 125*20);//20ms中斷
                TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);          //使能中斷
                ITC_SetSoftwarePriority(ITC_IRQ_TIM2_OVF, ITC_PRIORITYLEVEL_2);//設置d定時器中斷優先級 2
                TIM2_Cmd(ENABLE);//使能定時器1 
           
          }
          但是通過單步調試,確無法進入中斷
          #pragma vector=ITC_IRQ_TIM2_OVF + 2
          __interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void)
          {     
             
              TIM2_ClearFlag(TIM2_FLAG_UPDATE);       //清定時器1更新中斷標志
           
              
          }
          觀察寄存器發現 TIMER2 的寄存器值TIMER2_IER無法開通中斷也就是使能中斷 ,手冊和register都顯示timer2 的寄存器很少。TIMER1和TIMER2的比較如下



          后來在stm8s_timer2.h里發現了端倪
          typedef struct TIM2_struct
          {
            __IO uint8_t CR1;  
           // __IO uint8_t RESERVE1;
           // __IO uint8_t RESERVE2;  //注釋掉用于STM8S207  否則用于stm8s103
            __IO uint8_t IER;  
            __IO uint8_t SR1;  
            __IO uint8_t SR2;  
            __IO uint8_t EGR;  
            __IO uint8_t CCMR1;
            __IO uint8_t CCMR2;
            __IO uint8_t CCMR3;
            __IO uint8_t CCER1;
            __IO uint8_t CCER2;
            __IO uint8_t CNTRH;
            __IO uint8_t CNTRL;
            __IO uint8_t PSCR;  
            __IO uint8_t ARRH;  
            __IO uint8_t ARRL;  
            __IO uint8_t CCR1H;
            __IO uint8_t CCR1L;
            __IO uint8_t CCR2H;
            __IO uint8_t CCR2L;
            __IO uint8_t CCR3H;
            __IO uint8_t CCR3L;
          }
          TIM2_TypeDef;
          也就是在給timer2 的寄存器賦值時由于多了兩個沒用的,將數值頂替了,注釋掉可以了。
          關閉窗口

          相關文章

          日日噜噜夜夜狠狠久久无码区

              1. <th id="uou7b"></th>
              2. <tbody id="uou7b"></tbody>
                <tbody id="uou7b"></tbody>
              3. <span id="uou7b"></span>

                <tbody id="uou7b"></tbody>
                <em id="uou7b"></em>