打印
[应用相关]

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

[复制链接]
1047|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fesxp|  楼主 | 2015-7-12 19:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
STM32W108无线射频模块UART通信应用实例
基于STM32W108芯片,编写串口测试程序,测试串口通信,完成PC通过串口与STM32W108进行通信。
开发环境与硬件平台
硬件:STM32W108无线开发板,5V1A电源,J-LINK烧写器,串口线,PC机等。
软件:IAREmbedded Workbench开发工具,SimpleMac协议栈。
硬件连接的原理图,PB2是芯片STM32W108的接收端,PB1是芯片STM32W108的发送端。
硬件规划:其中用到的管脚有PB1PB2,通过PB2接收PC机发送的数据,利用PB1STM32W108的数据发送给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配置
  
  
  
     //配置PA4PA5作为复用输出引脚,用于数据包的跟踪
  
     halGpioConfig(PORTA_PIN(4),GPIOCFG_OUT_ALT);
  
     halGpioConfig(PORTA_PIN(5),GPIOCFG_OUT_ALT);
  
    GPIO_IRQDSEL  = PORTB_PIN(2); //IRQDPB2/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’,点击发送按钮,将信息发送给无线模块,此时LED1被点亮,如图所示;输入字符’n’’N’,将关闭LED1;输入字符’M’
参考文献:《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,2014年5月

沙发
309030106| | 2015-7-12 21:57 | 只看该作者
芯片内部是有无线模块资源吗

使用特权

评论回复
板凳
尤彼卡| | 2015-7-12 22:09 | 只看该作者
printf()函数还不知道怎么应用呢

使用特权

评论回复
地板
fesxp|  楼主 | 2015-7-13 08:46 | 只看该作者
对STM32W系列集成了无线射频模块,可以用来做数传,物联网或者是无线传感器网络

使用特权

评论回复
5
fesxp|  楼主 | 2015-7-13 08:47 | 只看该作者
对于printf函数,   STM32W108硬件串口初始化时进行了封装, halInit();  //初始化硬件电路,     uartInit(115200, 8, PARITY_NONE, 1); //UART配置。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

19

帖子

1

粉丝