STM32W108无线射频模块通用IO接口应用实例
2015-07-10 12:44
821 查看
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_PA3、GPIO_PC2,在控制LED灯的时候要把对应的管脚设置为输出,然后通过输出数据寄存器控制输出电平的高低,从而控制LED灯的亮灭。
6.3.2
软件设计与规划
本实例调用halSetLed()和halClearLed()函数,实现对LED灯的控制,此驱动主要是考察编写者如何实现GPIO引脚功能设置及应用。函数声明格式如下:voidhalSetLed(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) { //为LED1和LED2配置引脚 halGpioConfig(LED_D1, GPIOCFG_OUT); halGpioConfig(LED_D2, GPIOCFG_OUT); //关闭LED1、LED2 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连接PA3,LED_D2连接PC2 主要函数描述:main( )函数通过实现对io的控制。 *****************************************************************/ /************************************************************************** 功能描述:完成通过io对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连接 GPIO_INTCFGD = (3<<GPIO_INTMOD_BIT); //允许IRQD中断 INT_GPIOFLAG = INT_IRQDFLAG; INT_PENDCLR = INT_IRQD; halInitLed(); //初始化LED灯 while(TRUE) //无限循环,使LED1、LED2灯以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灯的亮灭验证,。测试程序执行之后,可以观察到LED1、LED2以1s为时间间隔进行间隔闪烁,验证了实例程序的正确性。
本文出自《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,2014年5月
相关文章推荐
- 传感器网络会议和期刊
- STM32W108无线ZigBee射频芯片引脚说明(上篇)
- STM32W108无线ZigBee射频芯片引脚说明(下篇)
- STM32W108无线ZigBee射频模块复位模块原理
- STM32W108无线ZigBee射频模块
- STM32W108无线射频模块通用IO接口
- STM32W108无线射频模块串行通信接口
- STM32W108无线射频模块802.15.4/ZigBee协议栈
- STM32W108无线射频模块两节点之间通信实例
- 无线传感器网络 | 综合题
- 无线传感器网络 | 简答题
- 无线传感器网络 | 期末复习知识点1
- 无线传感器网络概述|物理层和信道接入技术
- 学习无线传感器网络该努力的方向?
- SM32W108无线射频模块多个节点之间通信实例
- SM32W108无线射频模块两节点之间通信实例
- Android开发请求网络方式详解
- http://www.gaofeiyu.com/392
- iOS 开发中如何显示网络图片
- http响应Last-Modified和ETag以及asp.net web api实现