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

来源:互联网 发布:网络安全教育讲话稿 编辑:程序博客网 时间:2024/05/01 07:23

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’

 

 

1 0