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

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->PC0,LED1->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串口

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

halGpioConfig(PORTA_PIN(4),GPIOCFG_OUT_ALT);

halGpioConfig(PORTA_PIN(5),GPIOCFG_OUT_ALT);

GPIO_IRQDSEL = PORTB_PIN(2); //将IRQD与PB2/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会再次闪烁一次,说明上升沿和下降沿都触发了中断。

时间: 2024-09-30 15:32:54

STM32W108无线射频模块外部中断接口应用实例的相关文章

STM32W108无线射频模块通用IO接口应用实例

STM32W108无线射频模块通用IO接口应用实例 本实例编写STM32W108的GPIO测试程序,通过控制GPIO引脚,实现对LED灯的控制. 开发环境与硬件说明 硬件:STM32W108无线开发板,5V 1A电源,J-Link烧写器,PC机等. 软件:IAR Embedded Workbench for ARM开发软件. 硬件连接的原理图如图6.15所示:通过STM32W108无线模块的GPIO引脚PA3控制LED1,GPIO引脚PC2控制LED2. 硬件规划:其中用到的控制管脚为GPIO_

STM32W108无线射频模块多节点之间通信实例

STM32W108无线射频模块多节点之间通信实例 基于STM32W108的SimpleMac协议栈编写程序,实现多个无线节点之间的通信.节点分为SUN节点和PLANET节点,SUN节点使用STM32W108无线开发板,PLANET节点使用STM32W108无线数据采集节点,SUN节点可与PC机进行通信. 编程与实现 程序的设计基于SimpleMac协议栈进行,以下给出部分主要相关代码.该实例中的部分代码与第11章中的两节点通信实例代码相同,本章不再重复说明. 文件solar-system.c部分

STM32W108无线射频模块两节点之间通信实例

本文基于802.15.4/ZigBee的SimpleMac协议栈编写程序,实现两个STM32W108无线节点之间的通信.节点分为SUN节点和PLANET节点,SUN节点使用STM32W108无线开发板,PLANET节点使用STM32W108无线节点,SUN节点可与PC机进行通信. 程序设计与实现 程序的设计基于SimpleMac协议栈进行,根据官方提供的MAC协议栈示例代码进行的裁剪更改,第10章已对协议栈代码进行了解析,在此就不详细说明,以下只给出部分主要相关代码. 文件solar-syste

STM32W108无线射频模块串行通信接口编程实例

STM32W108无线射频模块UART通信应用实例 基于STM32W108芯片,编写串口测试程序,测试串口通信,完成PC通过串口与STM32W108进行通信. 开发环境与硬件平台 硬件:STM32W108无线开发板,5V1A电源,J-LINK烧写器,串口线,PC机等. 软件:IAREmbedded Workbench开发工具,SimpleMac协议栈. 硬件连接的原理图,PB2是芯片STM32W108的接收端,PB1是芯片STM32W108的发送端. 硬件规划:其中用到的管脚有PB1,PB2,通

STM32W108无线射频模块AD转换器应用实例

STM32W108无线射频模块AD转换器应用实例 STM32W108 AD转换器是一个一阶∑-△转换器,具有以下特性: l  分辨率可达12位 l  采样最小时间5.33us(188KHz) l  6个外部和4个内部输入源,可进行差分和单端转换 l  两个电压转换范围(差分):-VREF~+VREF,-VDD_PADS~+VDD_PADS l  可选择内部和外部参考标准VREF:内部的VREF可用于输出 l  数字偏移和增益校准 l  专用DMA通道,通道支持一次和连续的操作模式 应用实例解析

SM32W108无线射频模块两节点之间通信实例

SM32W108无线射频模块两节点之间通信实例 本文基于802.15.4/ZigBee的SimpleMac协议栈编写程序,实现两个STM32W108无线节点之间的通信.节点分为SUN节点和PLANET节点,SUN节点使用STM32W108无线开发板,PLANET节点使用STM32W108无线节点,SUN节点可与PC机进行通信. 程序设计与实现 程序的设计基于SimpleMac协议栈进行,根据官方提供的MAC协议栈示例代码进行的裁剪更改,第10章已对协议栈代码进行了解析,在此就不详细说明,以下只给

[ZYNQ-7]PS处理PL外部中断的简单实例的剖析 (参考米联miz702n)

Zynq的ARM通过GIC中断控制器来接收核仲裁所有的中断.由于中断向量表只有4Bytes大小,仅仅正好存放一条跳转语句,因此当产生一个外部中断时,中断处理的大致过程:PC内容保存到LR_IRQ用于中断返回,拷贝CPSR到SPSR_IRQ以反应中断模式,屏蔽其他中断,紧接着将PC设置为中断向量表入口.CPU完成现场保护.确认中断源,并调用相关的中断处理函数.恢复CPSR,恢复CPU现场,中断返回. main.c of simplified Interrupt instance (from miz

SM32W108无线射频模块多个节点之间通信实例

分别对SUN节点和PLANET节点进行说明.SUN节点流程图如图12.2 所示,节点上电是首先进行硬件及相应变量的初始化,然后创建网络,循环检测是否有数据包.如果接到数据包,对其进行解析,根据不同类型的数据包执行不同的操作.于此同时读取串口信息,如果串口有输入命令,对命令进行解析,执行不同的操作. PLANET节点流程图如图12.3所示,PLANET节点首先进行一些初始化工作,然后申请加入网络,加网成功后,循环监测是否有数据包及按键是否被按下,如果有数据包对其进行解析,执行相应的操作,如果按键被

STM32F104VG (一)中断与外部中断

一.基础知识 1.ARM的中断优先级分硬件优先级和软件优先级两种 其中软件优先级又由抢占优先级和响应优先级组成 2.中断的优先级采用编号小优先的原则. 3.一般情况: 1).如果设定了软件优先级,先看软件优先级: 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断. 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之