STM32W108无线射频模块串行通信接口编程实例
STM32W108无线射频模块UART通信应用实例
基于STM32W108芯片,编写串口測试程序,測试串口通信。完毕PC通过串口与STM32W108进行通信。
开发环境与硬件平台
硬件:STM32W108无线开发板,5V1A电源。J-LINK烧写器,串口线。PC机等。
软件:IAREmbedded Workbench开发工具。SimpleMac协议栈。
硬件连接的原理图,PB2是芯片STM32W108的接收端,PB1是芯片STM32W108的发送端。
硬件规划:当中用到的管脚有PB1,PB2,通过PB2接收PC机发送的数据,利用PB1将STM32W108的数据发送给PC机,实现两者的串口通信。
软件设计与规划
本实例调用__io_getcharNonBlocking(int8u*data)函数实现通过串口读取PC机发送的信息。调用printf()函数将信息输出到PC机。
測试程序的流程图如图8.10所看到的:首先初始化对应的硬件部分,本实例中用到了LED,串口等硬件设备;其次等待PC机串口输入,并进行推断。假设收到的数据为‘y’或’Y’,则点亮LED1。假设收到的数据为‘n’或‘N‘,则关闭LED1。假设收到是数据为‘?’。则输出全部符号的功能。假设输入非以上五种字符。则提示错误信息。
測试程序编写
编写測试程序源文件main.c:
/***************************************************************** 文件名称:main.c 版本:v1.0 创建日期:2012-12-29 硬件描写叙述:无 主要函数描写叙述:main( )函数实现串口通信。 *****************************************************************/ #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"
/************************************************************************** 功能描写叙述:完毕串口通信功能 输入參数:无 输出參数:无 *************************************************************************/ int main(void) { u8 ch; //存放从串口调试助手得到的字符 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; INTERRUPTS_ON(); halInitLed(); //LED初始化 printf(" y|Y Turn On LED1\n n|N Turn Off LED1\n ? Help Command\n"); while(TRUE) { while ((!__io_getcharNonBlocking(&ch))); //循环等待FES2440发出的命令 if(ch=='y'||ch=='Y') //假设命令是'y'或’Y’,点亮LED_D1 { halSetLed(LED_D1); //点亮LED_D1 } else if(ch=='n'||ch=='N') //假设命令是'n'或’N’。关闭LED1 { halClearLed(LED_D1); //关闭LED_D1 } else if(ch=='?') //假设命令是'?',解释各个命令的功能 { printf(" y|Y Turn On LED1\n n|N Turn Off LED1\n ? Help Command\n"); } else { printf("Error Command, Please Input '? ' for Help\n"); }
//中断又一次置位 INT_GPIOFLAG = INT_IRQDFLAG; INT_PENDCLR = INT_IRQD; } } |
測试结果及分析
測试程序主要是通过串口控制LED1灯的闪烁。无线节点串口与PC机串口相连,打开串口调试助手,设置串口
打开串口之后。使用J-link将程序烧到开发板,重新启动实验平台上的STM32W108模块。
通过键盘在串口发送区输入字符’Y’或’y’,点击发送button。将信息发送给无线模块,此时LED1被点亮。如图所看到的;输入字符’n’或’N’,将关闭LED1;输入字符’M’,
STM32W108无线射频模块串行通信接口编程实例的更多相关文章
- STM32W108无线射频模块通用IO接口应用实例
STM32W108无线射频模块通用IO接口应用实例 本实例编写STM32W108的GPIO測试程序,通过控制GPIO引脚,实现对LED灯的控制. 开发环境与硬件说明 硬件:STM32W108无线开发板 ...
- C#事件与接口编程实例
很多初学c#的朋友对于事件与接口感到迷惑不解,不明白它们之间的关系,下面我就用实例来简单的分析讲解一下. 事件,用event修饰符来代表一个事件,我们要创建一个C#事件必须按以下顺序来扫行: 1,创建 ...
- yii2 restful api——app接口编程实例
<?php namespace common\components; use common\models\Cart; use common\models\User; use Yii; use y ...
- C语言与MATLAB接口 编程与实例 李传军编着
罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ************ ...
- 蓝牙防丢器原理、实现与Android BLE接口编程
本文是对已实现的蓝牙防丢器项目的总结,阐述蓝牙防丢器的原理.实现与android客户端的蓝牙BLE接口编程.在这里重点关注如何利用BLE接口来进行工程实现,对于BLE的协议.涉及到JNI的BLE接口内 ...
- [yueqian_scut]蓝牙防丢器原理、实现与Android BLE接口编程
本文是对已实现的蓝牙防丢器项目的总结,阐述蓝牙防丢器的原理.实现与Android客户端的蓝牙BLE接口编程.在这里重点关注如何利用BLE接口来进行工程实现,对于BLE的协议.涉及到JNI的BLE接口内 ...
- 基于VC的串行通信技术应用实例
在工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛. 本文将介绍在Windows平台下串行通信的工作机制和用Visual C++设计串行通信程序的 ...
- 【GoLang】golang 面向对象编程 & 面向接口编程
005.面向对象&接口编程 1 面向函数编程 1.1 将数据作为参数传递到函数入参 1.2 对象与函数是分离的 2 面向对象编程 2.1 使用者看起来函数作为对象的属性而非参数 2.2 函数属 ...
- SAP接口编程 之 JCo3.0系列(01):JCoDestination
SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...
随机推荐
- 129.C++面试一百题(1-51)
- 洛谷P2633 Count on a tree
题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个 ...
- [ Java ] [ Eclipse ] 导出/导入Eclipse的workspace配置(备份Eclipse配置)
Export *.epf 文件 原文連結: http://www.cnblogs.com/52php/p/5677647.html
- Linux VNC客户端软件VNC Viewer | RealVNC
Linux很多时候是作为服务器操作系统,如果是桌面系统通常情况会远程管理linux服务器,很多时候通过VNC进行远程管理,这个时候就要在客户端安装VNC客户端软件,VNC Viewer | RealV ...
- 【Django】视图系统
目录 FBV 与 CBV 给视图加装饰器 使用装饰器装饰CBV 关于dispatch()方法 Request对象 与 Response对象 request对象 response对象 @ *** 一个视 ...
- 二:2.1 字符串与循环中的 while
字符串:字符串是以单引号或双引号括起来的任意文本 创建字符串: str1 = "sunck is a good man!" str3 = "sunckis a nice ...
- HDU——T 1166 敌兵布阵
http://acm.hdu.edu.cn/showproblem.php?pid=1166 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- jni中调用java方法获取当前apk的签名文件md5值
相应的java方法: void getsign(Context context) throws Exception { PackageInfo localPackageInfo = context.g ...
- 机器学习Python实现AdaBoost
adaboost是boosting方法多个版本号中最流行的一个版本号,它是通过构建多个弱分类器.通过各个分类器的结果加权之后得到分类结果的.这里构建多个分类器的过程也是有讲究的,通过关注之前构建的分类 ...
- vim 跨文件复制
我们都知道,当我们在一个文件之间进行复制粘贴的时候,vim提供给我们的方法非常多,三个模式下都有方法实现字符.句子.段落之间的复制粘贴.当时,如果我们想要在两个文件之间进行复制粘贴,这就有点麻烦了.我 ...