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引脚功能设置及应用。

函数声明格式例如以下:

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)

{

//为LED1和LED2配置引脚

halGpioConfig(LED_D1,  GPIOCFG_OUT);

halGpioConfig(LED_D2,  GPIOCFG_OUT);

//关闭LED1、LED2

halClearLed(LED_D1);

halClearLed(LED_D2);

}

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

功能描写叙述:完毕对LED相应port清零,使其亮

输入參数:LED灯的标识。即相应的LED灯的port

输出參数:无

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

void halSetLed(HalBoardLed led)

{

if(led/8 < 3)

{

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

= BIT(led&7);

}

}

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

功能描写叙述:完毕对LED灯对应port寄存器值的置位。使其灭

输入參数:LED灯的标识,即相应的LED灯的port

输出參数:无

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

void halClearLed(HalBoardLed led)

{

if(led/8 < 3)

{

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

= BIT(led&7);

}

}

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

功能描写叙述:完毕LED灯的设置。使其由亮变灭或由灭变亮

输入參数:LED的标识。即相应LED相应的port

输出參数:无

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

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无线射频模块通用IO接口应用实例的更多相关文章

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

    STM32W108无线射频模块UART通信应用实例 基于STM32W108芯片,编写串口測试程序,測试串口通信.完毕PC通过串口与STM32W108进行通信. 开发环境与硬件平台 硬件:STM32W1 ...

  2. 【转】java通用URL接口地址调用方式GET和POST方式

    java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...

  3. 十六、springboot整合Spring-data-jpa(二)之通用DAO接口与添加自定义方法

    @NoRepositoryBean:Spring Data Jpa在启动时就不会去实例化BaseRepository这个接口 1.通用接口: import org.springframework.da ...

  4. 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口

    最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...

  5. 转载:Java的接口及实例

    转自:http://blog.csdn.net/liujun13579/article/details/7736116/ 一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特 ...

  6. 转:十九、Java的接口及实例

    http://blog.csdn.net/liujun13579/article/details/7736116 一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合 ...

  7. Java的接口及实例

    一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...

  8. wemall app微信商城系统Android之通用通知接口demo

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享Native(原生)支付模式一demo,供技术 ...

  9. HttpClient方式调用接口的实例

    使用HttpClient的方式调用接口的实例. public class TestHttpClient { public static void main(String[] args) { // 请求 ...

随机推荐

  1. openstack学习心得:glance 架构、概念、后端存储配置方式

    glance 架构 glance 服务概述 Image 服务 使得用户可以发现.注册.检索虚拟机镜像.它对外提供REST API使得你能够查询虚拟机镜像元数据和检索一个真实的镜像.你可以通过镜像服务将 ...

  2. JAVA基础面试(二)

    11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...

  3. shopxx--权限功能测试

    shiro权限控制 一.添加角色 1.打开   系统→角色管理,点击 添加 赋予当前角色对应的权限 二.添加管理员(即用户管理) 添加用户,赋予刚才添加的角色 三.用新用户登录,进行测试 登录结果

  4. ECMAScript 6 第一天 let和const命令

    ES6新增声明变量的方法let命令,const命令. (ES5只有两种声明变量的方法:var 命令和 function 命令.) let命令,用来声明变量. 与var声明变量不同于: 1.  let声 ...

  5. EntityFramework6与EntityFrameworkCore的区别

    EntityFramework6 EF6 是一个久经考验的数据库访问技术,发展多年,拥有许多特性,并且成熟稳定.2008年EF作为 .Net 3.5 Sp1 和Visual Studio 2008 S ...

  6. 认识 Less

    CSS(层叠样式表)是一项出色的技术,它使得网页的表现与内容完全分离,使网站维护工作变得更容易,不会因为内容的改变而影响表现,也不会因为表现的改变而影响内容. 作为一门标记性语言,CSS 的先天性优点 ...

  7. redis 梳理笔记(一)

    一 redis 数据格式 短连接 长连接pconnect tcp协议 交互数据格式 交互采用特殊的格式 \r\n 1."+"号开头表示单行字符串的回复      set aa aa ...

  8. BootStra相关脚本引用说明

    先看一个简单的模板(DOCTYPE是html5的文档类型) <!DOCTYPE html> <html lang="zh-CN"> <head> ...

  9. POJ1273 网络流-->最大流-->模板级别-->最大流常用算法总结

    一般预流推进算法: 算法思想: 对容量网络G 的一个预流f,如果存在活跃顶点,则说明该预流不是可行流. 预流推进算法就是要选择活跃顶点,并通过它把一定的流量推进到它的邻接顶点,尽可能将正的赢余减少为0 ...

  10. Java分布式锁之数据库实现

    之前的文章<Java分布式锁实现>中列举了分布式锁的3种实现方式,分别是基于数据库实现,基于缓存实现和基于zookeeper实现.三种实现方式各有可取之处,本篇文章就详细讲解一下Java分 ...