stm32的外部中断过程出错

在外部中断过程中,设置一个计数变量number,在中断服务函数中执行

         buf1[number]   = (BUF&0XFF);
         buf1[number+1] =((BUF>>8)&0XFF);
         number=number+2;

在主函数中判断

            if(number==1400)
            {
                      number=2;
                }

按理说在中断过程中当number计数到1400时主函数重新复位,但是在实际的过程中发现开始几次是可以正常运行的,但运行到后面number就无法复位导致程序卡死,请问一下有人遇到过这种情况吗

img

可能再一个主循环中进了多次中断,导致执行不到复位操作,可改成

 if(number>=1400)
 {
      number=2;
  }

将主函数和中断服务函数截图看下?打印放在哪个函数里?

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/922406
  • 这篇博客你也可以参考下:stm32串口自定义协议接收一串十六进制数据(将其中两个字节转化为十进制数据)+部分串口基础知识
  • 除此之外, 这篇博客: 基于STM32的多点温湿度无线传输检测及控制(基于单片机的蔬菜大棚温湿度智能控制系统)中的 二、研究工作的主要内容 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1)自制STM32最小系统应用,完成电路板设计与打板,焊接
    (2)利用数字式温湿度传感器DHT22完成多点温度检测
    (3)利用土壤湿度传感器检测了多点土壤湿度。
    (4)基于STM32并利用NRE24L01无线数据传输。
    (5)完成系统继电器控制风扇与水泵的设计
    (6)利用语音模块完成了对实时数据声音提示。
    (7)利用了OLED显示屏显示数据

    本系统以STM32单片机最小系统为核心,其中数据采集、传输、显示、语音提示基于STM32的平台。数据采集通过DHT22读取数字量温度值,并通过NRF24L01模块无线传输至数据数据处理终端,同时终端也进行相应温度采集以实现多点温度检测的效果。同理,土壤湿度采集也是如此。
    之后,在数据处理终端进行数据比较处理,一方面通过语音模块实时将数据读出,另一方面也将数据显示在OLED屏上。
    根据数据处理终端处理后的数据,控制继电器开合与关断,实现对风扇降温,水泵灌溉的反馈处理,做到闭环控制。

  • 以下回答由chatgpt基于相关博客总结生成:

    对于原问题,请提供更具体的代码以及中断服务函数的内容和具体用法,否则无法提供解决方案。

在中断里改变的全局变量,在声明的时候要加上volatile,
另外就是把==1400改成>=1400