zhouhuoyan的个人主页

http://bbs.ntpcb.com/u.php?uid=97051  [收藏] [复制]

zhouhuoyan

  • 15

    关注

  • 13

    粉丝

  • 118

    访客

  • 等级:二级逆天
  • 总积分:3304
  • 男,1988-07-24

最后登录:2024-04-25

更多资料

日志

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;
分类:默认分类|回复:0|浏览:367|全站可见|转载
 

Powered by phpwind v8.7.1 Certificate Copyright Time now is:04-27 05:13
©2003-2011 逆天PCB论坛 版权所有 Gzip disabled 粤ICP备14042835号 问题咨询 | 广告业务点这里