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;
               }
           }
       }
  }
} 
时间: 2024-10-23 16:10:39

Code 0001: Wait rx completed的相关文章

解决 docker 报错: Error starting daemon: error initializing graphdriver: backing file system is unsupported for this graph driver

CentOS 7.5 x64下 sudo yum install docker -y systemctl enable docker systemctl start docker 发现启动失败 journalctl -xe 查询获得报错 Jan 11 22:49:16 localhost.localdomain dockerd-current[29403]: time="2019-01-11T22:49:16.686305029+08:00" level=info msg="

Jquery Ajax + php 三级联动实例

sanji.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&quo

URAL - 1785,1293,1877,1409,1820,1787,1264,2012

开始水URAL,今天先来几个.. 1785. Lost in Localization Time limit: 1.0 second Memory limit: 64 MB The Lavin Interactive Company, which has developed the turn-based strategy Losers-V, is constantly extending its target market by localizing the game to as many la

SQL优化技巧(Oracle)

SQL优化技巧(1): Where子句中的连接顺序:oracle采用自下而 上的顺序解析where子句,根据这个原理,表 之间的连接必须写在其他where条件之前,那些可以过滤掉大量记录的条件 必须写在where子句的末尾. 例如 低效:select * from report_sale_account e where hsje>5000 and dzxl = '000001' and 25<(select count(*) from report_sale_account where cod

AJAX 三级联动

html代码 <select id="str1"> <option>加载中...</option> </select> <select id="str2"> <option>加载中...</option> </select> <select id="str3"> <option>加载中...</option> <

实现三级联动

三级联动: 通过查询数据库,通过父级代号查询相应省市区. 在js页面实现三级联动 在JQuery中调用Ajax方法(引用JQuery文件一定放在最上面) 用插件的形式,创建三个下拉列表 主页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm

仅通过崩溃地址找出源代码的出错行

作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?--错啦!我相信我的看法是不会有人反对的--那就是,程序发生了崩溃! "该程序执行了非法操作,即将关闭.请与你的软件供应商联系.",呵呵,这句 M$ 的"名言",恐怕就是程序员最担心见到的东西了.有的时候,自己的程序在自己的机器上运行得好好的,但是到了别人的机器上就崩溃了:有时自己在编写和测试的过程中就莫名其妙地遇到了非法操作,但是却无法确定到底是源代码中的哪行引起的--是不是很痛苦呢?不要紧,本

用jQuery,ajax,实现三级联动封装JS的文件

// JavaScript Document $(document).ready(function(e) { //找到ID=SANJI的DIV,造三个下拉扔进去 var str = "<select id='sheng'></select><select id='shi'></select><select id='qu'></select>"; $("#sanji").html(str); //

Spring拦截器

Spring的拦截器具备在web的前置和后置来处理各种请求. 拦截器接口-HandlerInterceptor 自定义的拦截器,需要继承HandlerInterceptor接口,并且实现HandlerInterceptor中提供的三个方法: 1. preHandle 方法会在请求处理前被调用.这个方法返回boolean值,如果返回true则继续往下执行,如果返回false则中断. 2. postHandle 方法会在请求处理后,继续调用. 3. afterCompletion 方法会在视图渲染之