• 大小: 0.01M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-03-27
  • 语言: 其他
  • 标签: 其他  

资源简介


配送一个自己写的串口驱动程序 用DMA接收数据 接收完会产生一个空闲中断 由此可判断接收完一个包的数据 再配送一个我自己写的动态内存管理 跟ESP8266的驱动 在项目中测试460800的波特率 30kb一秒的数据接收 一包1024个字节 每包需要应答15字节的情况下 AT指令处理是使用多个缓冲级来处理模块发送过来的数据 分别有模块应答缓冲级 跟等待应答的缓冲级、被忽略的AT指令集的缓冲级(例如注册一个SEND OK\r\n则模块应答此条指令立刻清除缓冲级释放内存无需等待超时直接忽略)还有需要回调的缓冲级(则出现此指令调用回调函数)都是通过注册的方式来实现 如果出现一包跟指令被分到一个

资源截图

代码片段和文件信息

#include “at.h“
#include “string.h“
#include “memalloc.h“
#include “ucos_ii.h“
#include “hal_usart.h“
#include “delay.h“

//AT指令处理

at_t at;

static void at_receive_handle(u8 *bufu16 len);

//初始化
void at_init(u32 baud)
{
HalUSARTInit(AT_UART_PORTbaudat_receive_handle);
memset(&at0sizeof(at));
}

//设置波特率
//重新初始化串口
void at_set_baud(u32 baud)
{
HalUSARTInit(AT_UART_PORTbaudat_receive_handle);
}

//清除所有的AT指令应答
void at_clear_all(void)
{
for(u8 i=0;i if(at.at_rsp[i].len)
{
Free(at.at_rsp[i].buf);//释放内存
memset(&at.at_rsp[i]0sizeof(at_rsp_t));
}
}

//AT指令处理 
void at_processing(void)
{
u8 iindex;//关键字的缓存级首地址

for(i=0;i if(at.at_rsp[i].timeout == RESET && at.at_rsp[i].len)//如果该缓冲级的数据已经超时
{
Free(at.at_rsp[i].buf);//释放内存
memset(&at.at_rsp[i]0sizeof(at_rsp_t));
}

for(i=0;i if(at.at_wait[i].sta == AT_HAND_

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       10854  2017-12-05 10:21  at.c
     文件        2395  2017-11-25 11:15  at.h
     文件       22494  2017-11-25 13:48  hal_usart.c
     文件        1854  2017-11-23 16:03  hal_usart.h
     文件        2422  2017-11-27 16:20  Memalloc.c
     文件         539  2017-11-25 15:42  Memalloc.h

评论

共有 条评论