rf射频数据收发芯片的一个数据接收指示引脚连接stm32的一个gpio口,设置为中断口。当rf接收到数据的时候,数据接收指示引脚由高电平变为低电平,所以中断配置里面配置的是IPU,下降沿触发。系统复位后,发送模块没有发送数据,也就是说这个接收模块没有接收到数据,这个中断口根本不会触发立马。可是实际上是一旦复位,在线调试发现k=100,说明进入中断服务函数,不得其解,大佬帮忙看看是不是配置错误呢。中断代码如下:

#include "wakeup_interrupt.h"

extern uint8_t Signalll;
uint8_t g_RF24L01RxBuffer[ 32 ] = { 0 }; 
uint32_t t=0,i = 0,n=0,k=0;
const char *g_changeok = "changeok";
const char *g_wakingup = "wakingup";

void wakeup_interrupt_Configuration(void)
{
    GPIO_InitTypeDef    GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA , GPIO_PinSource12);
}

//*****外部事件的配置函数
void EXTI_Configuration(void)
{
    EXTI_InitTypeDef EXTI_InitStructure;

/*PA12外部中断输入*/
    EXTI_InitStructure.EXTI_Line = EXTI_Line12;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd    = ENABLE; 
    EXTI_Init(&EXTI_InitStructure);
}

//*********中断配置函数
void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

/*外部中断线*/
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn ;      
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0 ;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE ;
    NVIC_Init(&NVIC_InitStructure);
}

//**********中断服务函数
void EXTI15_10_IRQHandler(void)
{
    k=100;
    if(EXTI_GetITStatus(EXTI_Line12)!= RESET)  
    {  
        EXTI_ClearITPendingBit(EXTI_Line12);
        Signalll = 50;
i = CC1101_Rx_Packet( g_RF24L01RxBuffer ); //此程序里面包含了打开spi模式
if((g_RF24L01RxBuffer[0])!=0)
{
drv_uart_tx_bytes(g_RF24L01RxBuffer, 32 );
}

if(memcmp(g_wakingup,g_RF24L01RxBuffer,8) == 0)//判断接收到的字符串
{
drv_uart_tx_bytes("recieved waking up command", 26 );
t=10;
CC1101_Set_Idle_Mode( );

n=1;
while(1)
{

CC1101_Tx_Packet( (uint8_t *)g_changeok, 8 , ADDRESS_CHECK );
t=2;
//输出发送的数据到串口显示器
drv_delay_500Ms( 1 );
drv_delay_500Ms( 1 );
}
}
    }

}

除此之外,主程序里面的灯不闪烁,貌似是被直接中断了,下面是部分main程序:

int main( void )
{
//串口初始化,设置波特率
drv_uart_init( 115200 );

//延时初始化
drv_delay_init( );

//LED初始化
drv_led_init( );

//SPI初始化
drv_spi_init( );

//CC1101初始化
CC1101_Init( );

//唤醒时中断的相关配置
wakeup_interrupt_Configuration();
NVIC_Configuration();
  EXTI_Configuration();

for(a=0;a<6;a++)//红灯绿灯分别亮灭3次代表初始化成功,处于发送或接收状态
{
led_red_flashing( );
led_green_flashing( );
drv_delay_500Ms( 1 );

}

系统复位时,理论上程序从头到尾运行,然而上面的红灯绿灯没有闪烁。

stm32外部中断问题(每次stm32进行系统复位按键控制NRST=0,程序立马进入中断服务函数)相关推荐

  1. STM32—TIM3输出PWM信号驱动MG996R舵机(按键控制)

    文章目录 一.前言 二.MG996R舵机简介 三.通用定时器TIMx 四.TIM3输出PWM信号代码详解 上传代码 一.前言 利用STM32的TIM3的通道1输出PWM信号,驱动MG996R舵机,按键 ...

  2. 单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)

    目录 一.实验要求 二.知识要点 (一)数码管 (二)八段数码管的字形编码 (三)C51变量定义的四要素 (四)中断源 (五)相关的特殊功能寄存器 1.定时器/计数器控制寄存器TCON 2.中断允许控 ...

  3. STM32F103ZE单片机在WWDG窗口看门狗的EWI中断中喂狗导致系统复位的原因及解决办法(中断函数重入问题)

    版权声明:本文为博主原创文章,欢迎转载    https://blog.csdn.net/ZLK1214/article/details/78308058 程序开启了WWDG的Early wakeup ...

  4. STM32外部中断及串口

    一.外部中断的类型 STM32F4 外部中断/事件控制器(EXTI)包含多达 23 个用于产生事件/中断 请求的边沿检测器.EXTI 的每根输入线都可单独进行配置,以选择类型(中断 或事件)和相应的触 ...

  5. 面试题之二:中断服务函数

    中断问题也是面试嵌入式岗位时,面试官比较喜欢拷问的问题之一,作为一个嵌入式开发人员,自然少不了与中断打交道,裸机程序中作为前台服务程序,发挥着重要的作用. 中断服务函数应该注意的四大点: 1.中断服务 ...

  6. 基于STM32外部中断系统的秒表的设计

    1.项目简介 硬件平台:基于某STM32F103开发板. 软件平台:KEIL5 MDK V5.38,基于LCD屏幕库函数例程库为模板,添加了外部中断,定时器中断相关代码,稍加修改而成. 功能简介:有三 ...

  7. STM32外部中断与各通道对应关系

    EXTI0_IRQn的值,其实就是EXTI0中断向量在中断向量表中的位置(STM32技术参考手册中断向量表position栏中的数值) 一:外部中断使用配置过程: (1)配置时钟信号 (2)引脚属性 ...

  8. stm32 外部中断学习

    今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...

  9. stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)

    前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且 ...

最新文章

  1. 【C++】浅析析构函数(基类中)为什么要写成虚基类?
  2. 九度 1408 寻找表达式 (中缀转后缀)
  3. 原生js设置div隐藏或者显示_JS实现“隐藏与显示”功能(多种方法)
  4. html文件嵌入到reportlab,Reportlab学习笔记
  5. java jar命令_Java命令行之jar命令
  6. android中finish和system.exit方法退出的区别
  7. 认识VBA------------------VBA基础
  8. java 多线程面试题及答案
  9. 如何录制电脑内部声音
  10. 离散数学——基础推理
  11. 03筑基期——循环、嵌套循环、循环跳转、随机数(算法基础又篇)
  12. 麻将编程c语言,C语言麻将算法(胡牌算法)
  13. 电脑文档误删除怎么恢复,恢复误删除电脑文档的方法
  14. macbook配置java环境变量_Mac配置JDK环境变量的详细操作
  15. 绿幕抠图在手机上使用认识.
  16. 计算机网络实验Lab1 Test
  17. 用WinForm实现的仿微信聊天系统
  18. 如何成为“一分钟经理人”
  19. 流量分析题目(流量检索,数据提取,数据重组,伪加密,图片提取)
  20. python jpg png_用Python将BLOB图像转换为PNG、JPG

热门文章

  1. hbase 使用lzo_hbase 使用LZO笔记
  2. 《校园封神榜》典型用户及其场景描述
  3. 网站 被降权的四种处理方法
  4. 趣头条递交招股书 将冲刺移动内容聚合第一股
  5. Kali linux 学习笔记(四十一)Web渗透——扫描工具之w3af 2020.3.18
  6. P4086 [USACO17DEC]My Cow Ate My Homework S(静态数据预处理:后缀和、后缀最小值)
  7. 干货!网络推断与数据驱动的影响力最大化问题
  8. 前端对接微信公众号网页开发流程,前期配置
  9. 人工智能中神经网络与自然语言处理共生关系_CodingPark编程公园
  10. Generative Adversarial Networks in Computer Vision: A Survey and Taxonomy(计算机视觉中的GANs:综述与分类)