UART通信收发

参考链接:https://wenku.baidu.com/view/bd7b2da36294dd88d0d26bf4.html 按照这个链接指导,修改了底层的串口配置代码,但是出问题了。后来也没解决。后来找到了下面的帖子,按照下面的提示一步一步可以实现串口的收发:链接如下https://www.cnblogs.com/liushao/p/6351635.html?utm_source=itdadao&utm_medium=referral

在使用串口时,只需掌握ZigBee协议栈提供的串口操作相关的三个函数即可。

uint8 HalUARTOpen(uint8 port,halUARTCfg_t *config);

uint16 HalUARTRead(uint8 port,uint8 *buf,uint16 len);

uint16 HalUARTWrite(uint8 port,uint8 *buf,uint16 len);

 

本实验只对coordinator.c文件进行改动就可以实现串口的收发。

修改coordinator.c文件

 

byte GenericApp_TransID; // This is the unique message ID (counter)

afAddrType_t GenericApp_DstAddr;

unsigned char uartbuf[128];
/*********************************************************************
* LOCAL FUNCTIONS
*/
static void GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg );
static void GenericApp_HandleKeys( byte shift, byte keys );
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );
static void GenericApp_SendTheMessage( void );

static void rxCB(uint8 port,uint8 event);

 void GenericApp_Init( uint8 task_id )

{
  halUARTCfg_t uartConfig;
  GenericApp_TaskID = task_id;
  GenericApp_NwkState = DEV_INIT;
  GenericApp_TransID = 0;

  ... ...

  GenericApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
  GenericApp_epDesc.latencyReq = noLatencyReqs;

  afRegister( &GenericApp_epDesc );

  uartConfig.configured   = TRUE;
  uartConfig.baudRate    = HAL_UART_BR_115200;
  uartConfig.flowControl    = FALSE;
  uartConfig.callBackFunc  = rxCB;  //配置串口调用函数

  //对串口进行初始化
  HalUARTOpen(0,&uartConfig);  //该函数将halUARTCfg_t类型的结构体变量作为参数,而halUARTCfg_t结构体变量包含了串口初始化相关的参数。

}

 //该函数是一个空函数。因为本实验并没有进行事件处理,所有不需要任何代码

uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{

}

static void rxCB(uint8 port,uint8 event)
{

  if (event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))  //接收到串口数据

  {
    HalUARTRead(0,uartbuf,16);  //读取数据并存放到uartbuf数组中
    if(osal_memcmp(uartbuf,"www.wlwmaker.com",16)) //使用osal_memcmp()函数判断接收到的数据是否是字符串"www.wlwmaker.com",如果是,执行{}
    {
      HalUARTWrite(0,uartbuf,16); //调用HalUARTWrite()函数将接收到的字符输出到串口
    }

  }
}

PS:经过测试,若是不加if (event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))判断,那么串口助手则会迅速收到大量的乱码。一直困惑了很久,还以为是顶层的串口设置和底层的串口配置出现了冲突。或者是时钟配置出现了问题。








  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值