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’,

 

 

最新文章

  1. kali Linux添加add-apt-repository
  2. 【Java每日一题】20161123
  3. python——协程
  4. JS 获取WEB请求路径
  5. 套题T6
  6. PHP单例模式--典型的三私一公
  7. 解析JSON对象与字符串之间的相互转换
  8. 特殊权限SUIG、SGID、SBIT
  9. day23.面向对象之继承
  10. python连接服务器上传文件,后台执行命令
  11. python字符串魔法
  12. HanLP分词命名实体提取详解
  13. android:windowSoftInputMode属性;界面关闭后软键盘不隐藏的解决方法;
  14. 在静态方法和非静态方法上加 Synchronized的区别
  15. Codeforces Round #371 (Div. 2) B. Filya and Homework 水题
  16. Spring(二十):Spring AOP(四):基于配置文件的方式来配置 AOP
  17. pymongo的常用操作
  18. JUC——线程同步锁(ReentrantLock)
  19. android 创建通知栏Notification
  20. 弹窗插件zDialog使用教程

热门文章

  1. MVC5发展历程,从MVC2谈起
  2. Huawei配置两台交换机堆叠示例
  3. OpenSUSE Leap 42.3 安装java(Oracle jre)
  4. XT800 在域环境在运行设置
  5. Python正则表达式初识(七)
  6. Python环境搭建—安利Python小白的Python安装详细教程
  7. CentOS7 PXE安装批量安装操作系统
  8. centos yum 安装php7.2
  9. 兼容IE浏览器的canvas画线和圆圈
  10. SGU 323 Aviamachinations