Code 0001: Wait rx completed

注意:以下Demo适用于不带DMA功能的串口。

Demo0001

/* 方法: wait_rx函数每1ms扫描串口是否有接受数据,如果长时间没有收到数据,则接受完成。

 * 分析: 该方法存在的问题是扫描时间需要配合串口波特率进行设置, 好处是数据传输没有特殊格式要求。

 */

static struct
{uint16 index;uint8 items[LORA_UART_RECV_BUF_SIZE];
}lora_uart_rx_buf;/** @fn      halKeyPort1Isr* @brief   Port1 ISR* @param* @return*/
HAL_ISR_FUNCTION(halGPRSUartIsr,URX0_VECTOR)
{  URX0IF = 0;                if(lora_uart_rx_buf.index >= LORA_UART_RECV_BUF_SIZE)lora_uart_rx_buf.index = 0;lora_uart_rx_buf.items[lora_uart_rx_buf.index ++] = U0DBUF;   
} /** @fn      wait_rx* @brief   wait for rx completed* @param   none* @return  none*/
uint8 wait_rx(uint32 times)
{uint8 timeout = 0;uint8 pre_cnt = 0;while(timeout++<times){if (lora_uart_rx_buf.index > 0) {pre_cnt = lora_uart_rx_buf.index;break;}lora_delayms(1);      /* todo: should be replaced */}if (timeout >= times) {return 0;}lora_delayms(1);        /* todo: should be replaced */while(lora_uart_rx_buf.index != pre_cnt) {pre_cnt = lora_uart_rx_buf.index;lora_delayms(1);     /* todo: should be replaced */}return 1;
}

 Demo0002

/* 方法: 约定结束标志,以接收到结束标志完成接受

 * 分析: 该方法存在的问题是必须按照规定的格式发送数据, 好处是不需要考虑波特率等串口特性。

 */

void USART1_IRQHandler(void)                    
{u8 Res;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {Res =USART_ReceiveData(USART1);if((USART_RX_STA&0x8000)==0) {if(USART_RX_STA&0x4000) {if(Res!=0x0a) {
        USART_RX_STA=0;
      } else {
        USART_RX_STA|=0x8000; }
    }
else { if(Res==0x0d) { /* end with 0x0d */
        USART_RX_STA|=0x4000;
      } 
else {USART_RX_BUF[USART_RX_STA&0X3FFF]=Res;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1)) {
           USART_RX_STA=0; } }} } }

 

 Demo0003

/* 方法: timeout实现,timeout时间内未收到数据,结束本次数据接收

 * 分析: 该方法和Demo0001原理相同,只是实现方式有所区别,这边将timeout写入接受函数里。

 */

/**
  *name  : UART_Recv
  *brief : UART receive data
  *param : UARTx : Select UART peripheral, UART0/2/3 and UART1
  *        *rxbuf: pointer of rx buffer
  *        rxlen : length of receiving data
  *retval: length of receiving data
  */
uint8_t UART_Recv(UART_TypeDef* UARTx, uint8_t *rxbuf, uint8_t rxlen)
{
    uint32_t len = 0, timeout;
    while(rxlen){
        timeout = UART_BLOCKING_TIMEOUT;
        while (!(UARTx->LSR & UART_LSR_RDR)){
            if (timeout == 0) break;
            timeout--;
        }
        if(timeout == 0) break;
        
        *rxbuf++ = UART_RecvData(UARTx);
        rxlen--;
        len++;
    }
    return len;
}

转载于:https://www.cnblogs.com/HongZheng/p/5954366.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windwos cakephp mysql apache_配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境

1. 安装配置apahce安装配置apache是比较简单的&#xff0c; 跟着安装向导一步步往下走就能搞定。最多就是在配置端口的地方需要注意一下&#xff0c;如果已经安装了其它web服务器占用了80端口&#xff0c;那记得配置的时候选一个别的端口。向导中忘了设置&#xff0c;在apache的…

python 单链表是否有回路_第5章 第1节 链表

● 请你说出几种基本的数据结构&#xff0c;参考回答&#xff1a;常见的基本的数据结构有链表、栈、队列、树(只列出面试常考的基本数据结构)1、链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系…

linux下如何使用sftp命令【转】

linux下如何使用sftp命令 from&#xff1a; http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888391.htmlsftp 是一个交互式文件传输程式。它类似于 ftp, 但它进行加密传输&#xff0c;比FTP有更高的安全性。下边就简单介绍一下如何远程连接主机&#xff0c;进行文件…

netbean下搭建mariadb数据库

本人的操作系统Manjaro 最新版&#xff0c;mariadb版本为10.1.1&#xff0c;使用netbeasn开发java WEB&#xff0c;搭建过程如下&#xff1a; 1、安装数据库 pacman -S mariadb 2、启动数据库服务&#xff1a; systemctl start mariadb(启动) systemctl stop mariadb(关闭) 3、…

syslog打印不带等级_syslog之一:Linux syslog日志系统详解

目录&#xff1a;一、syslog简介syslog是一种工业标准的协议&#xff0c;可用来记录设备的日志。在UNIX系统&#xff0c;路由器、交换机等网络设备中&#xff0c;系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录&#xff0c;随时掌握系统状…

推进五通一平:手淘技术三大容器 五大方案首次整体亮相 百川开放升级

在云栖大会上&#xff0c;马云提出五个“新”&#xff0c;新零售、新制造、新金融、新技术和新能源&#xff0c;称将对各行各业造成巨大的影响&#xff0c;成为决定未来成败的关键。而五个新的实现&#xff0c;也必须是各行各业共同推进&#xff0c;整个生态共同受益的结果。继…

linux mysql管理软件_8款适合Linux用户使用的数据库管理工具!

从内容管理系统到简单的表格&#xff0c;数据库是每一个开发项目的一部分。这就是为什么开发者们如此强调使用正确类型的数据库工具。下面这些可能对您有所帮助&#xff01;Autotabla是一个你的程序的SQL数据表的CGI管理界面。只需要提供你数据库架构的XML描述&#xff0c;你就…

C#事件与接口

using System;namespace ConsoleApplication1d {delegate void MsgDel(string s);interface IMsg{event MsgDel msgd;void Excute(string s);}class MInfo : IMsg//必须实现接口的全部成员&#xff0c;如事件&#xff0c;函数{//不写这句会提示 Minfo does not implement inter…

jq 下拉加载每次只执行一次_记一次 无限列表 滚动优化

背景长列表优化&#xff0c; 是页面性能优化中的一个比较常见的问题&#xff0c;也是面试中的常客。刚好最近在的项目中&#xff0c; 遇到了一个长列表的性能问题&#xff0c;试过多种方案&#xff0c; 最后得以解决。今天就给大家分享一下。正文场景描述用户需要批量修改 Prod…

2016-5-31 问题及解决

1.执行linux版本时&#xff0c;碰到官方默认发布的cef3二进制包&#xff0c;不支持在动态库中初始化cef3现象&#xff1a;启动时报一下错误->FATAL:content_main_runner.cc(662)] Check failed: base::allocator::IsAllocatorInitialized()原因&#xff1a;在共享库中初始化…

mysql fio测试_Linux下 fio磁盘压测笔记

专业的测试磁盘IO性能的软件&#xff1a;1、fio 【推荐使用】2、iometerfio的使用&#xff1a;参考博客&#xff1a; http://lilinji.blog.51cto.com/5441000/1569623https://linux.die.net/man/1/fiohttp://elf8848.iteye.com/blog/2168876 【讲的比较好】注意&#xff0c;我…

清除浮动塌陷的4种经典套路

【自古深情留不住&#xff0c;总是套路得人心。】 这些日子&#xff0c;各个朋友圈随时可以见到这句话的身影。的确人们常说&#xff1a;“多一点真诚&#xff0c;少一点套路。”&#xff0c;但是最终现象写实也是那么残酷和无奈。 同样在前端攻城狮的道路&#xff0c;我们都是…

mysql有没有开窗函数_mysql实现开窗函数

mysql实现开窗函数开窗分析函数简单来讲就是相似partition by aaa, bbb order by ccc这样的形式mysql在使用mysql的过程当中遇到过这样的需求&#xff0c;须要求出一段时间内每一个item的最大值及对应的那一条记录。最大值很容易使用group by item求出来&#xff0c;可是求出那…

java 格式化时间计算

package com.roshi.utils.common;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class DateUtilsCom {/*** 格式化时间 * param date* return* author lzq* throws ParseException * date 2016年…

微信小程序点播插件_微信小程序 wxParse插件显示视频问题

修改wxParse/html2json.js 文件 &#xff0c;在 html2json(html, bindName)方法里var node {node: element,tag: tag,};这里使用 node.tag 能够获取标签类型&#xff0c;比如&#xff1a; img、embed、video这里我的系统后台编辑器使用的是ckeditor 上传视频。生成的便签是&am…

GridView - Batch Editing - How to cancel editing or disable the editor conditionally

Please refer to :https://www.devexpress.com/Support/Center/Example/Details/T115116转载于:https://www.cnblogs.com/michelledawm/p/5980940.html

linkerd mysql_Linkerd和k8s无法正常工作

我试图让我的头在kubernetes的链接。我在我的本地minikube中使用他们网站上的linkerd deamonset示例它全部部署在production命名空间中。当我尝试http_proxy$(kubectl --namespaceproduction get svc l5d -o jsonpath"{.status.loadBalancer.ingress[0].*}"):4140 cu…

mssql 跨库获取mysql

exec sp_addlinkedserver serverMYSQL, --这是链接服务器的名称 srvproductmysql, --这个你自己随便吧 providerMSDASQL, --这是固定的&#xff0c;不能瞎填&#xff0c;否则死定了 datasrcmyserver, --这是ODBC里面data source name,系统DNS locationNULL, provstrDRIVER{MyS…

mysql standalone模式_Boss7 Standalone模式开发配置

PS&#xff1a;以下配置均添加到standalone.xml文件中。1.Get请求编码设置&#xff0c;将如下配置添加到标签之后2.开启开发模式&#xff1a;搜索“urn:jboss:domain:web:1.1”&#xff0c;在此标签下添加如下配置&#xff1a;3.虚拟域名设置搜索“urn:jboss:domain:web:1.1”&…

机器学习笔记——深度学习入门篇

前向传播与反向传播转载于:https://www.cnblogs.com/hdu-cpd/p/5988606.html