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
Code 0001: Wait rx completed相关推荐
- SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001-
SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001- 1, 执行事务代码MRRL 触发invoi ...
- Rx第三部分--深入序列
系列文章的第三部分将看一下Rx的除前面提到的简单代码外的其他特性.要构建高质量代码,通常需要处理错误.记录日志.特定场景下重试.释放资源.及在范例中剔除的其他现实问题. 本文的目的是让你将Rx当成工具 ...
- Observables简介以及它们与Promise有何不同
'Observables', 'Observables', 'Observables'...Yes! Today, we will talk about this often discussed wo ...
- 【RxSwift 实践系列 2/3】thinking in Rx- Create和Drive
---> 上节 [RxSwift 实践系列 1/3]为什么使用RxSwift RxSwift 是一种编程思想,不是一门语言,学习他最难的部分就是thinking in Reactive Prog ...
- 华工软院IBM LinuxONE Community Cloud云计算实验文档
此博文介绍华南理工大学软件学院"云计算开发与应用"实验课.本人在大二期间选修了这门课,实验课内容是把已有的app部署到云服务器上运行.虽然实验内容很简单(作者大概一个小时就做完了两 ...
- wkwebView基本使用方法
WKWebView有两个delegate,WKUIDelegate 和 WKNavigationDelegate.WKNavigationDelegate主要处理一些跳转.加载处理操作,WKUIDel ...
- git 设置有效目录_如何有效使用Git
git 设置有效目录 The code was working yesterday but today it is not 该代码昨天有效,但今天却没有 The code got deleted 代码 ...
- 异步/等待-什么时候返回Task vs void?
本文翻译自:async/await - when to return a Task vs void? Under what scenarios would one want to use 在什么情况下 ...
- DataView.RowFilter使用
有如下的DataView,现在按大类小类打印出分类列表. DataView dv = F.Studio.Trade.BLL.ClassBLL.Query().Tables[0].Def ...
最新文章
- 网站采用自建服务器的优点,企业自建网页的方法是怎样的,自建网站有哪些优点呢?...
- es 映射 mysql_ElasticSearch系列02:ES基础概念详解
- (转) Twisted :第十九部分 改变之前的想法
- Linux下使用wc命令快速统计所有文件的行数
- vue设置多选框默认勾选_vue中复选框怎么默认全选,至少选择4个才可以点击下一步...
- 2020 年微服务领域开源数字化报告发布,阿里扛起微服务大旗
- rs429-HI3282-HI3182笔记
- 计算机网卡的安装过程,千兆网卡怎么装_千兆网卡安装步骤
- 因为在此系统上禁止运行脚本_按键精灵调试脚本常见问题
- 重新加载script
- nodejs基于微信小程序的图书销售商城系统 uniapp 小程序
- python第三方库re库基本介绍
- IDM一直弹出下载框怎么办?
- 微信商城商家该如何运营
- BLE4.0低功耗蓝牙学习1. 蓝牙4.0ble协议栈的构成
- C语言每日一练——第32天:小球自由下落问题(第10次落地经过多少米,反弹多高?)
- 文件后缀名大全及其说明表
- Ad15的元器件的3D制作
- 为超链接设置屏幕提示
- 残差神经网络 ResNet
热门文章
- MySQL 基础 ———— 连接查询
- LeetCode算法入门- Remove Nth Node From End of List -day17
- java反序列化异常接不到_由Java对象反序列化异常想到的
- Web前端期末大作业--响应式健身会所网页设计(HTML+CSS+JS)实现
- mysql-5.1.73-8.el6_在centos中安装mysql详细步骤说明
- Java反射机制是什么?
- Eclipse编辑器字体大小的设置
- 华师计算机基础在线作业秋,18秋华师《计算机基础》在线作业(20210408185935).pdf...
- 山东大学 2020级数据库系统 实验五
- 数学建模学习笔记(二)——Topsis优劣解距离法