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_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,使其亮;halClearLed(HalBoardLed led)实现设置LED,使其灭;halToggleLed(HalBoardLed **********************************************************************/ #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 /************************************************************************** 功能描写叙述:完毕对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接口应用实例的更多相关文章
- STM32W108无线射频模块串行通信接口编程实例
STM32W108无线射频模块UART通信应用实例 基于STM32W108芯片,编写串口測试程序,測试串口通信.完毕PC通过串口与STM32W108进行通信. 开发环境与硬件平台 硬件:STM32W1 ...
- 【转】java通用URL接口地址调用方式GET和POST方式
java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...
- 十六、springboot整合Spring-data-jpa(二)之通用DAO接口与添加自定义方法
@NoRepositoryBean:Spring Data Jpa在启动时就不会去实例化BaseRepository这个接口 1.通用接口: import org.springframework.da ...
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...
- 转载:Java的接口及实例
转自:http://blog.csdn.net/liujun13579/article/details/7736116/ 一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特 ...
- 转:十九、Java的接口及实例
http://blog.csdn.net/liujun13579/article/details/7736116 一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合 ...
- Java的接口及实例
一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...
- wemall app微信商城系统Android之通用通知接口demo
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享Native(原生)支付模式一demo,供技术 ...
- HttpClient方式调用接口的实例
使用HttpClient的方式调用接口的实例. public class TestHttpClient { public static void main(String[] args) { // 请求 ...
随机推荐
- Python爬虫入门:Urllib库的基本使用
1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CS ...
- HTTP中的Range: bytes=0-
HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传.Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的 表示第二个 ...
- layui数据表格以及传数据方式
数据表格一: <div style="margin:0px; background-color: white; margin:0 10px;"> <blockqu ...
- C#实现中国身份证验证问题
C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 今天写的 C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 理论部分: 1 ...
- C#数据类型和SQL数据类型对照
C#操作SQL Float类型,数据会多很多小数,原来是C#的float和sql的float类型不一致 /// <summary> /// 数据库中与C#中的数 ...
- java中的内存溢出和内存泄漏
内存溢出:对于整个应用程序来说,JVM内存空间,已经没有多余的空间分配给新的对象.所以就发生内存溢出. 内存泄露:在应用的整个生命周期内,某个对象一直存在,且对象占用的内存空间越来越大,最终导致JVM ...
- Java提高十五:容器元素比较Comparable&Comparator深入分析
我们经常用容器来存放元素,通常而言我们是不关系容器中的元素是否有序,但有些场景可能要求容器中的元素是有序的,这个时候用ArrayList LinkedList Hashtable HashMap ...
- 获取request header的值
1Sring mvc 中可以通过注解 : @RequestHeader ("host") String hostName 2httpservletrequest request ...
- MyBatis《1》
MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/ 1.使用MyBatis前的准备 1.增加Maven依赖 <dependency> <g ...
- 一步步搭建最简单oauth2.0认证和授权
oauth2.0 最早接触这个概念是在做微信订阅号开发.当时还被深深的绕进去,关于oauth2.0的解释网上有好多,而且都讲解的比较详细,下面给大家价格参考资料. http://owin.org/ h ...