OpenEdv-开源电子网

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

串口中断与定时器中断冲突

[复制链接]

6

主题

8

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-9-3
在线时间
6 小时
发表于 2019-11-27 09:25:02 | 显示全部楼层 |阅读模式
1金钱
  1. static void NVIC_Configuration(void)
  2. {
  3.   NVIC_InitTypeDef NVIC_InitStructure;
  4.   
  5. //  /* 嵌套向量中断控制器组选择 */
  6. //        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  7.   
  8.   /* 配置USART为中断源 */
  9.   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  10.   /* 抢断优先级*/
  11.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  12.   /* 子优先级 */
  13.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  14.   /* 使能中断 */
  15.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  16.   /* 初始化配置NVIC */
  17.   NVIC_Init(&NVIC_InitStructure);
  18. }
复制代码
串口中断
  1. void Timerx_Init(u16 arr,u16 psc)
  2. {
  3.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  4.         NVIC_InitTypeDef NVIC_InitStructure;

  5.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
  6.         //定时器初始化                                           //arr,psc
  7.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         计数到5000为500ms
  8.         TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
  9.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim 分频因子
  10.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  11.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

  12.         TIM_ITConfig(  //使能或者失能指定的TIM中断         允许更新中断
  13.                 TIM4, //TIM2
  14.                 TIM_IT_Update  |  //TIM 更新(溢出)中断                  
  15.                 TIM_IT_Trigger,   //TIM 触发中断   (捕获中断等)                                        地址值         ((uint16_t)0x0040)         
  16.                 ENABLE  //使能
  17.                 );
  18.         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中断
  19.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级1级
  20.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
  21.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  22.         NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

  23.         TIM_Cmd(TIM4, ENABLE);  //使能TIMx(定时器)外设 开启定时器
  24. }
复制代码
定时器中断未开启定时器中断的话,串口中断可以正常收发。
  1. void TIM4_IRQHandler(void)   
  2. {
  3. //        u8 showstr[StrMax]={0};
  4.         if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
  5.         {
  6.                 TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源

  7.                 if(START_FLAG)
  8.                 {
  9. //                        LED1_Flash(3,100);
  10.                         count++;
  11.                         if(count>=10*SweepTime)
  12.                         {
  13.                                 count=0;
  14.                                 count1++;
  15.                                 NowFre = SweepMinFre+SweepStepFre*count1;
  16.                                 if(NowFre>SweepMaxFre) count1 = 0;
  17.                                 delay_ms(5);
  18.                                 ADC_Read();                                                                                                                                //读值
  19.                         }
  20.                 }
  21.         }
  22. }
复制代码
以上为定时器中断函数ADC_Read()函数里面调用了串口发送程序。
一开始通过串口发送开启定时器之后,便一直在定时器中断服务函数里,不断的执行ADC_Read函数,在ADC_Read函数里的串口发送函数不断向上位机发送数据,而无法再次接收到上位机通过串口发送给单片机的指令。
如何才能接收到上位机通过串口发送给单片机的指令?


最佳答案

查看完整内容[请看2#楼]

在中断写一个标志位 然后在主函数判断这个标志位 执行 ADC_Read()函数
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14410
金钱
14410
注册时间
2018-8-3
在线时间
1156 小时
发表于 2019-11-27 09:25:03 | 显示全部楼层
在中断写一个标志位   然后在主函数判断这个标志位 执行 ADC_Read()函数
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 03:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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