- 博客(278)
- 资源 (12)
- 收藏
- 关注
原创 FreeRtos-重要概念
一个任务函数在执行的时候,可能会被其他高优先级的任务抢占CPU,也可能被任何一个中断的ISR函数抢占CPU。另一个称为“中断级”,即带后缀“FromISR”的函数或带后缀“FROM ISR”的宏函数,中断级API函数也被称为中断安全API函数。任务的优先级是编程者在软件中赋予的,任务的优先级数字越低表示优先级越低,所以任务的最低优先级为0。任务只有在没有ISR运行的时候才能运行,即使优先级最低的中断也可以抢占高优先级的任务的执行,而任务不能抢占ISR的运行【这一句需要重点解释】在中断的ISR里调用。
2024-09-20 10:59:00 50
原创 HAL库中的三种延时函数HAL_Delay、vTaskDelay和vTaskDelayUntil的区别
相对延时函数:相对延时是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束;精度没绝对延时准确,延时时释放CPU。指将整个任务的运行周期看作一个整体,适用于需要按照一定频率运行的任务,精度很准,延时时释放CPU。阻塞型延时,实现方式是通过死循环方式实现的,不会释放掉cpu,会造成其他低优先级任务无法执行。3、vTaskDelayUntil() 绝对延时函数。2、vTaskDelay() 相对延时函数。
2024-09-19 16:20:40 156
原创 STM32L051K8U6-HAL-串口中断控制灯闪烁速度
示例:链接:https://pan.baidu.com/s/1u6FamKgZhvcEsFAdgGeaww。4、 配置灯引脚属性为输出模式。
2024-09-12 10:55:25 360
原创 汇编基础指令
BL main;Branch and Link,先把返回地址保存在LR寄存器里再跳转。读地址“R1+4”,得到的4字节数据存入R0。把R0的4字节数据写"R1+4"CMP RO,R1;结果保存在PSR(程序状态寄存器)B main;Branch,直接跳转。2、写内存:Store。1、读内存:Load。
2024-08-21 15:36:04 300
原创 STM32L051K8U6-HAL-LED闪烁设计
示例:链接:https://pan.baidu.com/s/1CetQg5oD0uAc-9VfiihjsQ。//切换 翻转电平。4、 配置灯引脚属性为输出模式。生成代码:编写while里面的代码。
2024-08-07 14:50:27 203
原创 STM32L051K8U6-开发资料
STM32L051测试 (四、Flash和EEPROM的读写)-云社区-华为云 (huaweicloud.com) STM32L051测试 (四、Flash和EEPROM的读写) - 掘金 (juejin.cn)STM32L0 系列 EEPROM 读写,程序卡死?_stm32l0片内eeprom_stm32l0 eeprom-CSDN博客
2024-08-03 11:57:12 237
原创 STM32定时器如何通过预分频和重装载设置时间间隔
((1+TIM_Prescaler )/168M)*(1+TIM_Period )=((1+35999)/168M)*(1+2000)=1秒*/公式:TIM_CLK = CLK / PSC 【见上图分析】1、系统时钟CLK经过PSC预分频器得到定时器时钟TIM CLK。定时器中断触发时间 = 计数一次需要的时间 * 重装载值。2、计算计数器每计数一次。计数一次需要的时间 =3、重装载值溢出时间。
2024-07-23 11:11:21 348
原创 STM32-Cube开发资源
全网最完整最干练的CubeMX、CubeIDE STM32开发教程 拥抱高效Cube开发方式【3.1】—Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili Kevin_WWW的个人空间-Kevin_WWW个人主页-哔哩哔哩视频 (bilibili.com)
2024-07-16 16:42:45 280
原创 STM32程序启动过程
(2)然后执行复位中断,在复位中断服务程序中跳转 C/C++标准实时库的main函数(__main),完成用户堆栈等的初始化后,跳转.c 文件中的main函数(真正的用户main函数)开始执行程序。(1)首先对栈和堆的大小进行定义,并在代码区的起始处建立中断向量表,其第一个表项是栈顶地址(32位),第二个表项是复位中断服务入口地址;
2024-06-13 16:51:03 850
原创 GPIO八大模式
GPIO主要有八种模式,分别为推挽输出、开漏输出、复用推挽输出、复用开漏输出、浮空输入、上拉输入、下拉输入、模拟输入。下面先解释一下,图1中右侧的保护二极管和左侧的寄存器。注意:输出模式没有上拉和下拉的区分在这里可以将P-MOS管假想为NPN,N-MOS假想为PNP,这样就比较好去理解这个电路推挽电路当Vin电压为V+时,上面的N型三极管控制端有电流输入,Q3导通,电流方向如下图。经过上面的N型三极管提供电流给负载R,这就叫「推」。经过下面的P型三极管提供电流给负载,这就叫「挽」。
2024-06-11 14:41:50 173
原创 NPN和PNP三极管开关
(2)图2-PNP三极管开关电路:有时候我们也会用PNP的三极管搭建三极管开关电路,当如图输入低电平时,三极管B和E间的电压小于开启电压(负值),这时三极管饱和导通;为了让三极管C和E间的电压尽可能小,三极管处于一个深度饱和的状态,一般三极管基极的电流取集电极电流的1/10,所以基极电流为:IB=IC/10=2mA;(2)导通电压是指PN结导通以后两端的电压降,硅管与锗管的导通电压分别为0.7V与0.5V普通三极管,导通电压0.5~0.7V,符合二极管的特性。当使用三极管当电子开关时,对于控制端输入信号,
2024-06-11 13:33:02 1226
原创 常用的三种软件架构
每个模块可以注册并监听不同的事件,系统通过事件管理机制实现模块之间的通信和协作。将系统划分为多个服务,每个服务提供一组相关的功能。适用于需要模块化和可重用性的项目。1、每个服务负责一组明确定义的任务,模块通过调用服务接口来执行特定功能。2、这种架构有助于模块之间的松耦合,提高了系统的可维护性和可重用性。是一种将嵌入式系统分为多个层次的设计方法。:与硬件相关的初始化和配置,确保系统在目标硬件上正确运行。1、模块可以监听和响应特定事件,而不需要主循环的轮询。不同的软件架构适用于不同的嵌入式项目需求。
2024-06-11 10:05:00 548
原创 串口波特率
随着波特率的提高,信号的时钟周期变得更短,数据的传输时间也变得更短,这使得数据在传输过程中更容易受到干扰和噪声的影响,从而导致误码率的增加。当波特率过高时,数据传输中可能会出现一些误差,导致数据传输的可靠性下降。中每秒钟传输的二进制位数(即波特率=波特/秒)。虽然提高波特率可以加快。提高波特率会带来更高的数据传输速度,但同时也会增加传输误码率。速度,但并不是波特率越高越好。
2024-03-09 11:17:05 580
原创 相机的常见参数分析
形象的用上图表示,像元尺寸就是这个图像中每一个黑色格子所表示的大小,单位一般都是微米。图像是由像素所组成的,像素的多少表明摄像机所含有的感光元件的多少。是指数字成像系统中,每个像素的物理大小,上图中相机单个像素的物理尺寸时2.4um。是指数字成像系统中,每个像素的物理大小,上图中相机单个像素的物理尺寸时2.4um。M是mega的意思,也就是兆的意思,P是像素的意思。图像大小一定的情况下,像元尺寸越大,分辨率越低,清晰度越低。像素就是这张图像中的所有黑格子的数量。由长边和短边,即可算出靶面尺寸。
2024-02-27 16:48:18 1283
原创 景深有什么用
举个例子,当我们对准一个人聚焦拍摄时,在这个人近相机方向上和远相机方向上的一段距离内,所有景物都会相当清晰。在前面的例子中,如果人没在景深之内,那么人看起来就会模糊;如果我们希望人和牌楼都清楚,就需要将人和牌楼都安置在景深之内,那么该怎么做呢?对于定焦镜头而言,我们可以通过光圈和对焦距离改变景深。当相机拍摄人物时,在一定区域范围内的图像都是清晰的,而这一段成像清晰的距离就是。:在超焦距范围内,对焦距离越近,景深越小;对焦距离越远,景深越大。:光圈越小,景深越大;光圈越大,景深越小。:焦距越长,景深越小;
2024-02-27 15:34:24 389
原创 VSCode搭建STM32开发环境
2、安装VSCodeUserSetup-x64-1.78.2.exe软件。4、在环境变量中部署mingw64编译环境。3、配置Keil Assistant插件。3、 在VSCode中安装必要的插件。
2023-11-30 12:13:13 895 1
原创 Qt:解决跨线程调用socket/IO类,导致报错的问题
Qt有很多IO相关的类,比如说QTcpSocket、QFile,总的来说,在Qt的框架内使用,还是非常方便的。这也是有道理的,很多时候真的是设计问题导致的,因为设计失误出现了不应该有的跨线程操作。当然也可以用信号和槽封装一下,但是这样会涉及很多不必要的代码,我个人觉得也太过于麻烦。要解决这个问题,直观的说就是不要跨线程操作,网上也有很多类似的说明。
2023-11-30 09:16:56 1009
原创 STM32内存介绍
经历了从NOR Flash到NAND Flash再到现在的eMMC的发展。为了便于使用和大批量生产,ROM进一步分为了4种类型:PROM、EPROM、EEPROM和Flash。PROM只能被编程一次,EPROM可擦写可编程且可达1000次,EEPROM是一种掉电后数据不丢失的存储芯片,而。
2023-11-22 16:41:26 478
原创 释放Sqlite数据库占用的多余空间
当删除sqlite数据库中的数据之后,会发现内容确实删除掉了,但是sqlite数据库占用的磁盘大小没有缩小,那是因为,删除数据后,未使用的磁盘空间被添加到一个内在的“空闲列表”中用于储存你下次插入的数据,磁盘空间并没有丢失,但是也不向操作系统返回磁盘空间,1、利用navicat删除数据之后,执行VACUUM语句即可。2、在自己的代码中执行。
2023-10-10 14:14:40 1157
原创 Python学习笔记
2、if 、while、def和class这样的复合语句,首行以关键字开始,以冒号(:)结束,该行之后的一行或者多行代码构成代码组。4、python语言中进行的四则运算时,凡是有小数参与到运算中,哪怕计算结果为整数,也是默认保留小数点后一位的0。5、选择语句: if if .....else if ....elif....else。3、在python中无论输入的内容是数字还是字符,都将被作为字符串类型读取。1、缩进相同的一组语句构成一个代码块,称之为代码组。8、range()函数。
2023-10-08 09:16:32 662
原创 Qt中额外复制新类到工程中出现无法解析的外部符号
我们找到新添加的类的头文件(.h),右键打开属性,我们看到有一个“项类型”,应该是C/C++标头,我们把它改成:Qt Meta-Object Compiler(moc),再次编译即可成功!无法解析的外部符号 “public: virtual struct QMetaObject const * __cdecl FormCloudFilter::metaObject(v。:在C++项目中,新添加了类之后,编译出现错误,原因是我们新添加的类未被Qt编译成moc文件。
2023-09-25 10:19:21 619
原创 C++指向类成员的函数指针
C++指向类成员的函数指针_c++ 类成员函数指针_一身孤注掷温柔的博客-CSDN博客c++中的类成员函数指针_师从名剑山的博客-CSDN博客
2023-08-21 13:20:53 167
原创 Qt:解决跨线程调用socket/IO类,导致报错的问题(socket notifiers cannot be enabled from another thread)
Qt:解决跨线程调用socket/IO类,导致报错的问题(socket notifiers cannot be enabled from another thread)_qt 异步线程调用io_Jason188080501的博客-CSDN博客
2023-08-17 09:11:36 315
原创 HC-06蓝牙模块使用方法
如果您的HC-06蓝牙模块的灯正在闪烁,这可能表示它正在发送或接收数据。HC-06蓝牙模块的灯通常有不同的闪烁模式来指示不同的状态。配置蓝牙模块:您可以尝试使用AT指令通过串口对HC-06蓝牙模块进行配置。:一旦成功连接到另一个蓝牙设备(例如手机或电脑),HC-06的灯可能会周期性地闪烁,表示已经建立了蓝牙连接。:当您首次将蓝牙模块与设备进行配对时,HC-06的灯可能会快速闪烁,表示正在等待配对成功。这将重置模块并可能解决临时问题。检查连接:确保蓝牙模块正常连接到您的设备,并且设备上的设置和配置正确。
2023-07-24 11:30:59 2103
原创 QPainter中坐标系变换问题
解析:这里将(100,100)点作为了原点,所以此时(100,100)就是(0,0)点,以前的(0,0)点就是(-100,-100)点。下面我们只是对坐标系的平移,缩放,旋转,扭曲等应用进行介绍。解析:这里,painter.shear(0,1),是对纵向进行扭曲,0表示不扭曲,当将第一个0更改时就会对横行进行扭曲,关于扭曲变换到底是什么效果,你观察一下是很容易发现的。解析:可以看到,painter.scale(2,2),是将横纵坐标都扩大了两倍,现在的(50,50)点就相当于以前的(100,100)点。
2023-07-18 10:09:43 593
超级system命令嵌入代码
2018-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人