- 博客(99)
- 资源 (1)
- 收藏
- 关注
原创 STM32 DWT 实现硬件延时
延时性能:当MCU基于160MHz时钟全速运行时,延时1us时,误差约为356ns;延时1ms时,误差约为523ns。②Cortex-M33内核MCU。①Cortex-M3内核MCU。③Cortex-M4内核MCU。
2024-07-08 22:12:49
364
原创 STM32Cubemx HAL库 移植FreeRTOS源码
Free和RTOS,Free 就是免费的、自由的、不受约束的意思,RTOS 全称是 Real Time Operating System,中文名就是实时操作系统。可以看出 FreeROTS 就是一个免费的 RTOS 类系统,FreeRTOS 是 RTOS 系统的一种,FreeRTOS 十分的小巧,可以在资源有限的微控制器中运行,当然了,FreeRTOS 不仅局限于在微控制器中使用。但从文件数量上来看 FreeRTOS 要比UCOSII 和 UCOSIII 小的多。
2024-05-27 10:51:35
1674
1
原创 STM32 HAL TM1637使用
注意:TM1637在进行读写时需要应该应答信号反馈,当没有应答时容易则一直while循环,这是一个弊端。TM1637属于一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路。本文主要使用MCU是STM32 ,CubeMX+Keil5进行开发,使用HAL库。简介:TM1637可以带动16个按键以及做数码管驱动。
2024-05-15 16:51:22
772
原创 STM32 HAL TM1638读取24个按键
TM1638属于一款LED驱动控制专用电路,其特性如下:引脚定义如下在实际使用中,我们只需要使用三个单片机引脚就可以进行控制。分别是。
2024-05-15 16:11:06
1946
原创 STM32 HAL库 利用CH376进行USB文件读写
CH376芯片 是沁恒的一款文件管理控制芯片,用于单片机系统读写 U 盘或者 SD 卡中的文件。同时可以使用 CH376 操作 USB 键盘鼠标,以及打印机等各种 USB 设备。CH376 支持三种通讯接口:8 位并口、SPI 接口或者异步串口CH376芯片在前期使用中,配置也出现问题,主要是INT脚返回不了中断,一但去写就会返回fa报错,后面换了模块有问题,估计是硬件那里有问题。但现在已经解决了注意:在CH376创建文件夹、文件时只能大写英文,小写会出现问题。
2024-04-17 16:51:37
1939
1
原创 Git 关于SSH密钥的生成
打开 C:\Users\Administrator.ssh 目录, 复制 id_xxxxx.pub 内容。键入命令:ssh-keygen -t ed25519 -C "自己邮箱 "文件里面则是一些信息,如下 在结尾则是你的邮箱。桌面右键鼠标打开 “Git Bash Here”在这里就将刚才复制的放入,并添加密钥就可以了。然后在git操作台就可以进行代码上传与下拉了。搜索SSH,就有一个设置SSH的,进入后。
2024-02-20 10:05:56
726
原创 STM32 HAL NTC(3950 10k)查表法
NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻。其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化。现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系NTC热敏电阻材料。而图中的下面则是接NTC的接口。
2024-02-02 16:43:28
3038
原创 QT中QComboBox添加点击事件,实现下拉框自动刷新
因为项目需要,在QT中的ui界面添加QComboBox控件,需求是实现控件的点击事件,查了资料,发现这个控件类的本身是没有点击信号可以使用的。但是QT是基于C++的面向对象,有了这个特点,我们就可以继承原来的类,然后里面的方法来实现基类中没有的方法,比如事件。在中添加鼠标点击事件的步骤为首先新建一个类(MyComboBox),,然后在新建的类里面添加事件,mousePressEvent是QT里面的鼠标点击事件,直接就能用,接着在这个mousePressEvent事件函数里面触发自定义的。
2024-02-01 16:29:25
4443
原创 QT 之信号槽
当QT提供的信号槽无法满足我们使用要求的时候,则需要自己去设计自己需求的信号与槽,还是使用connect进行对自定义的信号槽如果想要自己定义信号槽,那么需要重新编写类让其继承Qt某些标准,自己编写的类想要使用信号槽则需要满足以下条件:1、这个类必须从QObject类进行派生 2、在定义类头文件中加入Q_OBJECT宏Q_OBJECT自定义信号则需要满足以下要求:1、信号是类的成员函数2、返回值是 void 类型3、信号的名字可以根据实际情况而定。
2024-01-29 16:30:57
986
原创 QT之 QDebug 调试(一)
还有一种则是当Debug调试完后,需要生成exe调试,则可以通过我们的控制台查看调试的信息。需要打开控制台,则需要修改一些文件。其QDebug 信息调试则如: qDebug()
2024-01-27 17:17:00
1093
原创 STM32 单片机重启(查看上次重启原因)
以下代码,识别是那种方式进行复位的,只需要将自己在那种方式复位运行的程序添加进去即刻,在这里面尽量进行一些事件更改,不要进行长时间任务运行。STM32启动后可以识别本次启动是对应哪一种复位源,从而可以根据复位源的状态,做一些特殊处理。RCC_FLAG_PINRST是RESET管脚产生的复位。RCC_FLAG_IWDG1RST是内置看门狗产生的复位。RCC_FLAG_WWDG1RST是外置看门狗产生的复位。RCC_FLAG_PORRST是上电复位(冷启动)RCC_FLAG_SFTRST是软件重启产生的复位。
2024-01-17 17:33:12
4285
2
原创 STM32G030F6P6读写flash失败问题(HAL)
最开始做项目选用的单片机是STM32F030F4P6,但是在后期使用中发现,我的FLASH(16K)不够用了,就选择了STM32G030F6P6来进行项目使用,主要是价格便宜,资源够用。在F030使用的flash拿到G030上来发现不可使用,就进行了一些修改,但是这个时候就出现了报错,在进行flash擦除的时候报错。但是手册给出是64位写,所以这里进行了报错,然后将这里改成下面函数,整个程序的读写就没有问题了,在此问题就得到了解决。返回我打印了这个error到底是多少,发现其值为0x80,发现报的错误是。
2023-12-27 15:50:39
4720
1
原创 STM32 HAL 使用FATFS文件系统
系统引导扇区:引导程序,以及文件系统信息(扇区字节数/每簇扇区数/保留扇区数等)文件分配表:记录文件存储中簇与簇之间连接的信息根目录:存在所有文件和子目录信息(文件名/文件夹名/创建时间/文件大小)数据区:文件等数据存放地方,占用大部分的磁盘空间FAT文件系统用“簇” 作为数据单元,一个“簇”由一组连续的扇区组成,而一个扇区的大小为512字节。所有的簇从2开始进行编号,每个簇都有自己的地址编号,用户文件和数据都存储在簇中。FATFS是专门用于小型嵌入式系统的通用FAT/exFAT文件系统模块。
2023-12-22 17:15:28
1720
原创 STM32之关于SD卡
SD总线上的通信基于命令和数据位流传输。命令:应用相关命令(ACMD)和通用命令(CMD),通过命令线CMD传输,固定长度48位响应:SD卡接收到命令,会有一个响应,用来反应SD卡状态。有2种响应类型:短响应(48位,格式与命令一样)和长响应(136位)。数据:主机发送的数据 / SD发送的数据。SD数据是以块(Block)形式传输,SDHC卡数据块长度一般为512字节。数据块需要CRC保证数据传输成功。卡识别模式和数据传输模式。系统复位后,主机和SD卡都处于卡识别模式,主机在总线上找设备;
2023-12-22 15:42:23
2262
原创 非阻塞式--无源蜂鸣器
这样就可以实现了,再配合分时操作任务,就可以实现很好的一个效果。在一般项目里面进本上都是这样来进行使用的。在现在很多设备中,大多数产品进行判断时,都是采用非阻塞式来进行运行。首先需要创建一个结构体,用于存储我们需要的变量。阻塞式:程序一直卡在哪里,不能去执行气体任务。非阻塞式:随时可被打断去执行其他任务。那如何使用这个函数呢?
2023-12-17 21:50:18
607
原创 宏定义控制printf
我这里没有做优先级区分,如果要做优先级区分,则只需要用一个控制所有的宏,宏在进行开关,这里面用到了串口的一些配置,可以查看下面的文章,也可以自己去搜来查看。在实际开发项目中,发现在调试工程中,使用了很多的打印函数或者其他调试函数,但是在项目结束后,想让其都不工作,在需要的时候在进行打开就行呢?所以就有这宏定义控制打印或者调试函数。
2023-12-11 19:29:09
924
原创 STM32笔记
通过屏蔽位,可以过滤出特定的标识符。在上面的示例中,定时器中断服务函数 TIM_IRQHandler() 首先通过 __HAL_TIM_GET_FLAG() 函数检查是否发生了定时器的更新事件(即更新标志位被置位),然后使用 __HAL_TIM_CLEAR_FLAG() 函数来清除更新标志位。在上面的示例中,我们使用 HAL_CAN_ActivateNotification() 函数来启用 CAN_IT_RX_FIFO0_MSG_PENDING 中断,并在回调函数中处理接收到的 CAN 帧。
2023-11-21 19:02:32
2096
原创 ADC常见的一些滤波算法
对于目前这些ADC采样算法而言,在项目中遇到对应问题去做对应的算法进行优化得到的参数,只能尽量让ADC数据更加符合项目所需,后续遇见其他算法,就继续添加在这里让大家一起用。N值的选取:流量,N=12;液面,N=4 ~ 12;如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入交易系统。如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。
2023-11-07 22:02:22
960
原创 RS485以及MODBUS学习
学习目的:1、什么是485?2、485如何通信?3、如何使用熟能生巧?RS485是一种四总线通信,分别是VCC、GND、485_A、485_B。两根负责通信,两根负责进行供电。硬件层:解决的是数据传输问题,也就是如何将“0”和“1”传输到另外一端设备。软件层:ModBus协议则是解决数据传输的含义和意义那么单片机则是如何进行485通信的?
2023-09-18 23:39:45
831
原创 LVGL基础部件学习笔记
LV_PART_MAIN 类似矩形的背景LV_PART_SCROLLBAR 滚动条LV_PART_INDICATOR 指标,例如用于滑块、条、开关或复选框的勾选框 LV_PART_KNOB 像手柄一样可以抓取调整值LV_PART_SELECTED 表示当前选择的选项或部分LV_PART_ITEMS 如果小部件具有多个相似元素(例如表格单元格)LV_PART_TICKS 刻度上的刻度,例如对于图表或仪表。
2023-01-13 15:46:16
6377
2
原创 LVGL的初步了解以及移植到STM32
是最受欢迎的免费开源嵌入式图形库,可为任何MCU、MPU和显示器类型创建漂亮的用户界面。使用,使用拖放UI编辑器来简化开发。
2023-01-01 14:56:19
5455
原创 针对Linux进行的优化修改
1、修改vim的TAB键值为4个字符首先打开VIM的/etc/vim/vimrcvi /etc/vim/vimrc然后在文件末尾添加以下set ts=42、vim编辑器显示行号在上面的同样操作下,在下一行输入set nu
2022-12-13 16:37:19
185
原创 STM32学习之Keil5软件配置
代码编写环境可以让编写者在代码编写上有一定的好处,从而得到高效的代码编写。本次笔者写的是一些市面上常用的嵌入式开发软件Keil5,在初始化使用软件界面需要进行配置的。主要分为五大部分(文本美化、代码编辑技巧、查找和替换技巧、工程编译问题定位、窗口视图管理)。
2022-11-30 11:24:09
6179
原创 基于STM32的u8g2移植以及学习
U8g2是嵌入式设备的单色图形库。主要应用于嵌入式设备,包括我们常见的单片机使用,最常用的是OLED屏或者LCD屏进行使用的一个库;我们常用的OLED屏其内部原理一个M x n 的像素点阵,想显示什么就得把具体位置的像素点亮起来。对于每一个像素点,有可能是1点亮,也有可能是0点亮;其坐标系如下所示。
2022-11-28 17:45:27
6019
4
原创 C语言将“数字转换成字符串”
根据自己需要将前面的uint8_t可以改成char,下面的uint8_t是使用给OLED屏的。后续有其他的需求再在此后面添加,进行增加其他知识。
2022-11-14 15:06:44
1383
原创 程序规范化编写
如果一个函数只在同一个文件的其它地方调用,那么就应该用 static, static 确保这个函数只在声明它的文件是可见的,这样可以避免和其它库中相同标识符的函数或变量发生混淆。如果有多条语句的话,可以通过大括号来解决。\\}
2022-11-03 11:42:48
799
原创 C语言——问题总结
枚举是一中类型,可以用来定义变量,可以包含多个枚举成员,而宏是替换,没有类型,也没有多个成员。强调:enum;1、枚举成员的每一个成员都是整数2、分隔符:为逗号‘,’3、可以直接赋值:struct和union都不行。4、枚举的成员直接访问。
2022-10-28 23:08:21
653
原创 在QT 中添加NDK遇见的问题
例如“D:\Program Files”或“D:\Program Files (x86)”都不可以。而该错误则是,在安装这个目录下不能存在空格,也就是不能安装在有空格的地方。
2022-10-28 23:06:46
1368
原创 STM32HAL库使用ESP8266模块
ESP8266一共具有3种工作模式,这三种工作模式softAP 模式,station 模式,softAP + station 共存模式三种。这三种模式对应着三种不同的状态。1、station 模式此时的ESPP8266模块可以当作是一个客户端,可以向服务端进行数据的下载与传输,可以比喻成此时的ESP8266就是一个不能开热点的手机,一般这种模式用于远距离传输。2、softAP 模式处于AP模式的ESP8266,此时就是一个服务端,也就是一个只能开热点,但是没有移动网的热点,一般这种模式用于近距离传输信息。
2022-10-27 18:03:09
5271
3
原创 STM32HAL库利用实现单击、双击、长按
要实现单片机的单击、双击、长按操作则需要理解一下他们的区别是什么可从图中观察到单击在一定周期里有一个低电平,双击则是两个低电平,本次进行的软件 STM32CubeMX + Keil5设计思路是这样的初始化一个全局标记按键中断事件发生后置位标记while死循环中一直检测这个标记,如果被置位那么进行消抖,然后再次检测连接KEY的IO是否处于按下状态,如是则认为本次按键有效第一次按键事件有效后,启动定时器定时300ms。
2022-10-23 17:54:43
5054
2
原创 STM32定时器深入学习
STM32定时器分为高级定时器 TIM1和TIM8通用定时器 TIM2、TIM3、TIM4、TIM5基本定时器 TIM6、TIM7三种定时器都是16位的自动装载计数器组成,由一个可编程的预分频器驱动。
2022-10-22 19:02:29
1562
原创 裸机开发之驱动开发
在基础的驱动框架中,有一个加载和卸载函数,这个函数是安装或者卸载这个驱动的将会去处理的函数。当然,这些对应的函数则需要我们自己去按照格式进行操作,如open对应的led_open就是一个函数,看上面的例程就可以看到对应的操作。每个函数指针赋值为函数地址,就代表当应用程序调用对应的文件io函数时,驱动就执行函数指针赋值的对应函数,例如下面的LED驱动例程中的。,每个块都有自己的地址。驱动控制硬件,控制外设,其实就是控制地址,通过地址往寄存器写入、读出控制内核驱动是通过虚拟地址操作,则就需要用到另外的函数,
2022-10-21 17:53:44
1565
原创 裸机开发之驱动开发(中断的实现)
2、在设备树中添加自己的硬件设备信息---添加key3节点-----描述当前设备的的信息内容(中断号) arch/arm/boot/dts/exynos4412-fs4412.dts:实现硬件描述(中断号):就是一个号码,中断控制器管理所有中断的编号,外设连接的引脚就对应了引脚的中断控制器的中断号,有硬件设备----设备的中断号。1、(外设产生中断,驱动要能检测到中断---申请中断(根据中断号))3、在驱动中申请中断,实现中断处理。二、实现驱动工作----中断驱动应该做什么。
2022-10-16 22:52:44
878
原创 数据结构——二叉树、查找、排序
二叉树是n(n>=0) 个节点的有限集合 或者是空集(n=0)由一个根节点以及两颗互不相交、分别称为左子树和右子树的二叉树组成。
2022-10-05 16:12:46
387
基于51单片机实现的自动输液监控器
2022-11-16
基于霍尔传感器的出租车计价器设计
2022-11-16
多功能饮水机(51单片机、蓝牙、继电器)
2022-11-16
U8g2单色图形库源码
2022-11-16
本资源是用来进行字库转换的,主要用在u8g2上
2022-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人