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


    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     Turn Off LED1 ?

         Help Command ");

         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     Turn Off LED1

    ?     Help Command ");

             }

             else

             {

                 printf("Error Command, Please Input '?

    ' for Help ");

             }

     

             //中断又一次置位

             INT_GPIOFLAG = INT_IRQDFLAG;

             INT_PENDCLR = INT_IRQD;

        }

    }

    測试结果及分析

     

    測试程序主要是通过串口控制LED1灯的闪烁。无线节点串口与PC机串口相连,打开串口调试助手,设置串口

     

    打开串口之后。使用J-link将程序烧到开发板,重新启动实验平台上的STM32W108模块。

     

     

    通过键盘在串口发送区输入字符’Y’’y’,点击发送button。将信息发送给无线模块,此时LED1被点亮。如图所看到的;输入字符’n’’N’,将关闭LED1;输入字符’M’

     

     

  • 相关阅读:
    【原创】整合Spring4+Hibernate4+Struts2时NullPointerException问题解决
    drools规则引擎与kie-wb和kie-server远程执行规则(7.18.0.Final)
    关于大龄程序员的感悟
    RocketMQ知识整理与总结
    Spring注解大全
    RocketMQ4.3.X关于设置useEpollNativeSelector = true报错问题
    RocketMQ4.3.x 史上配置最全详解,没有之一
    RocketMQ4.3.x对顺序消息的理解
    RocketMQ从3.5.8升级到4.3.2版本实战记录
    关于大表数据导出方案设想
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8405289.html
Copyright © 2020-2023  润新知