![](https://img-blog.csdnimg.cn/20200307133033909.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
UCOSSIII开发技术
文章平均质量分 58
UCOSSiii是嵌入式多任务操作系统,这里将致力于UCOSSIII技术的深度交流以及介绍。
zxm8513
我的心里有精灵...
工业互联网在企业数字化转型中的贡献类似于实体经济之于国家经济的贡献。
展开
-
STM32F103启动文件分析
STM32F103的启动文件在某种程度上决定了系统的配置的准确性和可运行特性,因此对启动文件的分析非常重要。参数的设置,既要有规则控制又要有经验设置。需要开发人员熟悉每个参数的重要性,否则系统运行资源配置不均衡,发挥不出性能是小事,影响了稳定性就是大事。原创 2023-11-03 11:12:54 · 214 阅读 · 0 评论 -
卡尔曼滤波算法
滤波是幅度,对于RSSI的滤波处理,建议采用Q = 7 ,R = 300。过修改Q值和R值,来更改。原创 2022-09-10 16:50:02 · 186 阅读 · 0 评论 -
STM32+Cjson的实战教程
JSON全称 JavaScript Object Notation,即 JS对象简谱,是一种轻量级的数据格式。它采用完全独立于编程语言的文本格式来存储和表示数据,语法简洁、层次结构清晰,易于人阅读和编写,同时也易于机器解析和生成,有效的提升了网络传输效率。原创 2022-08-22 23:23:42 · 627 阅读 · 0 评论 -
嵌入式系统关于晶振的问题汇总
这两个都是换了晶振解决。当时不小心焊上了0.1uF的,导致无法起振,自动启用内部的晶振,所以也就是楼主说的慢了好几倍,呵呵,换了正确的电容后,就一切正常,没有出现过问题。第一次遇到是忘了焊接22P的电容,板子可以工作,但是运行速度慢,但是晶振起振了,示波器看波形有刺,想必是STM32认为外部晶振信号不好,自己用了内部的时钟,焊上22P电容,波形变好,板子正常工作;第二次是装在机器里面的板子,突然也是变慢了,以为是电源烤坏了晶振,因为电源比较热,整机是全密封的,拆下晶振重新焊一个,OK,再没出过问题。...原创 2022-08-10 15:32:10 · 397 阅读 · 0 评论 -
C语言中volatile修饰变量,及其余const的区别
volatile修饰的变量表示是随时可以发生变化的,因此当编译器用到这个值的时候会重新去调用其数值,而不是使用保存在寄存器的备份。Volatile一般来修饰寄存器变量,因为寄存器里面存数的数据会经常发生变化。Volatile只是一个修饰关键字因此可以用数据类型放在前边修饰比如:const volatile a;表示a是一个volatile类型的常量,说是常量是因为在程序运行中程序不能更改这个数值,但是它可能会意想不到的发生改变。通过指针来定义寄存器变量。............原创 2022-08-09 10:15:08 · 1027 阅读 · 0 评论 -
C语言中:memmove、memcpy和strcpy的区别
memcpy()和memmove()都是c语言的库函数(头文件保护#include ),作用是拷贝一定长度内存的内容。它们唯一的区别是当内存发生局部重叠时,memmove可以保证拷贝正确,memcpy拷贝的结果是未定义的(取决于编译平台内部对memcpy的优化处理)。memmove()和memcpy()函数对所有类型都使用,为内存拷贝(原理:就是利用字节数,交换位置数据的);②.memmove()函数在memcpy()函数的基础上加入了对内存重叠拷贝的处理;count:拷贝的字节数。原创 2022-09-10 16:46:29 · 184 阅读 · 0 评论 -
按照比例缩放图片
function scaleImage(ImgD, FitWidth, FitHeight){ var width = ImgD.width, height = ImgD.height; var w = width / FitWidth, h = height / FitHeight; if (w >= h) { //宽度固定,高度缩放 ImgD.width = FitWidth; ImgD.height= heig...原创 2021-12-16 10:05:02 · 773 阅读 · 0 评论 -
KeiL MDK编译器的编译故障之unreachable
u32 getspeed(u8 rate){ switch(rate) { case 0: return 1200; break; case 1: return 2400; break; case 2: return 4800; break; case 3: return 9600; break; case 4: return 19200; break; case 5: return 3...原创 2021-11-26 23:59:49 · 787 阅读 · 0 评论 -
keil中忽略特定警告的方法
添加--diag_suppress=num (注意:双横杠)如果想屏蔽177-D继续在后面用逗号割开--diag_suppress=num ,num2原创 2021-11-26 15:17:41 · 1596 阅读 · 0 评论 -
AM2302+STM32驱动程序
AM2302是一款通过数字信号输出来测量空气温湿度的传感器,可测量0~99.9%RH范围内的湿度,精度为±2%RH,分辨度为0.1 RH;可测量-40℃~80℃范围内的温度,精度为±0.5℃,分辨度为0.1℃。该传感器是一个三针脚模块,包含VCC、DATA、GND(相对于DHT11,其中一个引脚被封装在内部)三个引脚,VCC接电压范围是3~5V,GND接地,DATA与单片机的引脚相接,并接上一个4.9k或以上阻值的上拉电阻。AM2302采用单总线数据格式的通讯,一次传送40位的数据,按照传送的先后顺原创 2021-05-08 16:40:20 · 1100 阅读 · 1 评论 -
STM32代码空间不够问题的解决
在MDK中,产生如下可执行区域不够的情况.\Obj\103ZE_MDK5.axf: Error: L6406E: No space in execution regions with .ANY selector matching usbd_msc_bot.o(.data)..\Obj\103ZE_MDK5.axf: Error: L6406E: No space in execution regions with .ANY selector matching stdout.o(.data)..\Ob原创 2021-02-24 15:52:37 · 4374 阅读 · 0 评论 -
STM32浮点数处理的问题及其注意事项
在STM32的编程实践中,出现这么一个问题flaot a;int b;a = b/100;操作的结果错误,直接就是0;如果:a = b;a=a/100;操作结果正确,在开发中要注意这个问题原创 2021-01-27 11:21:48 · 2512 阅读 · 2 评论 -
STM32F103 KeilMDK中sprintf输出有问题
在使用sprintf输出字符串的时候如果使用到浮点数的时候,出现问题。代码如下: for(i = num;i < max;i++) { sprintf(tstr," SN=%.3d Hmivar=%.4X Val=%.5d Mode=%.2d Regid=%.5d ExeCode=%.2X %.2X %.2X %.2X %.2X %.2X \r\n", i,touprg[i].hmivar,touprg[i].val,touprg[i].mode,touprg[i].re原创 2020-12-31 16:18:13 · 3311 阅读 · 0 评论 -
STM32F103 GPIOA->CRL&=0XFFF0FFFF配置端口方向
CRH的作用和CRL完全一样,只是CRL控制的是低8位输出口,而CRH控制的是高8位输出口。这里我们对CRH就不做详细介绍了。给个实例,比如我们要设置PORTC的11位为上拉输入,12位为推挽输出。代码如下: GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003;//PA8 推挽输出 GPIOA->ODR|=1<<8; //PA8 输出高再如: ...原创 2020-12-17 23:36:36 · 10960 阅读 · 1 评论 -
ULN2803驱动模块的使用
COM端主要有两种bai用途:1 试验du用----接地:如输出端全都接zhi发光二dao极管,只要将COM端接zhuan地,则所有的发光二极管都将亮起,这对检修是很有利的。2 保护用----接电源正(不要大于50V):如输出端接继电器等,会因电感的作用在开关过程中产生感应电动势,这样很容易击穿器件。为了防止这种现象的发生,将COM端接到电源正(负载端正电压),来削减其电压的冲击。3、没有以上的原因,也可悬空。一般情况下是应用2。...原创 2020-11-28 16:30:57 · 12800 阅读 · 0 评论 -
W5500 NTP获取网络时间实现
TP 是网络时间协议,将获取到的网络时间同步到本地,是本地时间与网络同步。一般来说,STM32通过W5500从NTP服务器获取到之后,会存同步到DS1302时钟芯片中,再读取DS1302时间在应用中使用。DS1302的时间设置和读取,可以参考《STM32F10x读取DS1302的时间,通过USART显示在串口调试助手上》。NTP协议是基于UDP基础上封装的协议,NTP报文格式 可以参考《NTP报文格式》。STM32驱动W5500,使用UDP来实现获取NTP网络时间的代码实现:NTP服务器..原创 2020-11-12 16:09:07 · 1286 阅读 · 1 评论 -
W5500网络诊断设备的调试要点
W5500通过ICMP协议Ping其它设备,检测网络的故障装填,这里把调试的重点说明一下:1、在代码里不要有无缘无故的等待操作,需要固定时间等待,千万不要while等待,否则会死等下去;2、Ping的数据包可以小一些,我用的是64,一般的使用128,这样可以节约网络效率;3、W5500有8个socket,每个SOcket可以有不同的功能,自己定义,但是ICMP属于网络层的协议,不属于IP层,但是也可以和IP协议同一应用里,而且运行可靠。4、一般情况下PING的返回包大小为数据包+8,比如12原创 2020-11-01 15:49:01 · 1178 阅读 · 1 评论 -
UCOSII系统低优先级怎么获的执行机会
在UCOSII系统中,实际上它不是真正的时间片调度,而是基于优先级的调度,这样和时间片调度各有好处,下面讲解我在网络故障诊断应用中的两个任务中,低优先级的怎么抢到时间片的。#define Task_Checkstate_PRIO 10#define Task_LUA_PRIO 8#define Task_Script_PRIO ...原创 2020-11-01 15:29:34 · 568 阅读 · 0 评论 -
STM32+SI7021驱动程序(完全版)
SI7021是一款低功耗、低成本的温湿度一体化传感器,具有非常好的性价比,使我们通常使用的传感器之一,这里写出它的驱动,大家可以放心使用,使用PB8和PB9作为时钟控制引脚和数据引脚,模拟IIC通信。敬请大家享用。 头文件定义如下//***************************************************// Seipher.ZXM 2020.9.22// SI7021 Temp&Humi C Driv...原创 2020-10-23 11:27:39 · 1349 阅读 · 0 评论 -
STM32内部CPU温度监测方法及计算。
STM32有一个内部温度监测传感器,它的使用一般情况下不解决什么问题,但是对于日常使用还是有一定的作用。内部温度传感器通道号16 初始化及配置代码为: USARTSET usartset; /* System Clocks Configuration --72M*/ RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); OS_CPU_SysTickInit(); //ADC³õʼ»¯原创 2020-10-22 15:43:04 · 4736 阅读 · 0 评论 -
增量型PID的简单算法实现之一
struct _pid{ float SetSpeed;//定义设定值 float ActualSpeed;//定义实际值 float err;//定义偏差值 float err_next;//定义上一个偏差值 float err_last;//定义最上前的偏差值 float Kp, Ki, Kd;//定义比例、积分、微分系数}pid;{初始化}void PID_init(){ pid.SetSpeed = 0.0; pid.ActualSpeed = 0.0; pid.err.原创 2020-09-02 15:07:36 · 500 阅读 · 0 评论 -
PID调节算法在STM32上的实现
(一)PID控制算法(P:比例 I:积分 D:微分)(二)首先先说明原理,使用的是数字PID算法,模拟PID算法在计算机这样的系统中是不能够直接使用的,数字PID算法又分为位置式PID控制算法和增量式PID控制算法,那么下面从原理上说明这两种算法(三)原理分析如图(四)从上面图中我们可以得到定义定义变量用户设定值: SV当前值(实际值): PV偏差: E = SV - PV(五)如果我们在一段时间内就从传感器读取一个值,那么我们就可以得到一个实际值的数据序列原创 2020-09-02 14:52:38 · 9262 阅读 · 4 评论 -
STM32 stack_size和heap_size大小设置的意义
在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小。如下图所示的启动代码中,Stack栈的大小为:0x400(1024Byte),Heap堆的大小为:0x200(512Byte)。1、若工程中使用的局部变量较多,定义的数据长度较大时,若不调整栈的空间大小,则会导致程序出现栈溢出,程序运行结果与预期的不符或程序跑飞。这时我们就需要手动的调整栈的大小。2、当工程中使用了malloc动态分配内存空间时,这时分配.......原创 2020-09-01 20:13:07 · 32346 阅读 · 3 评论 -
Keil MDK中的Code,RO-data RW-data,ZI-data分别代表什么意思
Code代表执行的代码,程序中所有的函数都位于此处。RO-data代表只读数据,程序中所定义的全局常量数据和字符串都位于此处。比如const类型的数据 (除inline data之外的只读数据)。RW-data代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。ZI-data 代表未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。ROM size: 也就是下载到单片机FLASH中的数据为 Code +RO-data +RW-data 和的大小..原创 2020-08-30 21:15:49 · 1149 阅读 · 0 评论 -
keil空间不足,L6406E: No space in execution regions with .ANY selector
关于keil空间报错,我总结了一下集中解决方案:1、有可能是所选主控芯片RAM,ROM真的被用完了,这是需要更换主控芯片2、keil里面的优化还可以继续优化省出一点空间下面红色标的选择跟你的主控芯片一样大小的空间数值3、还可以做如下优化,打开优化等级,优化等级越高程序优化的越多3、有可能是程序里面的配置出错了,实际上芯片空间没用多少但是编译后报错空间没有了,解决如下,红色标的可以改为0x00000000...原创 2020-08-26 23:00:57 · 13033 阅读 · 1 评论 -
LUA脚本语言语法-学习笔记三
Lua 模块与包模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建...原创 2020-03-09 16:49:51 · 208 阅读 · 0 评论 -
LUA脚本语言语法-学习笔记二
Lua 循环很多情况下我们需要做一些有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。Lua 语言提供了以下几种循环处理方式:循环类型 描述 while 循环 ...原创 2020-03-09 16:41:44 · 270 阅读 · 0 评论 -
LUA脚本语言语法-学习笔记一
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar C...原创 2020-03-09 15:58:50 · 361 阅读 · 0 评论 -
工业控制中常用滤波算法
在工业过程控制系统中,由于被控对象的环境比较恶劣,干扰源比较多,仪器、仪表采集的信息常会受到干扰,所以在模拟系统中,为了消除干扰,常采用RC滤波电路,而在由工业控制计算机组成的自动检测系统中,为了提高采样的可靠性,减少虚假信息的影响,常常采用数字滤波的方法。数字滤波的方法有很多种,可以根据不同的测量参数进行选择。下面给出几种常用的数字滤波方法的C语言函数,这些函数有一定的通用性,适用于PC...原创 2020-03-08 11:11:52 · 1790 阅读 · 0 评论 -
STM32F103低功耗唤醒代码
STM32F103低功耗虽然应用中有点鸡肋的感觉,但是也有他的优势,做好的话也可以世道30uA左右的待机电流,在一些要求不高的场合还是有它的用途,这里整理了一些相关应用出现的问题和解决方案以及代码。1、主要问题问题 我的RTC初始化部分有个“保存在备份寄存器的RTC标志是否已经被配置过的判断”,如果已经配置过,则进入else部分,但是这个else部分没有“要使能电源时钟,使能备份...原创 2020-03-08 09:42:22 · 1529 阅读 · 0 评论 -
MDK中AT45DB161驱动程序
头定义文件中规定了STM32的引脚系统,使用时要改动一下://***************************************************// Seipher.ZXM 2019.9.22// AT45DB161硬件支持4096个页面,每个页面512个字节,最大地址支持2097152个字节//***************************...原创 2020-03-07 17:30:53 · 2676 阅读 · 0 评论 -
使用W5500与外网通信故障解决(MAC地址问题)
在蒲城项目的调试时,AMS500发现一个致命的问题,就是:在局域网跨网段通信时候和中心服务器不能通信,但是在一个HUB下是没有问题的,以前的串口服务器有过类似的问题出现,解决方法说是芯片的问题,结果也不了了之,换了芯片正常。我们的网络通信芯片选择W5500,其中的MAC地址采用的是CPU的序列号作为Mac地址的问题就出在这,我们在使用的时候MAC地址的第一个必须是偶数,我们忽视了。现象描...原创 2020-03-07 17:24:08 · 6651 阅读 · 0 评论