这个问题困扰了我很长一段时间,而且如果这个问题不解决,就有一个无法调和的矛盾:
执行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. Linux 系统日志

    查看日志服务 大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd 或/etc/rsyslog.d,默认配置文件为 /etc/syslo ...

  2. charles License

    ubuntu charles 配置 Ubuntu16.04系统Charles的配置   key1: Registered Name: https://zhile.io License Key: 488 ...

  3. docker原理与上帝进程

    做个笔记, 先水一会. 虚拟机指的是: 在软件的层面上通过模拟硬件进行的输入输出. docker原理:docker就是一个linux系统的进程, 它通过 Linux 的 namespaces 对不同的 ...

  4. Spring错误——Spring 注解——factory-bean reference points back to the same bean definition

    背景:学习Spring,在使用注解@Bean的name属性配置<bean>实例时,不能注册实例成功 报错 WARNING: Exception encountered during con ...

  5. #map+LCA# Codeforces Round #362 (Div. 2)-C. Lorenzo Von Matterhorn

    2018-03-16 http://codeforces.com/problemset/problem/697/C C. Lorenzo Von Matterhorn time limit per t ...

  6. C# ToLookup

    下文参考翻译自: C#/.NET Little Wonders: The ToLookup() LINQ Extension Method 故事的背景 让我们先来创建一个简单的类来表示产品,产品有ID ...

  7. _quick_response

    在线答题,抢答 `question` 题库 `correctAnswer` 正确答案(A,B,C,D) `answerA` 选项显示 `answerB`选项显示 `answerC` 选项显示 `ans ...

  8. RNN流程

    1.记号 2.前向计算,第二张图是第一张图的公式的简化.其中a称之为隐状态 3.计算代价函数

  9. DOMContentLoaded方法

    document.addEventListener('DOMContentLoaded',function(){ alert("SSDD") },false);

  10. 微信支付---H5支付

    这里说的H5支付是指在微信外的浏览器打开H5商家的支付,切勿与公众号微信内支付混淆, 1.H5支付的开通流程 登陆微信商户平台页面:https://pay.weixin.qq.com/wiki/doc ...