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

原创 2015年07月10日 12:44:19

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

 

 

本实例编写STM32W108GPIO测试程序,通过控制GPIO引脚,实现对LED灯的控制。

开发环境与硬件说明

硬件:STM32W108无线开发板,5V 1A电源,J-Link烧写器,PC机等。

软件:IAR Embedded Workbench for ARM开发软件。

硬件连接的原理图如图6.15所示:通过STM32W108无线模块的GPIO引脚PA3控制LED1GPIO引脚PC2控制LED2

 

硬件规划:其中用到的控制管脚为GPIO_PA3GPIO_PC2,在控制LED灯的时候要把对应的管脚设置为输出,然后通过输出数据寄存器控制输出电平的高低,从而控制LED灯的亮灭。

6.3.2 软件设计与规划

本实例调用halSetLed()halClearLed()函数,实现对LED灯的控制,此驱动主要是考察编写者如何实现GPIO引脚功能设置及应用。函数声明格式如下:

void halSetLed(HalBoardLedled);

voidhalClearLed(HalBoardLed led);

6.3.3 LED控制程序设计

编写led 驱动源文件led.c如下:

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

文件名:led.c

主要函数描述:halInitLed(void)函数实现LED初始化;halSetLed(HalBoardLed led)

函数实现设置LED,使其亮;halClearLed(HalBoardLed led)实现设置LED,使其灭;halToggleLed(HalBoardLed  led)实现设置LED,使其闪烁

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

#include PLATFORM_HEADER

#include BOARD_HEADER

#include "hal/micro/led.h"

#include "hal/micro/micro-common.h"

#include "hal/micro/cortexm3/micro-common.h"

 

//宏定义,PA相关寄存器

#define GPIO_PxCLR_BASE (GPIO_PACLR_ADDR)

#define GPIO_PxSET_BASE (GPIO_PASET_ADDR)

#define GPIO_PxOUT_BASE (GPIO_PAOUT_ADDR)

 

//寄存器管脚偏移

#define GPIO_Px_OFFSET   (GPIO_PBCFGL_ADDR-GPIO_PACFGL_ADDR)

 

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

功能描述完成对LED的初始化

输入参数:无

输出参数:无

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

void halInitLed(void)

{

//LED1LED2配置引脚

    halGpioConfig(LED_D1,  GPIOCFG_OUT);

halGpioConfig(LED_D2,  GPIOCFG_OUT);

 

    //关闭LED1LED2

    halClearLed(LED_D1);

halClearLed(LED_D2);

}

 

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

功能描述:完成对LED对应端口清零,使其亮

输入参数:LED灯的标识,即对应的LED灯的端口

输出参数:无

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

void halSetLed(HalBoardLed led)

{

    if(led/8 < 3)

    {

        *((volatile int32u  *)(GPIO_PxCLR_BASE+(GPIO_Px_OFFSET*(led/8))))

= BIT(led&7);

    }

}

 

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

功能描述:完成对LED灯相应端口寄存器值的置位,使其灭

输入参数:LED灯的标识,即对应的LED灯的端口

输出参数:无

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

void halClearLed(HalBoardLed led)

{

    if(led/8 < 3)

    {

        *((volatile int32u  *)(GPIO_PxSET_BASE+(GPIO_Px_OFFSET*(led/8))))

= BIT(led&7);

    }

}

 

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

功能描述:完成LED灯的设置,使其由亮变灭或由灭变亮

输入参数:LED的标识,即对应LED对应的端口

输出参数:无

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

void halToggleLed(HalBoardLed led)

{

//原子操作

    ATOMIC(

        if(led/8 < 3)

        {

            *((volatile int32u  *)(GPIO_PxOUT_BASE+(GPIO_Px_OFFSET*(led/8))))

^= BIT(led&7);

        }

     )

}

6.3.4 测试程序编写

编写测试程序源文件main.c

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

文件名:solar-system.c

硬件描述:LED_D1连接PA3LED_D2连接PC2

主要函数描述:main(  )函数通过实现对io的控制。

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

 

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

功能描述:完成通过ioLED灯的测试

输入参数:无

输出参数:无

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

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连接

    GPIO_INTCFGD =  (3<<GPIO_INTMOD_BIT);  //允许IRQD中断

    INT_GPIOFLAG = INT_IRQDFLAG;

    INT_PENDCLR = INT_IRQD;

    halInitLed(); //初始化LED

 

while(TRUE) //无限循环,使LED1LED2灯以1s为周期间隔闪烁

{        

        halSetLed(LED_D1); //点亮LED1

        halClearLed(LED_D2); //关闭LED2

        halCommonDelayMilliseconds(1000); //延迟1s

        halClearLed(LED_D1); //关闭LED1

        halSetLed(LED_D2); //点亮LED2

        halCommonDelayMilliseconds(1000); //延迟1s

}

}

6.3.5 测试结果及分析

程序编译完成之后,通过J-link烧写到STM32W108无线开发板,然后执行程序,测试程序执行结果主要通过观察LED灯的亮灭验证,。测试程序执行之后,可以观察到LED1LED21s为时间间隔进行间隔闪烁,验证了实例程序的正确性。 

 

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

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

基于STM32W108芯片,编写串口测试程序,测试串口通信,完成PC通过串口与STM32W108进行通信。...
  • u010273356
  • u010273356
  • 2015年07月12日 19:07
  • 1371

STM32W108无线传感器网络多传感器环境参数监测实例

本实例基于STM32W108的SimpleMac协议栈,利用无线节点完成对温度、湿度、超声波、烟雾、声音、光敏等传感器的控制及数据采集,并实时将数据发送到STM32W108开发板,完成传感器数据的汇集...
  • u010273356
  • u010273356
  • 2015年07月07日 19:32
  • 594

stm32w108 Bootloader的使用

stm32w108系列可以通过radio无线射频发送数据,也就是说可以通过无线来更新程序。在线升级。开始也是摸索下,下载了st公司提供的simplemac源程序。  分析了几天源代码,但是不知道怎么用...
  • u013356289
  • u013356289
  • 2014年01月12日 12:16
  • 978

STM32W108无线传感器网络多传感器环境参数监测实例

本实例基于STM32W108的SimpleMac协议栈,利用无线节点完成对温度、湿度、超声波、烟雾、声音、光敏等传感器的控制及数据采集,并实时将数据发送到STM32W108开发板,完成传感器数据的汇集...
  • u010273356
  • u010273356
  • 2015年07月07日 19:32
  • 594

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

24个GPIO引脚可分为三组端口:PA、PB、PC。根据它们在GPIO寄存器中的位,每组端口中的GPIO又分别编号为0-7。 注:由于GPIO端口寄存器的功能是相同的,使用符号Px代表PA、PB、PC...
  • u010273356
  • u010273356
  • 2015年07月04日 07:17
  • 462

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

本文基于802.15.4/ZigBee的SimpleMac协议栈编写程序,实现两个STM32W108无线节点之间的通信。节点分为SUN节点和PLANET节点,SUN节点使用STM32W108无线开发板...
  • u010273356
  • u010273356
  • 2015年07月18日 20:28
  • 886

STM32W108无线射频模块802.15.4/ZigBee协议栈

基于STM32W108 ST公司当前推出了三种不同类型的无线网络应用解决方案: 1. MAC协议栈:实现基本的IEEE 802.15.4通信,在此基础上可以开发简单的WSN应用协议,如点对点网络、星型...
  • u010273356
  • u010273356
  • 2015年07月07日 09:03
  • 1015

stm32w108 SimpleMAC库休眠唤醒机制及bug分析

本文针对stm32w108库函数STM32W108xx_SimpleMAC_V2.0.1分析,toolchain为MDK-ARM V4.7,C Compiler版本V5.03.0.24。以下分析有...
  • cokewei
  • cokewei
  • 2013年03月15日 17:25
  • 2526

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

STM32W108无线射频模块外部中断接口应用实例 编写中断服务程序,响应外部中断,实现通过按键触发中断,然后通过LED显示相应的状态。 1 STM32W108开发环境与硬件说明 硬件:...
  • u010273356
  • u010273356
  • 2015年07月11日 18:29
  • 429

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

本文基于802.15.4/ZigBee的SimpleMac协议栈编写程序,实现两个STM32W108无线节点之间的通信。节点分为SUN节点和PLANET节点,SUN节点使用STM32W108无线开发板...
  • u010273356
  • u010273356
  • 2015年07月07日 19:27
  • 604
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STM32W108无线射频模块通用IO接口应用实例
举报原因:
原因补充:

(最多只允许输入30个字)