“必须执行Init_Clk函数,才能采集到二氧化碳接口485数据的问题”的解决
这个问题困扰了我很长一段时间,而且如果这个问题不解决,就有一个无法调和的矛盾:
执行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数据的问题”的解决的更多相关文章
- Python利用PyExecJS库执行JS函数
在Web渗透流程的暴力登录场景和爬虫抓取场景中,经常会遇到一些登录表单用DES之类的加密方式来加密参数,也就是说,你不搞定这些前端加密,你的编写的脚本是不可能Login成功的.针对这个问题,现在有 ...
- Javascript自执行匿名函数(function() { })()的原理分析
匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hell ...
- [Js/Jquery]立即执行匿名函数
摘要 有时使用js写了一个匿名方法,需要立即执行.因为没有方法名称,无法在其它地方调用. 匿名函数 匿名函数,可以认为是没有方法名称的函数. js中如果想执行匿名函数,结构如下: (function ...
- each(callback) 对于每个匹配的元素所要执行的函数
以每一个匹配的元素作为上下文来执行一个函数. 意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素).而且,在每次执行函数时,都会给函数传递一 ...
- C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
我自己写的 /// <summary> /// 函数运行超时则终止执行(超时则返回true,否则返回false) /// </summary> /// <typepara ...
- javascript自执行匿名函数
1)自执行匿名函数: 常见格式:(function() { /* code */ })(); 2)作用: function中的code代码在解释时就已经在运行了.因此可以用它创建命名空间, ...
- Javascript自执行匿名函数(function() { })()的原理浅析
匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一 ...
- Swift - 时间控制器NSTimer(每隔一定时间执行某个函数)
时间控制器NSTimer可以实现定时器功能,即每隔一定时间执行具体函数,可以重复也可以只执行一次. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cl ...
- linux下执行strlwr函数出错:ld returned 1 exit status
执行strlwr函数时报错.源程序例如以下: #include<stdio.h> #include<string.h> void main() { char s[10]={&q ...
随机推荐
- springmvc多个视图解析器
<property name="viewResolvers"> <list><!-- 多个视图解析器 --> <bean class=&q ...
- Arch Linux安装后的一些初始设置简介
配置有线网络. 没网络的时候,可以直接设定ip应急,后面 netctl 才是正规设置: # ip addr add 192.168.0.100/24 dev enp0s4# ip link set d ...
- 20175312 2018-2019-2 《Java程序设计》第2周学习总结
20175312 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第二.三章的学习,主要的学习渠道是视频,和书的课后习题. 总结如 ...
- A4988和CNC SHIELD使用方法 步进电机
接线视频 点这看视频 来源 https://www.basemu.com/a4988_pinout_and_how_to_use.html 注意要点 A4988既要12V外部供电,也要5V逻辑供电 我 ...
- 【Python】【自动化测试】【pytest】
https://docs.pytest.org/en/latest/getting-started.html#create-your-first-test http://www.testclass.n ...
- read_csv 的 names 和 index_col 参数作用
- Jellyfish详解
一.Jellyfish简介 JELLYFISH是CBCB(Center for Bioinformatics and Computational Biology)的Guillaume Marçais ...
- hdoj5769后缀自动机版本
网上的题解都是后缀数组,我来个后缀自动机题解. 建好后缀自动机后由于后缀自动机是单向的,那么dfs一遍记录各节点的size,要保证一个节点只经过一次才是O(n),否则是O(n^2).表示这个节点及后面 ...
- AI robots CodeForces - 1045G (cdq分治)
大意: n个机器人, 位置$x_i$, 可以看到$[x_i-r_i,x_i+r_i]$, 智商$q_i$, 求智商差不超过$k$且能互相看到的机器人对数. 这个题挺好的, 关键是要求互相看到这个条件, ...
- doxygen
//commndline: doxygen Doxyfile /**comment /* /** time diff@pre precondition@post endcondition@throw ...