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 );
}
系统复位时,理论上程序从头到尾运行,然而上面的红灯绿灯没有闪烁。