这个问题困扰了我很长一段时间,而且如果这个问题不解决,就有一个无法调和的矛盾:
执行Init_Clk函数,能采集到二氧化碳接口485数据,但是功耗大;
不执行Init_Clk函数,不能采集到二氧化碳接口485数据,但是功耗小。
这个矛盾在这次的低功耗应用中可要了命了,我的要求是:既要能采集到所有数据,还要功耗低。

不执行Init_Clk函数,采集二氧化碳接口485数据时,表现出来的现象是:
485传感器没有任何响应,就好像没有给485传感器发过采集命令似的。
但是我用板子直接连接pc测试却是好的,pc确实收到了板子发来的数据,而且pc发给板子的数据板子也能收到。

起初以为是因为没有执行Init_Clk函数而使用的默认主频MCLK=1MHz太低了,
然后又以为是串口波特率发生器选用的时钟源不合适,
总之试了无数种方案之后都是失败。
就在我想放弃的时候,突然想到了串口发送时的几个延迟,
而这几个延迟并没有针对不同的主频做处理,会不会是这个原因呢?
答案是确定的。
看SendData函数中以下程序:
#ifdef APP_HARDWARE_VERSION_3
P9OUT |= BIT0;
//要使用485必须要加上以下的两个延迟,否则发送的数据不全
Delay_ms(2);
#endif

Uart2SendData(pcSendBuf, iSendLength);

#ifdef APP_HARDWARE_VERSION_3
Delay_ms(5);
P9OUT &= ~BIT0;
#endif
其中Delay_ms函数是关键,我之前的处理并没有区别对待,把Delay_ms修改为以下:
void Delay_ms(unsigned long nValue)
{
unsigned long nCount;
int i;
unsigned long j;

#ifdef HAS_INIT_CLK
nCount = 2048; // MCLK = XT2CLK, 16MHz
#else
nCount = 2048/16;
#endif

for (i = nValue; i > 0; i--)
{
for (j = nCount; j > 0; j--)
;
}
}
注意有HAS_INIT_CLK的地方。
修改之后,终于即便不执行Init_Clk函数也可以正确采集二氧化碳接口485数据了。

“必须执行Init_Clk函数,才能采集到二氧化碳接口485数据的问题”的解决的更多相关文章

  1. Python利用PyExecJS库执行JS函数

      在Web渗透流程的暴力登录场景和爬虫抓取场景中,经常会遇到一些登录表单用DES之类的加密方式来加密参数,也就是说,你不搞定这些前端加密,你的编写的脚本是不可能Login成功的.针对这个问题,现在有 ...

  2. Javascript自执行匿名函数(function() { })()的原理分析

    匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hell ...

  3. [Js/Jquery]立即执行匿名函数

    摘要 有时使用js写了一个匿名方法,需要立即执行.因为没有方法名称,无法在其它地方调用. 匿名函数 匿名函数,可以认为是没有方法名称的函数. js中如果想执行匿名函数,结构如下: (function ...

  4. each(callback) 对于每个匹配的元素所要执行的函数

    以每一个匹配的元素作为上下文来执行一个函数. 意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素).而且,在每次执行函数时,都会给函数传递一 ...

  5. C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

    我自己写的 /// <summary> /// 函数运行超时则终止执行(超时则返回true,否则返回false) /// </summary> /// <typepara ...

  6. javascript自执行匿名函数

    1)自执行匿名函数: 常见格式:(function() { /* code */ })(); 2)作用:       function中的code代码在解释时就已经在运行了.因此可以用它创建命名空间, ...

  7. Javascript自执行匿名函数(function() { })()的原理浅析

    匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一 ...

  8. Swift - 时间控制器NSTimer(每隔一定时间执行某个函数)

    时间控制器NSTimer可以实现定时器功能,即每隔一定时间执行具体函数,可以重复也可以只执行一次. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cl ...

  9. linux下执行strlwr函数出错:ld returned 1 exit status

    执行strlwr函数时报错.源程序例如以下: #include<stdio.h> #include<string.h> void main() { char s[10]={&q ...

随机推荐

  1. Docker Kubernetes 环境搭建

    Docker Kubernetes 环境搭建 节点规划 版本 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 etcd存储版本:etcd-3. ...

  2. [译]课程 1: 使用 Quartz

    译者注: 原文在这 Lesson 1: Using Quartz 在你使用调度器之前, 你需要先实例化(能猜到是谁么?). 要实例化, 请使用 ISchedulerFactory 的实现. 译者注: ...

  3. Linux——入门命令

    授课内容: 0.linux系统由来 linux各种常用命令以及对命令参数选项的熟悉: 1.目录操作命令([跳转:查看自己当下的位置-绝对路径:查看任何路径下的目录内容]pwd(Print Workin ...

  4. Redis 队列好处

    Redis 队列好处 .降低流量高峰(并不是提升处理能力,系统的整体处理能力不变) .解除耦合(任务格式定好,各自演变,互不影响) .高可用(后台升级/崩溃完全不影响客户端的响应)

  5. 关于ExpressionChangedAfterItHasBeenCheckedError

    最近在stackoverflow上似乎每天都有一些关于angular报错‘ExpressionChangedAfterItHasBeenCheckedError’的问题.发生这些问题通常是由于angu ...

  6. Hibernate向数据库存入BLOB和CLOB类型的数据

    我选用的是byte[] +@Lob 刚开始采用的java.sql.Blob,将上传的图片getBytes()后,通过Hibernate.getLobCreator(HibernateSessionFa ...

  7. springboot应用无故停止运行killed解决方法

    最近使用springboot开发了一个ip代理的程序,今天放到阿里云服务器上运行,多次出现应用运行突然停止的问题. 使用free -h 查看内存使用完全正常.重新运行监视CPU使用也正常.没有出现堆内 ...

  8. 4、NFS

    一.NFS简介 4.1.1:什么是NFS NFS(Network File System,网络文件系统)是由SUN公司开发,并于1984年推出的技术,通过使用NF,用户和程序可以向访问本地文件一样访问 ...

  9. sublime-代码提示

    py的话安装这个插件: Anaconda user配置 { "python_interpreter":"F:/PY3/python.exe", "su ...

  10. css3-盒模型display:-webkit-box;的使用

    提到移动布局不得不提到盒模型display:-webkit-box;这个属性,在移动布局中浮动已经不在重要,相反自适应成为主要的需求,所以display:-webkit-box;变得尤为重要. box ...