STM8S103的引腳封裝圖如下

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

一個(gè)48引腳64KFLASH和6K的RAM,也是51單片機(jī),但串口和定時(shí)器的功能多了。
從手冊(cè)看,timer1是ADVANCED 定時(shí)器,timer 2 3是通用型定時(shí)器。
在移植過程中以為只要改動(dòng)器件類型同時(shí)在stm8s.h內(nèi)將
#ifndef __STM8S_H
#define __STM8S_H
#define STM8S207 //STM8S103
103注釋掉并開通207的宏定義。
定時(shí)器初始化如下
void TIM1_Init(void)
{
TIM1_DeInit(); //定時(shí)器1相關(guān)寄存器復(fù)位
TIM1_TimeBaseInit(7, TIM1_COUNTERMODE_UP, 9999, 0); //中斷時(shí)間10ms
// TIM1_TimeBaseInit(8, TIM1_COUNTERMODE_UP, 1500, 0); //中斷時(shí)間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);//設(shè)置d定時(shí)器中斷優(yōu)先級(jí) 2
TIM2_Cmd(ENABLE);//使能定時(shí)器1
}
但是通過單步調(diào)試,確無法進(jìn)入中斷
#pragma vector=ITC_IRQ_TIM2_OVF + 2
__interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void)
{
TIM2_ClearFlag(TIM2_FLAG_UPDATE); //清定時(shí)器1更新中斷標(biāo)志
}
觀察寄存器發(fā)現(xiàn) TIMER2 的寄存器值TIMER2_IER無法開通中斷也就是使能中斷 ,手冊(cè)和register都顯示timer2 的寄存器很少。TIMER1和TIMER2的比較如下

后來在stm8s_timer2.h里發(fā)現(xiàn)了端倪
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 的寄存器賦值時(shí)由于多了兩個(gè)沒用的,將數(shù)值頂替了,注釋掉可以了。