日志
stm8L151c8t6中断问题
2020-10-05 23:13
以前用STM8L151都是用库,现在改成用寄存器的方式,但用寄存器的方式开不了总中断,一开程序就死了。
后来查到发现开发定时器4中断,我把其它所有程序都屏蔽了,于是在网上找,意思就是开了中断,但是中断服务程序没有写会有这个现象,但是我是把中断服务程序写了也不行,百思不得其解。 是不是我中断入口地址不对,但是自己写的话也是按iostm8l151c8.h定义的向量号。不知是什么问题,有没有大神帮忙解答一下。我贴上代码 //TIM4中断处理函数 #pragma vector=TIM4_UIF_vector __interrupt void TIM4_UIF_IRQHandler(void) { unsigned char i = 0; i++; TIM4_SR1=0x00; if(i==122) { i=0; } } //TIM4初始化 void Init_Timer4(void) { CLK_PCKENR1=0x04; //L系列外设时钟默认关闭,需打开 TIM4_EGR=0x01; //计数器更新,可省略 TIM4_PSCR=0x07;//分频值(2^7)/8M=16us,16us*255*122=500ms TIM4_CNTR=255;//计数器值 TIM4_ARR=255;//自动重装的值 TIM4_CR1=0x01;//使能计数器 TIM4_IER=0x01;//更新中断使能 } void uart3_init(unsigned long baudrate) { unsigned int baud; baud = 16000000 / 8 / baudrate; //设定串口相应波特率与串口时钟的分频数 CLK_PCKENR3_bit.PCKEN34 = 1; //使能USART3模块时钟 //CLK_PCKENR3_PCKEN34 = 1; // PE6:Tx PE7:Rx PE_CR1_bit.C16 = 1; PE_CR1_bit.C17 = 1; USART3_CR1 = 0x00; // 1个起始位,8个数据位 无校验.并关闭串口 USART3_CR3 = 0x00; // 1个停止位 //先写BRR2 , 再写BRR1 USART3_BRR2 = ((unsigned char)((baud & 0xf000) >> 8 )) | ((unsigned char)(baud & 0x000f));//先写波特比率的高4位与低4位 USART3_BRR1 = ((unsigned char)((baud & 0x0ff0) >> 4));//后写波特比率的中间8位 //设置波特率 //波特率设置为9600 // 2000000/9600=208 //2000000是此时系统的主时钟频率,默认8分频,16M/8=2M //208(DEC)=00D0(HEX) //USART3_BRR2 =0x00;//the BRR2 should be programmed before BRR1 //USART3_BRR1 =0x0D; |