自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 虚拟串口工具vspd.exe的使用

以上为虚拟串口使用的全过程。

2024-04-08 14:52:22 285

原创 STM32项目之环境空气质量检测系统硬件设计(可充电)

存储模块部分主要包括SD卡、SPI FLASH(W25Q128)以及EEPROM(AT24C02),前面两者用于存储图片、字库等数据,从SD卡读相关数据写入SPI FLASH,写入SPI FLASH只用于出厂设置或者更新数据时使用,此后SPI FLASH只读;由于该芯片是1.8V工作电压,所以还需提供一个1.8V稳压电路,并且单片机IO引脚输出3.3V,该芯片IO引脚输出1.8V,也不兼容,通信时需要加上电平转换电路。WiFi模块使用ESP8266模块,可以直接接入机智云,在机智云app上看到相关数据;

2024-01-27 14:14:21 1286

原创 STM32单片机项目之多功能智能小车硬件设计

单片机最小系统:由于要使用到LVGL,可能需要加载字库、图片什么的,需要外挂SPI FLASH与SD卡,这里我选用的是STM32F103VET6,该芯片参数如下:该芯片64KRAM+512K FLASH用于LVGL绰绰有余。SD卡电路:由于我个人喜欢将PCB板做小一点,也是为了节省成本,所以SD卡部分就采用TF卡,方便后期PCB布局设计,电路如下:SPI FLASH电路由于SD卡在小车运动过程中可能会因为某种原因弹出之内的,会导致数据异常,所以这时需要一个外部FLASH存储相关数据,包括字库、语

2024-01-27 11:02:52 490

原创 STM32H7 CPU Cache 与MDMA冲突问题

使用读卡器发现数据实际已经写入;这让我百思不得其解,怀疑是什么原因导致数据没有同步;QSPI FALSH读写也是一样,也是MDMA与Cache数据不一致导致的,解决方法可以参考上面SD卡。关闭Cacheh后,SDRAM的内存映射读写也变慢了,影响了其他模块性能,问题还未完全解决。经过这篇文章提示,于是看了代码,确实开启了Cache;测试发现也是可以的,其他模块也没有受到影响,到此,问题全部解决。

2023-12-28 09:51:35 473

原创 STM32使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事项,以及配置4bit模式可能出现卡死问题的解决方法

STM32使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事项,以及配置4bit模式可能出现卡死问题的解决方法

2023-06-27 12:37:06 2843 2

原创 基于单片机的毕业设计推荐

2023基于单片机的毕业设计推荐

2023-02-21 16:57:22 6799 16

原创 使用STM32+FREERTOS+FATFS 读写SD卡超过一定次数出现FATFS文件系统操作失败的问题

fatfs 报硬件错误

2022-11-03 16:32:34 1877

原创 STM32 使用fatfs文件系统硬件错误问题报错(HardFault_Handler)解决

STM32 使用FATFA报硬件错误的解决方法

2022-09-30 15:14:16 1419 2

原创 关于STM32驱动LCD显示屏,程序下载后白屏、乱码需要上电复位才能恢复正常问题的解决办法

解决方法:在显示屏初始化前加一定延时,比如100ms,因为单片机复位时间比LCD显示屏短,可能会造成显示屏未复位完就被单片机操作的问题,如果是CUBEMX配置的工程,需要找到生成代码关于显示屏初始化的函数最前面加上延时。...

2022-07-04 17:27:01 4069 2

原创 STM32 LD3320语音识别模块SPI驱动 (STM32CUBE MX HAL库)

LD3320语音识别模块驱动:一、硬件连接主控芯片:STM32F103VCT6PB12-----------LD3320_IRQPB13-----------LD3320_WRPB15-----------LD3320_RSTPA4-------------LD3320_CSPA5-------------LD3320_SCKPA6-------------LD3320_MISOPA7-------------LD3320_MOSI二、使用STM32CUBEMX创建工程引脚配置:SP

2022-05-07 23:25:59 4783 22

原创 STM32(HAL库 ) AS608光学指纹模块驱动(中断接收方式)

STM32 AS608 光学指纹模块通过串口打印测试:(百分百HAL库)引脚连接:AS608模块 TXD 连接单片机RXT,RXD连接TXD;本文测试使用STM32的串口3引脚作为AS608连接引脚。一、使用STM32CUBEMX配置串口3作为AS608通信引脚配置如下:中断使能:注意:上面引脚波特率应该与你AS608模块波特率一致,我这里使用115200串口1作为DEBUG测试引脚配置如下:时钟配置:配置完成生成工程代码即可。二、代码编写1、as608.c文件#includ

2022-04-28 15:36:50 4444 66

原创 51单片机RC522无线射频IC卡驱动

RC522驱动:一、硬件连接:SDA——P2.0SCK——P2.1MISO——P2.3MOSI——P2.2RST——P2.4IRQ——悬空二、驱动代码编写:RC522.c文件/************************************************************************ 头文件包含*****************************************************

2022-04-28 11:01:26 4738 16

原创 51单片机项目之OLED显示多功能门禁系统硬件设计

多功能门禁系统硬件设计今天分享一款能够由个人独立完成的个人项目多功能门禁系统,具有以下功能:(1)指纹1、指纹识别控制继电器开关电磁锁2、添加指纹3、删除指纹(2)刷卡1、RFID RC522刷卡开关电磁锁2、添加卡号3、删除卡号(3)密码锁1、输入密码开关电磁锁2、修改密码(4)WIFI、蓝牙、红外遥控远程开关门(5)0.96寸OLED、LCD12864、LCD1602三选一显示一、原理图设计1、51单片机最小系统模块设计2、4*4矩阵键盘设计3、继电器模块与RC

2022-04-27 22:48:05 3334 1

原创 STM32 AT24CXX芯片之读写整型(int)、小数(float)类型数据

整数、小数读写:由于上一章讲解了HAL库AT24CXX芯片的相关配置,所以本次只讲如何存储小数与整数:其实原理很简单,比如:现在存储一个Int类型的整数,按照24cxx芯片的特性,只能存储单字节或者连续字节的char类型的数据;所以为了完成我们想要数据类型的存储,则需要用到共用体;所谓共用体就是共用同一片空间,所以;利用这个特性我们就可以先声明两个共用体,如下:typedef union{ uint8_t byte[4]; float data; }float_data_t;typed

2022-04-25 13:10:50 2058 1

原创 STM32 (基于HAL库) 硬件IIC读写任意AT24CXX芯片

HAL任意AT24Cxx芯片读写:原理我就不讲了,直接实操:一、配置1、使用STM32CUBEMX进行引脚配置,IIC配置如下:2、利用串口进行数据查看,串口配置如下:3、时钟我们选择最高72MHZ,这里没有硬性要求都可以。4、配置完成,生成keil工程代码即可。到此配置完成。二、代码编写驱动文件:HAL_24CXX.c文件代码如下:/***********************************适用范围:仅HAL适用***********************

2022-04-25 12:16:40 5647 7

原创 芯讯通SIMCOM A7680C (4G Cat.1 通信模组)AT指令测试 TCP通信过程

一、A7680C TCP通信1、文档准备

2022-04-24 17:30:46 7865

原创 QT中事件与图形处理详细(鼠标、键盘、定时等事件与图片加载处理)

QT事件简介:QT程序是事件驱动的,程序的每个动作都是由内部某个事件所触发。QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期。常见的QT事件类型如下: 键盘事件: 按键按下和松开 鼠标事件: 鼠标移动,鼠标按键的按下和松开 拖放事件: 用鼠标进行拖放 滚轮事件: 鼠标滚轮滚动 绘屏事件: 重绘屏幕的某些部分 定时事件: 定时器到时 焦点事件: 键盘焦点移动 进入和离开事件: 鼠标移入widget之内,或是移出 移动事件: widget的位置改变 大小改变事件: widg

2022-01-13 10:34:19 1166 1

原创 QT 基础二(QT对话框、布局、工具栏和菜单栏的使用)

Qt对话框Qt对话框:Qt提供了一些列的标准对话框QMessageBox:消息对话框,用于显示提示、警告、错误等信息,或进行确认选择等头文件包含 :#include “QMessageBox” QMessageBox::warning(父窗口对象,"标题","提示内容",按钮):警告对话框 第四个参数可以不填,使用默认的按钮 按钮: QMessageBox::Ok | QMessageBox::No | QMessageBox::Yes | QMessageBox::Cancel

2022-01-13 10:01:42 972

原创 QT 基础知识一(QT安装、创建项目、常用窗口控件使用、信号与槽机制)

Qt:Qt是一个跨平台的C++框架(C++库),Qt除了支持界面设计(GUI编程),还封装了与网络编程、多线程、数据库连接、视频音频等相关的功能。ctrl 撤销(返回上一步)市面常见的GUI库(Windows下):基于C++的有Qt、MFC、WTL、wxWidget、DirectUI、Htmlyout基于C#的有WinForm、WPF基于JAVA的有AWT、Swing…Qt来开发桌面程序有一下优点: 简单易学:Qt 封装的很好,几行代码就可以开发出一个简单的客户端,不需要了解 Window

2022-01-10 08:37:54 1309

原创 STM32 使用硬件IIC驱动0.96寸4针OLED显示器(HAL库)

OLED显示屏驱动HAL库一、简介:SSD1306 是一个单片 CMOS OLED/PLED 驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。由 128 segments 和 64 Commons 组成。该芯片专为共阴极 OLED 面板设计。SSD1306 中嵌入了对比度控制器、显示 RAM 和晶振,并因此减少了外部器件和功耗。有 256级亮度控制。数据/命令的发送有三种接口可选择:6800/8000 串口,I2C 接口或 SPI 接口。适用于多数简介的应用,注入移动电话的屏显,MP3 播放器

2022-01-04 17:04:17 24395 123

原创 Linux下tftp和nfs服务器的搭建

服务器搭建在搭建服务器之前,先了解一些搭建服务器可能会用到的相关Linux命令:归档及压缩文件:归档文件:tar -cvf 文件名.tar 文件1 文件2 …释放文件:tar -xvf 文件名.tar :将包中文件释放出来使用gzip算法对文件进行压缩 :tar -cvzf 文件名.tar.gz 文件1 文件2 文件3…使用gzip算法对文件进行解压:tar -xvzf 文件名.tar.gz使用bzip2算法对文件进行压缩:tar -cvjf 文件名.ta

2022-01-04 12:40:07 927 1

原创 STM32(HAL库 标准库通用) AS608光学指纹模块驱动

工作原理:如果想要直接看代码,可以跳过原理,直接往下翻,代码再最后AS608主要通过串口通信1、缓冲区与指纹库系统内设有一个 72K 字节的图像缓冲区与二个 512bytes 大小的特征文件缓冲区,名字分别称为:ImageBuffer,CharBuffer1 和 CharBuffer2。用户可以通过指令读写任意一个缓冲区。CharBuffer1 或 CharBuffer2 既可以用于存放普通特征文件也可以用于存放模板特征文件。通过 UART 口上传或下载图像时为了加快速度,只用到像素字节的高 4

2021-12-25 00:00:20 4779 44

原创 网络编程基础知识

网络编程知识概念:**网络通信:**跨主机间进程间的通信TCP/IP协议分成两个不同的协议:用来检测网络传输中差错的传输控制协议TCP,是可靠的传输专门负责对不同网络进行互联网协议IP,不可靠的传输两个最有代表的协议促成了TCP/IP协议网络采用分层的思想:1.每一层实现不同的功能,对上层的数据做透明传输2.每一层向上层提供服务,同时下层提供的服务OSI开放系统互联网模型:是一个理想化的模型,尚未有完整的实现七层结构:应用层表示层会话层传输层网络层数据链路层物理层TCP

2021-12-24 19:00:47 1154 1

原创 QT上位机串口实时温湿度显示

STM32与上位机通信协议——UART协议:串行通讯需要有通信协议通信协议:规定发送与接收方,通信的方式与要求,数据的格式由RXD和TXD两条线,由于没有时钟线,所以需要规定波特率数据传输速率就是波特率UART(串行异步全双工)采用的是串行通信,也就是一条传输线,一位一位的顺序发送(可以远距离传输,传输较慢)异步通信是以一个字符为传输单位,每个字符为10位(1个起始位,7个数据位,1个校验位,1个停止位)通信中两个字符之间的时间间隔不固定,但是同一个字符相邻位之间时间间隔是固定的:数据通信

2021-12-21 16:05:32 11439 15

原创 STM32 (基于HAL库)4×4矩阵按键驱动详细教程

STM32矩阵键盘:矩阵的工作原理:矩阵原理图如下:矩阵键盘由16个按键组成,也就是4*4矩阵键盘,按照传统的按键接法,16个按键需要16个单片机io口,按照矩阵键盘接法,16个按键只需要八个io口,我选择了PA口的0~7号引脚,前四个依次接矩阵键盘的行,后四个依次接矩阵键盘的列;矩阵键盘的每一个按键都是接了两个io口,也就是一端必须是输出高电平或者低电平,另一端去检测是否是高电平或者低电平;简单来说,也就是一端配置为GPIO输出,另一端配置为GPIO输入或者外部中断检测。所以只需要配置行线或者列线

2021-12-21 14:39:30 12821 38

原创 STM32 (基于HAL库)MFRC-522 无线射频IC卡驱动(RFID)

STM32C8T6 RCC522 HAL库驱动:RC522工作原理:支持SPI,I2C和UART接口,主要采用SPI接口。寻卡---------->防冲突---------->选卡--------->操作卡寻卡需要发送一些命令,比如接收数据,发送数据,验证秘钥,复位等一些命令初始化天线防冲突操作就是将防冲突命令通过PcdComMF522函数与PICC卡进行交互。防冲突命令是两个字节,其中第一字节为Mifare_One卡的防冲突命令字PICC_ANTICOLL1 (0x93),第

2021-12-19 15:49:53 7812 33

原创 C语言顺序表代码实现

顺序表:顺序表的创建:定义结构体:结构体成员包含整形数组和一个记录最后一个数据下标的整形变量:#define DATASIZE 5typedef struct{ int data[DATASIZE]; int last;}sqlist_t;编写创建顺序表的函数:返回创建顺序表的首地址sqlist_t *sqlist_create(void){ sqlist_t *list = NULL; list = malloc(sizeof(sqlist_t)); if(list == N

2021-12-11 15:41:45 1317

原创 C语言数据结构概念

常见数据结构顺序表、链表、队列、栈、树、图线性结构:任意一个节点至多有一个前驱节点,一个后继节点顺序表、链表、队列、栈非线性结构:任意一个节点可以有多个前驱或多个后继节点树、图存储结构:顺序结构存储链式结构存储顺序表:在连续的地址中储存数据优点:地址连续,顺序访问快速简单缺点:定义时无法确定内存的大小插入或删除数据时,会有大段的数据在进行移动顺序表常见操作:1.完成查找、删除、修改2.完成顺序表是否为空3.完成获取顺序表中元素个数的函数4.完成顺序表清空的函数

2021-12-11 13:59:29 751

原创 C高级(三)动态内存

动态内存:动态内存管理:(谁开辟谁释放(free函数释放))释放后把指针置空#inlcude <stdlib.h>系统接口函数: void *malloc(size_t size):在堆区申请size个字节的内存的地址,失败返回NULL也可以开辟数组void free(void *ptr):释放ptr指针指向的内存void calloc(size_t nmemb,size_t size):专门用来开辟数组calloc(10,4) <==> malloc(104)vo

2021-12-05 23:26:12 198

原创 C高级(二)函数高级与构造类型

函数高级:函数的传参:值传递:输入型参数,是向函数内部输入了一个数据。函数内部是无法利用参数向外部输出数据的地址传递:(传递变量自身的地址,因为想要改指针内部存的地址,必须把这个指针本身的地址给它才能改)第一种情况:指针获取变量地址,可以利用该指针修改指向内存中的数据,所以若形参定义为指针,则就是要利用该指针修改外部调用者某个变量的值,则输出(输出型参数)第二种情况:由于形参有自己独立的内存,若做值传递,则形参需要开辟等同的大小的内存来接纳值,为了降低内存开销,也会采用地址传递,但该传递也是向函数

2021-11-29 21:53:20 592

原创 C高级(一)C语言指针

指针指针:(在64位机上,无论什么指针类型都占用8个字节,32位机是4字节)含义:一个数据类型,用于存储一个地址值地址:为了快速寻找到指定的内存单元,对内存中的每一个字节进行编址, 在64位机上地址的带下统一是8字节,一个指针变量的大小就是8字节变量名:是对某一块内存地址的抽象表示,可以理解为地址的别名,若要拿到变量的真实地址,则需要做(&变量)运算定义指针变量的目的:由于指针记录下来了某块内存的地址,则可以利用指针间接访问到该内存(读取、写入)指针更多会用在函数的传

2021-11-29 00:38:45 510

原创 C语言基础(二)——变量与常量

变量:局部变量:定义在某个大括号范围之间的变量生命周期:执行到定义时分配内存空间,大括号结束则内存被释放作用域:只能大括号范围内访问该变量全局变量:定义在所有函数之外的变量生命周期:程序运行时,分配内存空间,整个程序结束时释放内存空间作用域:在程序任意的位置都可以访问变量的修饰符:auto:变量的默认修饰符,可以省略不写,表示变量的内存由系统自动分配与释放const:常量修饰符,在程序运行的过程中其值不可更改signed:变量的默认修饰符,有符号unsigned:无符号,让数据

2021-11-23 20:51:28 514

原创 C语言基础(五)——数组与函数

数组:一维数组:变量的集合语法:数据类型 数组名称[数组的大小];数组元素的访问:数组名[下标]数组的下标是从0开始到数组的大小减1结束,若超出这个界限,属于数组越界的行为数组越界是危险的行为,不建议有这样的操作数组的大小一旦被固定,就无法更改其大小 求字节运算符:sizeof(数据类型 或 变量名):获取数据类型或变量占用的内存大小,单位字节,运算的结果为long类型变量的默认值:在一个局部定义后未初始化时,是有一个值的,该值是上一个程序遗留下来的值,没有实际的意义,称之为垃圾值字符

2021-11-23 20:32:07 356

原创 C语言基础(四)——循环语句

循环结构:goto:建议少用语法:标志:goto 标志; //跳转到指定的标志while循环:语法:while(条件表达式){//循环体,重复执行的代码}continue:结束本次循环,进入下一次循环break:跳出当前循环 循环的三要素: 1.循环的初始语句 2.循环的终止语句 3.指向循环结束的语句 通过控制以上三个语句,就可以控制好循环的次数do…while:无论条件是否成立,循环体至少被执行一次语法:do{//循环体,重复执行的代码}whil

2021-11-22 22:18:02 817 1

原创 C语言基础(三)——位运算与选择结构

位运算与选择结构:位运算:>> << & | ^ ~左移<<:将数字的二进制位整体向左移动指定的位数int a = 10;int b = a << 2; //b = 400000 1010 <<20010 1000 =40右移>>:将数字的二进制位整体向右移动指定的位数int a = 10;int b = a >> 2; //b = 20000 1010 >>2

2021-11-21 12:36:59 441 1

原创 C语言基础(一)——基本结构与进制转换

C语言的基本结构:#include <stdio.h> //预处理指令,在编译时要处理的代码,在编译时会从库指定的路径中寻找 //stdio.h文件,将该文件中的代码复制粘贴到此处 int main(void) //main是程序的入口函数,void表示没有参数,int表示返回值类型{ //功能实现部分 return 0; //结束当前函数,并向外返回一个值,人为规定,0状态返回表示程序正常结束,非0为异常结束}进制数:二进制:0-1二进

2021-11-20 23:05:25 923

原创 MFC下客户端与服务器端的Socket通信

基于VS2010 MFC创建客户端与服务器窗口,并实现连接和简单通信一、创建MFC工程和套接字对象1.创建客户端工程创建MFC工程名称ChatClient保存为位置自己选择,点击确定,再点击下一步,选择基于对话框。点击下一步直到高级功能,勾选套接字:点击下一步,选择生成APP,再点击完成,就创建好工程了。2.接下来创建类名为CClientSocket的客户Socket对象,项目/类向导/添加类/MFC类,基类为CAsyncSocket点击完成,在类视图中可查看添加的类:在解决方

2021-04-16 16:48:56 5075 15

原创 (图像处理)二值化处理,灰度值处理。(二)

上次说到任意格式图片打开,接下来对图片进行处理一、图片处理1、对图片进行简单二值化处理。在上次代码的基础上添加如下代码: using std::vector; byte* pRealData; pRealData = new byte[256]; pRealData = (byte*)image.GetBits(); //获取到图片内存点的位置 int width = image.GetWidth(); int height = image.GetHeight(); int pit

2021-03-29 19:23:47 777

原创 (数字图像处理)打开显示图片,以及图像处理,保存。(一)

为按钮添加打开文件的功能,并默认打开.png格式的文件,并在打开文件右下角添加文件类型选项,并将打开的图片显示在picture控件上。2.点击对话框,右键添加变量保存图片路径和名称变量,CString类型,变量名strFilePath,strFileName。2运行时,提示"不支持尝试执行的操作",可能是删除了某些控件,但是对应的控件变量没有删除掉,或者宏重定义。在控件关联函数 中查找并删除对应的控件变量,或者看自己有没有宏重定义。7.就会生成项目工程,可以把自动生成的一些控件删掉。

2021-03-26 15:16:59 3366 4

QT上位机串口实时温湿度显示完整工程

QT上位机串口实时温湿度显示完整工程

2024-04-08

虚拟串口工具vspd.exe

虚拟串口工具vspd.exe

2024-04-08

QT上位机串口实时温湿度显示完整工程

QT上位机串口实时温湿度显示完整工程

2024-04-08

STM32 使用硬件IIC驱动0.96寸4针OLED显示器(HAL库驱动程序)

STM32 使用硬件IIC驱动0.96寸4针OLED显示器(HAL库驱动程序)

2024-04-06

STM32 (基于HAL库)4×4矩阵按键驱动程序

STM32 (基于HAL库)4×4矩阵按键驱动程序

2024-03-18

基于STM32 AS608指纹模块驱动程序(轮询方式)

基于STM32 AS608指纹模块驱动程序(轮询方式)

2024-03-18

MFC下客户端与服务器端的Socket通信(PPT)

MFC下客户端与服务器端的Socket通信完整步骤PPT

2024-03-18

基于STM32 RC522射频模块驱动程序(HAL库)

基于STM32 RC522射频模块驱动程序

2024-03-18

基于STM32 AS608指纹模块驱动(中断接收方式)

基于STM32 AS608指纹模块驱动程序(中断接收方式)

2024-03-18

基于STM32CubeMX HAL库 LD3320驱动测试

关于STM32F103C8T6 LD3320驱动测试(HAL库、STM32CubeMX)

2024-03-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除