码迷,mamicode.com
首页 > 其他好文 > 详细

STM32W108无线射频模块外部中断接口应用实例

时间:2015-07-12 09:48:32      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:stm32w108   射频模块   无线zigbee   无线zigbee射频   无线传感器网络   

STM32W108无线射频模块外部中断接口应用实例

 

编写中断服务程序,响应外部中断,实现通过按键触发中断,然后通过LED显示相应的状态。

1 STM32W108开发环境与硬件说明

硬件:STM32W108 Zigbee开发板、5V 1A电源、J-LINK烧写器、PC机等。

软件:IAR Embedded Workbench开发软件。

为开发板中的按键连接原理图,按键与STM32W108无线模块连接的原理图。

技术分享

按键连接图

2 软件设计与规划

测试程序的流程图如下所示,节点首先初始化硬件,然后注册中断,随后循环检测中断是否发生。在中断处理函数中点亮LED1,当外部检测到中断发生时,延迟1000ms,然后关闭LED1,流程如图7.11所示

技术分享

 

3 中断处理程序设计

编写solar-system.c 中驱动程序如下:

/**************************************************************************

功能描述:中断处理程序,将标志位置位

输入参数:无

输出参数:无

*************************************************************************/

void  halIrqCIsr()

{   

    INT_MISS = INT_MISSIRQC; //清除中断miss

    INT_GPIOFLAG=INT_IRQCFLAG;//重置INT_GPIOFLAG寄存器的INT_IRQCFLAG  

    preesed1 = TRUE; //将按键按下标志位设置为true

    halSetLed(LED_D1); //点亮LED_D1

}

4 测试程序编写

编写测试程序源文件solar-system.c

/*****************************************************************

文件名:solar-system.c

硬件描述:S2->PC0LED1->PA3

主要函数描述:main()函数实现LED1灯的关闭,当S2按键被按下及松开时,都会触发中断,在中断处理函数中点亮LED1灯,当main()函数中检测到中断发生时,关闭被点亮的LED1

*****************************************************************/

#include  PLATFORM_HEADER

#include  BOARD_HEADER

#include  <stdio.h>

#include  <stdlib.h>

#include  <string.h>

#include  "error.h"

#include  "hal/hal.h"

#include  "include/phy-library.h"

#include  "hal/micro/cortexm3/iap_bootloader.h"

#include  "hal/micro/led.h"

#include  "hal/micro/button.h"

 

boolean  preesed1 = FALSE; //全局变量,标示是否有按键被按下

 

/**************************************************************************

功能描述:完成通过中断控制LED灯的闪烁

输入参数:无

输出参数:无

*************************************************************************/

int  main(void)

{

    halInit(); //初始化硬件电路

    uartInit(115200, 8, PARITY_NONE, 1); //配置UART串口

 

    //配置PA4PA5为复用输出功能,用于数据包的跟踪

     halGpioConfig(PORTA_PIN(4),GPIOCFG_OUT_ALT);

halGpioConfig(PORTA_PIN(5),GPIOCFG_OUT_ALT);

 

GPIO_IRQDSEL = PORTB_PIN(2); //IRQDPB2/SC1RXD连接

 

    //允许IRQD中断

    GPIO_INTCFGD =  (3<<GPIO_INTMOD_BIT);

    INT_GPIOFLAG = INT_IRQDFLAG;

    INT_PENDCLR = INT_IRQD;

    INTERRUPTS_ON();

    halInitLed(); //初始化LED

    halGpioConfig(BUTTON_S2,GPIOCFG_IN_PUD);//配置BUTTON_S2

   

    GPIO_INTCFGC = 0;  //清零GPIO_INTCFGC寄存器

    INT_CFGCLR = INT_IRQC; // 清除IRQC中断

    INT_GPIOFLAG = INT_IRQCFLAG; //清除IRQC的中断标志

    INT_MISS = INT_MISSIRQC;   //清除IRQC的中断错过标志

    GPIO_IRQCSEL = BUTTON_S2; //IRQC引脚对应于BUTTON_S2引脚

    GPIO_INTCFGC  = (0 << GPIO_INTFILT_BIT); //不使用数字滤波

    GPIO_INTCFGC |= (3 <<  GPIO_INTMOD_BIT); //上升沿及下降沿触发

    INT_CFGSET = INT_IRQC; //使能IRQC中断

   

    while(TRUE)

    {       

         halCommonDelayMilliseconds(10); //延时10ms

        if (preesed1 == TRUE) //判断按键是否有被按下,即判断是否有中断发生

        {

            preesed1=FALSE;  //将标志位设置为false

            halCommonDelayMilliseconds(1000);  //延时1000ms

            halClearLed(LED_D1); //关闭LED1

        }    

    }

}

5 测试结果及分析

将程序烧入STM32W108 zigbee开发板,按下开发板上的按键S2,此时LED1会闪烁一次,然后保持关闭状态。

技术分享

 

中断被设置为上升沿和下降沿触发,检验方法:首先按下按键,不松开,此时LED1会闪烁一次,然后松开按键,此时LED1会再次闪烁一次,说明上升沿和下降沿都触发了中断。

 

 

本文出自《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,20145

STM32W108无线射频模块外部中断接口应用实例

标签:stm32w108   射频模块   无线zigbee   无线zigbee射频   无线传感器网络   

原文地址:http://blog.csdn.net/u010273356/article/details/46843703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!