OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2788|回复: 1

mini的板子定时器3终端初始化死机

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2018-11-24
在线时间
1 小时
发表于 2018-11-24 18:59:31 | 显示全部楼层 |阅读模式
8金钱
本帖最后由 东方白 于 2018-11-24 21:28 编辑

用mini的板子做一个温度实时显示系统,使用定时器3做采样频率的控制。
在中断初始化的时候程序总是卡死在NVIC_Init(&NVIC_InitStructure);这里!
程序如下:
void TIM3_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

TIM_TimeBaseStructure.TIM_Period=arr;
TIM_TimeBaseStructure.TIM_Prescaler=psc;
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;  
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  LED1=!LED1;
NVIC_Init(&NVIC_InitStructure);  


TIM_Cmd(TIM3, ENABLE);
         
}

LED1=!LED1;在 NVIC_Init(&NVIC_InitStructure);  前灯可以点亮,在他之后就不能被点亮。
我判断程序卡死在了 NVIC_Init(&NVIC_InitStructure);  这里


中断服务函数:
void TIM3_IRQHandler(void)   //
{
/*  unsigned int tp;
   unsigned char i;
   unsigned int D;
   unsigned char  DisplayData[5];   
   unsigned char  smgduan[10]=
    {
     '0','1','2','3','4','5','6','7','8','9'
    };   */
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  {
  /* TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  
   tp=DS18B20_Get_Temp(); //
   LED1=!LED1;    //
   D=282-tp/20;
   DisplayData[0]=smgduan[tp/1000];  //
   DisplayData[1]=smgduan[tp%1000/100];
   DisplayData[2]='.';
   DisplayData[3]=smgduan[tp%100/10];
   DisplayData[4]=smgduan[tp%10];
   GUI_sprintf_char(138,50, '+', 0xf800,0);
   GUI_sprintf_string(90,50,"TEMP:", 0xffe0,0x7bef);  
   for(i=0;i<5;i++)
       {
     GUI_sprintf_char(146+8*i,50,DisplayData, 0xf800,0);   
  
  }
   sprintf_zhizhen(37,D,WHITE);   
   
  }
   
}


注释掉中断服务函数if内的内容,程序依旧会卡死。

主函数:
int main(void)
{
  unsigned int x,y;
  delay_init();
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   //·&Ouml;×é
  //USAT_Init();
  LED_Init();
  LCD_Init();      
  LCD_Scan_Dir();  
   TIM3_Int_Init(4999,7199);
  delay_ms(20);

GUI_clearscreen(WHITE);
GUI_sprintf_HZ(25, 30, 0x07ff,WHITE);
delay_ms(500);
delay_ms(500);
delay_ms(500);
  GUI_clearscreen(WHITE);
  
while(1)
{
此处省略;

}

}

不知道如何解决!希望有人可以指出问题。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2018-11-24
在线时间
1 小时
 楼主| 发表于 2018-11-24 21:26:52 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 12:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表