- 博客(106)
- 资源 (9)
- 收藏
- 关注

原创 基于QT:温度串口图像显示
用Qt自己写一个上位机,将串口发过来的温度信息,显示出来,并且绘画出温度曲线 上图: 采用QT绘画曲线,首先当然是采用,qwt控件,而Qt没有自带的qwt控件,所以需要按住移植qwt控件方法具体步骤如下: 1. Download and install QT 5.0.1 (MinGw) to: “C:\Qt\Qt5.0.1” 2. Download and extract Qwt
2016-08-18 10:07:59
10184
21
原创 定时器加状态转移图方式实现DS18B20
我们知道,DS18B20 是单总线时序通讯,采用严格的信号时序,以保证数据的完整性。因此如果采用操作系统,逻辑读取DS18B20为了避免时序被操作系统的任务调度,或者其他中断打乱,我们都会采用临界区的形式保护时序。正常情况下,DS18B20通信的时间并不长,也就几十us。时间长的是18b20的转换过程(750ms)。那么我们可以再和18B20通讯时关闭中断,通讯完毕立马开启中断,转换的过程可以不用管(时序要求再通讯部分)。这样就可以既不影响18b20数据的读取,一起不影响任务的调度。但是这样的话,我
2022-04-23 10:07:26
1965
1
原创 一键开关机电路
一键开关机电路参考 : 果果小师弟 : 没事逛某宝,买了个元器件测试仪,很酷!又称为(单按键开关机电路),简单实用,可以做到关机功耗为0.按键功能:开机:在关机状态下,短按一下按键就开机:切换菜单:在开机状态下,短按一下按键则切换菜单:关机:在开机状态下,切换到“Switch Off”菜单后,长按按键则关机。原理解析1. 开机过程①、在关机状态下,电路各点的电压如下:(均为实测值)此时电池电压Vbat = 9.04V,三极管Q1、Q2、Q3都是不导通的,整机功耗为0。②、在关机
2022-04-14 09:33:46
6862
3
原创 STM32 CmBackTrace 移植与使用
前言:在使用STM32 开发时,避免不了各种异常导致进入hardfault。通常如果进入hardfault 的错误容易复现好解决,直接debug调试即可。就怕hardfault 需要几天才能复现,这个时候总不能一直接连电脑debug等着它复现吧,因此需要一个工具能够定位 hardfault 错误,将进入while(1)循环之前将现场的环境保存下来,并且将这些数据通过串口打印或者存储到内部flash,后面在读取出来。HardFault 产生原因常见产生HardFault产生的原因大概有如下几类:数组
2022-04-08 10:08:10
3534
1
原创 反激式开关电源理论与原理解析
最近再某宝买了一个AC-DC 开关电源,向他要一个原理图,想着哪里坏了可以自己修一修,结果说没有。这我怎么能忍??于是自己就结合网上资料和板子的丝印画出了他的原理图。原理图如下:开关电源基础知识开关电源是利用现代电子电力技术,控制开关管开通和关断的时间比率。维持稳定输出电压的一种电源。开关电源一般由脉冲宽度调制(PWM) 控制 IC 和MOSFET构成。开关电源的类型线性稳压器所谓线性稳压器,也就是我们所说的LDO,一般有这两个特点:传输元件工作再线性区,它没有开关的跳变。仅限于降压
2021-11-03 13:17:58
78237
51
原创 OPA(运放)与MOS管组成的恒流源电路
电路图这是一种由运放组成的恒流源电路。原理分析:1. OPAOPA (集成运算放大器)具有开源增益高,输入阻抗大,输出阻抗小的特点。2. MOS管工作原理我们知道三极管是利用 Ib 的电流控制 IC 的电流,属于电流控制电流器件。而MOS则是利用Ugs的电压去控制电流 Id 的,所以说 MOS 管是电压控制电流的器件。对于N沟道增强型的MOS管,当Ugs>Ugs(th)时,MOS就会开始导通,如果在D极和S极之间加上一定的电压,就会有电流Id产生。在一定的Uds下,D极电流Id的
2021-07-20 20:53:30
28303
14
原创 STM32定时器系列-比较输出产出PWM波应用
硬件平台:STM32F4库类型:标准库有关于比较输出的原理部分,可以参考之前的博文:STM32定时器系列 - STM32定时器输出比较在这里只是做了一个应用:使用PWM比较输出产生PWM波形,并且PWM与DAC同步输出。PWM为低,DAC输出0,PWM为高,输出固定电压。在输出比较模式下,ARR 设置为最大0xFFFF,禁用预装载寄存器,并且开启比较输出中断,再中断中,修改占空比。/** ****************************************************
2021-07-07 13:23:34
665
4
原创 STM32 DAC + DMA + TIM 输出正弦波,三角波,方波信号
硬件平台:STM32F4库类型:标准库。参考:【二代示波器教程】第12章 示波器设计—DAC信号发生器的实现DAC输出阻抗的问题:DAC集成了2个输出缓存,可以用来减少输出阻抗,无须外部运放即可直接驱动外部负载。每个DAC通道输出缓存可以通过设置DAC_CR寄存器的BOFFx位来使能或者关闭,如果带载能力还不行,后面就需要接一个电压跟随器,选择运放一定要选择电流大的型号。DAC使能输出缓冲后,DAC的最小输出电压为0.2V。最大电压为Vref±0.2(会造成削顶问题)。而未使能输出缓冲则可达到0V
2021-03-30 16:25:02
27512
15
转载 Qt 使用笔记 --转自 wangwenx190/Note
转自:https://github.com/wangwenx190/notes/blob/master/qt.zh.cn.mdQt 使用笔记Qt 6目标平台变更Qt6 不再支持32位Windows系统,不再支持Windows 7,Windows 8和Windows 8.1,仅支持64位Windows 10 1809及后续版本。目前已经移除了WinRT/UWP支持。UNIX平台的变化请自行查看对应的JIRA ticket。如果您的程序需要继续支持Windows 7/WinRT/UWP,请使用Qt 5
2021-03-26 17:36:49
6516
2
转载 裸机开发利器:超精简的软件定时器multi_timer ---- 使用、代码分析和修改
一、概述:项目的仓库地址:https://github.com/0x1abin/MultiTimer参考文章:MultiTimer | 一款可无限扩展的软件定时器在裸机开发中,经常要使用定时器来实现某些定时功能,面对需要比较多定时器的场合,以前都是使用一个吻硬件定时器作为提供时间基准,然后使用计数器+标志位的方法来实现,其实就是采用时间片的方法。比如:while(1){ // 2ms执行 软件时钟系统 if(1 == sys_var._1msFlag) { sys._1m
2021-03-26 16:54:17
812
1
原创 STM32 特殊引脚作为普通IO口使用的问题
开发平台:Keil5硬件平台:STM32F103RCT6之前有有弄过的东西,因为没有记录忘记了,所以还得重新找资料寻找答案,所以说,博客还是得写啊,不然搞过的东西,又得重新再来一遍。(-_-||)1. OSC_IN 引脚接有源晶振,OSC_OUT 做普通IO口使用原理图如下:原理图中,我们将 OSC_IN 引脚接了有源晶振,OSC_OUT引脚需要采集DS18B20数据(也就是做普通IO使用),那么我们需要如何配置:在手册中,由讲解到:注意,再这里提到过,“当不适用主振荡器HSE时,P
2021-03-12 08:56:07
10384
原创 STM32实现扫频功能
简介我们都知道,在信号发生器中,有一个扫频模式:指信号发生器在指定的扫描时间内从起始频率到终止频率变化输出,扫频模式支持线性扫频、对数扫频、和步进扫频三种方式。起始频率和终止频率起始频率和终止频率是频率扫描的频率上限和下限。信号发生器总是从起始频率扫频到终止频率,然后又回到起始频率。 当起始频率< 终止频率,信号发生器从低频向高频扫描。 当起始频率> 终止频率,信号发生器从高频向低频扫描。 当起始频率= 终止频率,信号发生器以固定频率输出。修改“起始频率”或“终止频率”后,信
2021-02-06 10:07:03
16637
5
原创 STM32定时器系列-PWM输出
定时器PWM输出是最常用的,原理上之前已经讲过了,这里就不在复述:STM32定时器系列 - STM32定时器输出比较这里直接开放一个参考硬汉哥的代码,可以实现精准的PWM输出频率,占空比。并且占空比精度可达到0.01%。bsp_tim_pwm.h文件#ifndef __BSP_TIM_PWM#define __BSP_TIM_PWM#include "bsp_sys.h"void bsp_SetTIMOutPWM(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin
2021-02-05 16:04:10
820
原创 STM32以太网通信-LwIP的网络接口管理
这里主要参考也野火:《LwIP应用开发实战指南》简介网络接口(如以太网接口)是硬件接口。也就使我们所说的网卡。而LwIP是软件,那么如何让硬件和软件无缝连接起来呢?而且网卡又有很多中,怎么能让LwIP使用同样的软件能兼容不同的硬件呢?这就采用了 LwIP 的一个数据结构–netif 来描述一个网卡,但是由于网卡是直接和硬件打交道的,硬件不同则处理基本不同,所以必须由用户提供最底层接口函数,LwIP提供统一的接口,但是底层的实现需要用户自己去完成,比如网卡的初始化,网卡的收发数据,当 LwIP 底层得.
2021-02-02 13:07:06
3066
原创 STM32以太网通信-FreeRTOS + LwIP移植
开发平台:STM32F407 + DP83848 标准库开发。移植:FreeRTOS + LwIP实现以太网通信。简要LwIP 不仅能在裸机上开发,也能在操作系统环境下运行,而且在操作系统环境下,用户能使用 NETCONN API 与 Socket API 编程。相比于 RAW API 编程会更加简便。使用操作系统环境下,这意味着 多线程的环境,一般来说,LwIP作为一个独立的处理线程运行,用户也独立一个或者多个线程,这样就在操作系统中相互独立开了,并且借助操作系统的 IPC 通信机制,更好的实现功
2021-01-25 15:07:41
5991
8
原创 STM32以太网通信-LWIP简介
LwIP全名:Light weight IP,意思是轻量化的TCP/IP协议,是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。LwIP的设计初衷是:用少量的资源消耗实现一个较为完整的TCP/IP协议栈,其中“完整”主要指的是TCP协议的完整性,实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。此外LwIP既可以移植到操作系统上运行,也可以在无操作系统的情况下独立运行。LwIP具有主要特性:支持ARP协议(以太网地址解析协议)。支持I
2021-01-14 16:58:51
6852
3
原创 STM32以太网通信-STM32以太网外设(ETH)
通过 DMA 控制器进行介质访问控制 (MAC)STM32F4xx系列控制器内部集成了一个以太网外设,它实际上是一个通过DMA控制器进行介质访问控制(MAC),它的功能就是实现MAC 层的任务。借助以太网外设,STM32F4xx 控制器可以通过ETH 外设按照IEEE 802.3-2002 标准发送和接收MAC 数据包。ETH 内部自带专用的DMA 控制器用于MAC,ETH 支持两个工业标准接口介质独立接口(MII)和简化介质独立接口(RMII)用于与外部PHY 芯片连接。MII 和RMII 接口用于
2021-01-14 15:28:00
22166
1
原创 STM32以太网通信-网络基础知识
网络协议的分层模型TCP/IP是一个庞大的协议族, 它是众多网络协议的集合,包括:ARP、IP、ICMP、UDP、TCP、DNS、DHCP、HTTP、FTP、MQTT等等。通常称为TCP / IP。 这些协议按照功能,可以被划分为几个不同的层次,TCP/IP 协议栈中不同协议所完成的功能不同,某些协议的实现要依赖其他协议,依据这种关系,可以将协议分层。低层协议为相邻的上层协议提供服务,是上层协议得以实现的基础。其中:物理层(PHY):规定了传输信号所需的电平、介质特性(发送和接受光、电、电磁波
2021-01-14 13:21:22
10108
原创 STM32以太网通信-STM32F407与 DP83848 RMII硬件接口参考与注意事项
主要参考:STM32F407和DP83848芯片RMII模式硬件电路图参考常用元器件使用方法13:物理层接口芯片DP83848的使用方法分享一下STM32F407和DP83848芯片RMII模式硬件电路图电路原理图如上图所示,其中DP83848芯片的40脚是RMII_CRS_DV引脚,但我看到网上有好多原理图是把RMII_CRS_DV接到了DP83848芯片的39脚上,查了下芯片手册发现39脚是模式选择引脚,40脚才是CRS_DV引脚。在 常用元器件使用方法13:物理层接口芯片DP8384
2021-01-14 10:27:09
15456
1
原创 C语言中一些常用函数的使用记录
将整数转换为字符串类似 C语言<stdlib.h> 库中的 itoa() 函数。/** - @brief 将整数转换为字符串 - @param str: 字符串 - @param intnum: 要转换的整数 10位数 - @retval None */void Int2Str(uint8_t* str, int32_t intnum){ uint32_t i, Div = 1000000000, j = 0, Status = 0; for (i = 0; .
2020-12-22 15:13:24
664
原创 STM32定时器系列 - STM32定时器输出比较
STM32 定时器除了基本计数定时功能外,还对外扩展了输入、输出通道,从而可以实现输入捕获、比较输出功能。比较输出[Compare Output]功能:定时器通过对预设的比较值与定时器的值做匹配比较之后,并依据相应的输出模式从而实现各类输出。如PWM输出、电平翻转、单脉冲模式、强制输出等。一般来说,STM32的通用定时器和高级定时器都具有比较输出功能,不同的定时器可能通道数量上有差异。或者,我们可以使用比较输出功能来感知或提示某个时间段已经过去了。因为比较输出的基本特征是计数器CNT的值与比较寄存器CC
2020-10-23 13:59:27
9829
原创 一种电源突然掉电的检测方式
需求:由于目前产品对于电源上电与掉电时序要求较高,在产品运行过程中,如果突然掉电,没有及时关闭运行的产品。会导致损坏产品内部的器件。因此电路上需要对掉电进行检测,然后再控制器上关闭产品的运行。这样就能保证产品能够稳定的运行。供电电路产品通过 P2 接口 引入24V电压到控制板中,控制板通过 TPS5430DDA 芯片将电压进行转换为15V,5V等电压供给各个器件正常工作。以上是电压检测电路,直接通过一个比较器来实现。注意:这里的电阻选择有问题,比较器4脚的电压是通过 R226 和R225 的分
2020-10-20 18:28:47
4782
翻译 Qt Model View 编程
Qt Model View 编程模型视图编程简介Qt包含一组使用模型/视图结构的类,可以用来管理数据并呈现给用户。这种体系结构引入的分离使开发人员更灵活地定制项目,并且提供了一个标准模型的接口,以允许广泛范围的数据源被使用到到现有的视图中。模型 - 视图 - 控制器(MVC)是一种设计模式,由三类对象组成:表示数据的模型(Model)、表示用户界面的视图(View)和定义用户界面上的操作控制(Controller)。Model/View 结构Model-View-Controller(MVC),
2020-10-13 15:43:30
596
原创 Qt 自定义委托
效果图之前看大刘大佬的 Qt编写的项目作品22-自定义委托全家桶 感觉做的非常好,可惜没有开源。最近有时间打算仿照他的项目写一个,顺便学习一下模型视图框架。Mode/View 基础知识。
2020-10-12 18:13:47
478
3
原创 Qt CuteLogger 日志输出文件
Qt 开发过程中,我们经常使用qDebug()来输出一条调试信息,但是,等软件正式发布之后,我们就需要软件运行日志功能,使用日志功能,能够快速的进行异常错误的跟踪和定位。也能查看软件运行的情况。Qt的日志工具有很多,log4cplus、log4cxx,Log4Qt等等,当然,也可以采用Qt的消息输出,重定向到日志文件,就可以实现一个简单的日志记录系统。具体可参考:使用Qt实现简单的日志记录功能(qInstallMessageHandler)下面,介绍一个 CuteLogger :基于Qt的应用程序的快速
2020-08-27 14:12:07
1139
原创 Qt 自定义颜色下拉控件
效果:其实,在这里之前看了许多自定义颜色控件,有的是采用继承QPushButton。点击后,直接弹出 QColorDialog,然后重写 paintEvent()函数,绘制背景为选中的颜色。但是,都没有下拉选择颜色的感觉。也有的继承 QCombox。在 item 项中添加颜色和文本。通过下拉数据项来选择。如下所示,但是,如果通过下拉数据项来选择的话,如果颜色较多,则不适用。因此我采用了上面继承QCombox。点击后,弹出一个 Popup 的窗体(通过 setWindowFlags(flags)
2020-08-24 14:31:02
2445
3
原创 Qt QStyle
QStyle ClassQStyle类是一个抽象基类,它封装了GUI的外观。Qt 包含一组 QStyle 子类,这些子类可以模拟Qt支持不同的平台样式(QWindowsStyle,QMacStyle等)。默认情况下,这些样式内置在 Qt GUI 模块中,样式也可以作为插件使用。Qt 的内置小窗口部件使用 QStyle 来执行几乎所有的绘图,从而确保它们看起来完全等同于等效的本级窗口小部件。下图展示了九中不同样式的 QCombox。Setting a Style (设定风格)可以使用 QAppli
2020-08-24 13:04:23
5955
原创 STM32 --通用定时器输入捕获功能
问题:开始的时候没有搞清楚 定时器时基 于 定时器溢出中断导致在计算的时候一直有问题。开始并没有怀疑是配置有问题,因为之前接触过定时器输入捕获功能,靠着自己的记忆配置了一下,认为 捕获功能 的定时是通过定时器设置的定时溢出频率来计算的(真心抽自己两巴掌)。结果导致问题的发生。真的是这些东西最好是通过博客的方式记录下来,方便自己,方便他人。现在然我们重新回顾一下这个功能:通用定时器输入捕获。内部定时器结构在 STM32定时器系列 - STM32常规定时器时基与时钟源 这篇博文中,我们讲述过,定时器
2020-06-11 10:38:39
9050
转载 浅析同步通信与异步通信
1. 概述1.1 同步通信原理同步通信: 发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如:在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据。如:I2C、SPI等有时钟信号的协议,都属于这种通信方式。IIC:SPI:同步通信中双方使用频率一致的时钟,它的数据分组比异步则大得多,称为一个数据帧。通过独特的 bit 串作为启停标识。发送方要以固定的节奏去发送数据,而接收方要时刻做好接收数据的准备,识别到前导码(同步字
2020-06-08 19:04:05
5982
1
原创 Qt 多线程使用总结
这几天在研究如何使用Qt的多线程,想将串口操作放到线程中去执行,这样的话,就算是串口接收大量的数据,也不会导致界面出现假死的现象。之前在使用串口的时候,一般都是采用异步(非阻塞)方式通信,也即是通过调用:connect(serial, &QSerialPort::readyRead, this, &SerialBoard::readData);//直接读取全部数据void...
2020-04-27 16:09:44
2437
2
转载 浅谈C语言中的布尔(bool)类型
我们知道在C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型(至少我是一直这么认为的),表达式的值0为假,非0为真。所以条件判断语句( if(…)、while(…) )非常灵活,甚至一个指针类型都可以是条件表达式。为了使程序更清晰,我们常常会给出如下的宏定义: typedef int BOOL; #define TRUE 1 #define FALSE 0这...
2020-04-22 10:29:01
1069
原创 stm32晶振配置不一致导致 Invalid Rom Table 至芯片锁死解决方案
参考博文Invalid ROM Table原因及解决办法STM32芯片锁死问题概述在调试STM32时,出现如下的现象:软件写好之后首次下载程序至芯片时成功,但程序未能正常运行,之后再下载程序时便报错:Invalid ROM Table原因出现该现象的原因为板子外部晶振为25M,而程序软件上以8M为输入晶振频率,导致芯片超频锁死,无法连接、下载解决方案断电,将芯片原来通过10k电......
2020-04-13 14:08:23
5767
4
原创 STM32 C语言使用 memset清空结构体 导致改变其他结构体数据的问题
首先,在C语言中,清空结构体的方法,我们一般会采用 memset函数。其原型是:void * memset ( void * ptr, int value, size_t num );函数功能: 填充内存块将ptr指向的内存块的前num个字节设置为指定值 value(解释为unsigned char).函数参数:ptr: 指向要填充的内存块的指针。value:要设置的值。该值以i...
2020-01-19 09:47:00
6806
原创 leetcode:无重复字符的最长子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke...
2020-01-16 10:18:00
262
CuteLogger.rar
2020-08-27
QtCreator4.0.2-MingW-Release.rar
2019-08-01
Qt 仿QQ图片查看器
2019-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人