自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字符串常量,数组和指针的不同形式,以及和整数常量的区别

字符串"hello"在内存中是一个字符数组,并且存储在常量区域中(对于指针的情况)。对于字符数组(如s1[]),会在栈中复制该字符串的内容,允许修改。对于字符串常量(如s2),指针指向常量字符串区域,它们是不可修改的。

2025-03-25 23:44:27 304

原创 栈(Stack)和堆(Heap)

栈是一种**后进先出(LIFO)**的数据结构,用于管理函数调用时的内存分配和释放。程序员通过显式调用内存分配函数(如。掌握好栈和堆的使用,可以使程序更高效、更安全!)来使用堆内存,并需要手动释放(

2025-03-24 01:48:44 285

原创 空类型指针

void*

2025-03-24 01:18:42 186

原创 STM32标准库开发中断流程

使能外设和GPIO时钟→配置GPIO→外设参数设置并使能外设中断→ 外设初始化函数,如和NVIC中断控制器配置→编写对应的中断服务函数(ISR)→ 用户自行定义IRQHandler函数并处理对应的中断标志。

2025-03-24 00:40:10 485

原创 STM32Cube HAL库开发STM32项目时所需要的基本文件及详细说明

实际项目中需根据具体需求增减对应的外设驱动文件和功能模块。STM32Cube HAL库提供外设驱动API,按照外设类型划分,包含头文件(.h)和源文件(.c)。MCU Support Package文件,实现外设对应的GPIO、DMA、中断等底层硬件初始化。每个外设的HAL驱动库提供了配置、初始化和使用该外设的标准函数,如GPIO配置函数。定义并实现中断服务例程,处理如定时器中断、串口中断、外部中断等。主程序入口文件,包含用户程序逻辑、外设初始化、主循环。主程序头文件,定义公共宏、全局变量及函数原型。

2025-03-24 00:21:42 1041

原创 stm32标准库开发需要的基本文件结构

作用:定义STM32芯片外设和寄存器地址,定义了大量寄存器结构体,便于底层寄存器操作。文件示例位置。

2025-03-23 23:27:44 991

原创 外设的中断控制

方式中断生效时长数据处理方式再次调用需求底层控制 (持续有效(一次调用长期有效)用户手动读取寄存器一般无需库函数控制 (HAL_xxx_IT一次有效(传输结束自动关闭)库自动管理缓冲区,使用回调函数必须重复调用。

2025-03-23 11:51:11 305

原创 中断启用的两种方式

项目层次底层函数,手动配置上层函数,自动管理缓冲区无,需用户自行管理自动管理数据读取用户手动读取DR寄存器库自动存入用户定义缓冲区回调机制无需使用回调,自行处理使用回调便利性低,需手动实现逻辑高,使用简单功能方法一 (方法二 (中断开启方式手动调用库函数自动调用缓冲区管理手动实现HAL库自动管理数据读取方式用户自行读取寄存器库自动读取到缓冲区中断服务函数用户手动实现库函数处理,回调函数用户实现推荐场景需要精细控制底层通用快速应用使用。

2025-03-23 11:35:09 440

原创 STM32滴答定时器(SysTick)原理及延时函数实现

SysTick是ARM Cortex内核内置的一个24位向下递减计数器,通常用于操作系统的时基和任务调度。STM32中,这个定时器也经常用于实现精准的延时功能。SysTick的寄存器包括:CTRL (控制和状态寄存器)LOAD (重装载寄存器)VAL (当前值寄存器)CALIB (校准寄存器)STM32中SysTick定时器以其高精度和内置特性,非常适合用于延时函数实现和实时操作系统的时钟节拍,实现简单且精确,是嵌入式开发中非常常见的一种延时方法。

2025-03-23 11:02:02 364

原创 HAL库中串口中断开启

这种方法适合于单字节灵活接收的场景,每当收到一个字节,就会进入中断。你可以根据你的实际需求选择更合适的一种方式来应用中断接收功能。这种方法适合固定长度数据的接收,例如特定协议的数据包传输。

2025-03-21 19:15:47 316

原创 can.c与driver_can.c区别与联系

driver_can.c中定义了各种函数,可以修改初始过后的参数,如下图所示是对速度的修改函数。can.c中的can1初始化。

2025-03-21 01:58:48 148

原创 HAL库定时器配置

这段代码主要用于初始化TIM2定时器,配置输入捕获功能并启用中断。它设置了定时器的时钟、输入捕获的配置、定时器的主从模式、并启用了多通道的输入捕获中断。

2025-03-21 01:13:07 573

原创 HAL库中断的理解

配置外设和中断。启用外设的中断使能并配置 NVIC。中断触发时,系统会调用中断服务函数。在中断服务函数中,调用 HAL 库的中断处理函数(如会根据外设的中断标志调用对应的回调函数(如在回调函数中处理具体的业务逻辑,例如读取接收到的数据、重新启动接收等。通过这个流程,STM32 HAL 库能高效、简洁地处理中断,并使用户能够灵活地在回调函数中处理各种事件。是的,您理解得完全正确。在 STM32 的 HAL 库中,传入&huart1类型的结构体)到中断处理函数(例如。

2025-03-21 00:59:00 794

原创 中断服务函数和回调函数的理解

中断服务函数库中断处理函数用户回调函数用户只需实现即可,无需直接修改库提供的ISR。

2025-03-20 21:29:11 281

原创 HAL库中,MSP函数的理解

这些函数配置外设内部参数,如波特率、工作模式。,如果 NVIC 配置放在这里,就能保证。中实现,用于底层硬件资源配置。

2025-03-20 19:08:29 380

原创 一次性讲清楚STM32-HAl库开发项目文件结构

启动文件用户文件包括:main.c、gpio.c、can.c、time.c、usart.c、stm32fxx_it.c、stm32fxx_hal_msp.c等等,这类文件是配置外设初始化的文件,stm32fxx_it.c文件 这个文件,也就是中对应的处理函数。当 STM32 发生中断时,负责调用 stm32fxx_it.c 里定义的中断处理函数(IRQHandler)。

2025-03-20 19:07:46 606

原创 HAl库开发中断方式接收Can报文的详细流程

初始化阶段完成 HAL 库、时钟、GPIO、CAN 外设以及 NVIC 中断的初始化。CAN 配置阶段设置 CAN 参数,配置滤波器,启动 CAN 模块。使能中断在 MSP 初始化中使能 CAN 接收中断,使得接收 FIFO0 报文时能触发中断。中断回调处理当 CAN 检测到新报文时自动进入 HAL_CAN_RxFifo0MsgPendingCallback 回调函数。在回调中调用 HAL_CAN_GetRxMessage 从 FIFO0 读取报文。

2025-03-20 00:03:33 765

原创 Can通信流程

初始化阶段HAL 初始化、系统时钟、GPIO 配置、CAN MSP 初始化(使能时钟、GPIO、NVIC 等)。CAN 模块初始化配置 CAN 参数(波特率、模式等),调用。配置滤波器(决定哪些报文被接收),调用。启动 CAN 模块,调用。发送阶段构造发送报文(填写 CAN_TxHeaderTypeDef、数据数组)。将报文写入发送邮箱,调用。监控发送过程,处理发送成功或错误。

2025-03-19 23:31:07 1167

原创 HAL库编程知识点---Can.c和Driver_can.c分层开发

这种分层结构有助于代码的重用和维护,当底层硬件变化或更新时,只需要修改 can.c,而上层的 driver_can.c 接口则可以保持不变。在一个工程中,通常会把对CAN外设的操作分成底层和上层两个部分,从而提高代码的模块化和可维护性。

2025-03-19 22:54:39 242

原创 关于HAL库的知识1----MSP函数

的主要作用是对微控制器的各个 GPIO 引脚进行初始化设置,使得所有需要用到的引脚在程序开始运行时已经处于预期的工作状态。它负责配置引脚的工作模式、时钟、上下拉及复用功能,而不涉及外设的其他低级配置(如外设时钟、中断设置等),这些通常在对应的 MSP 初始化函数中处理。虽然某些外设(如 CAN)的复用引脚配置会放在对应的 MSP 初始化函数中,但一些常见外设(如 UART)的引脚配置可能直接包含在。的初始化配置集中放在一个文件中,可以使整个工程的引脚配置一目了然,方便调试和后期维护。

2025-03-19 22:38:42 393

原创 指针的本质

在定义函数时,如果想修改main()函数中指针的指向(指针的地址中的内容)时,定义函数时参数需要传入二级指针,在main函数中调用该函数时输入指针的地址;在定义函数时,如果想修改main()函数中参数(内存)中的数据时,定义函数时参数需要传入一级指针,在main函数中调用该函数时输入参数的地址;计算机的本质就是 地址与数据,有地址就可以改变该地址中的数据,不管是普通变量还是一级指针变量、多级指针变量、

2025-03-19 17:26:30 90

原创 STM32工程模板及文件作用

stm32文件结构

2025-03-17 19:51:25 175

原创 安装驱动是有什么作用,它是怎么工作的

驱动程序的核心作用是使操作系统能够与硬件设备通信,它将复杂的硬件操作抽象为操作系统和应用程序可以理解的接口。安装驱动的目的是确保操作系统能够识别并正确使用设备。驱动程序的工作涉及到设备识别、初始化、数据传输和中断处理等多个方面。如果您对某种特定设备的驱动或流程有进一步的问题,可以告诉我,我可以提供更具体的解释。

2024-09-11 23:19:03 1777

原创 PyQt5结合Yolo框架打包python为exe文件完整流程

一、准备1.安装 pyinstaller更新(初次安装忽略)2.安装 auto-py-to-exe安装打开工具auto-py-to-exe 可视化转换工具:二、打包1.选择主程序路径,配置参数,点击生成2.等待转换完成…

2024-04-14 19:24:21 2407 1

原创 lambda x: None用法本质

被替换为了一个匿名函数,程序不会真正休眠,但调用本身在语法上是有效的,并且不会导致程序崩溃或运行时错误。这在进行单元测试或需要临时屏蔽某些功能的开发阶段特别有用。这种方式破坏了原有的代码结构,因为原本期望是函数调用的地方现在变成了尝试对。这种方式的关键在于,你保留了函数调用的语法。因此,根据你的实际需求选择适当的方法。类型执行调用操作,这在大多数情况下都不是我们想要的行为。这样的函数调用时,Python 解释器会抛出一个。的功能而不影响代码其他部分正常运行时,使用。的类型,它不再是一个函数,而是。

2024-03-31 16:17:14 466

原创 在Jetson Nano上使用TensorRT来加速模型

1. **模型转换**:首先,你需要将训练好的深度学习模型转换为TensorRT支持的格式。例如,如果你的模型是用TensorFlow或PyTorch框架训练的,你可以使用ONNX(Open Neural Network Exchange)格式作为中间步骤,然后将ONNX模型转换为TensorRT优化的模型。2. **优化**:TensorRT会对模型进行一系列的优化操作,包括层融合、精度校准(比如从FP32到FP16或INT8)、内核自动调优等,以提高模型在特定硬件上的执行效率。

2024-03-26 23:05:37 862

原创 计算机视觉中的NMS非极大值抑制

具体来说,会计算这些边界框与置信度最高的边界框的交并比(IoU),如果IoU超过某个阈值(例如0.5),则这些边界框会被认为是对同一个目标的多余检测,并因此被抑制。它的主要目的是减少目标检测过程中的多余的边界框,以便只保留最佳的一个边界框。在目标检测任务中,算法会对图像中可能出现目标的区域进行评分,并为它们生成边界框。3. 从剩下的边界框中再次选择置信度最高的边界框,重复上述过程,直到所有的边界框都被处理完毕。1. 选择置信度最高的边界框(即目标存在的可能性最高的边界框)。

2024-03-26 22:27:30 803

原创 YOLO中的预训练模型是否需要

参数`--weights`后面跟的是预训练模型的权重文件,这里用的是`yolov5s.pt`,其中`yolov5s`代表的是YOLOv5的一个小型版本,适用于在资源有限的设备上进行快速训练和检测。这个命令同样是用于训练YOLOv5模型,但与上面的命令不同的是,这里`--weights`参数后面是空的,意味着训练将从头开始,不使用任何预训练的权重。`--cfg`参数后面跟的是模型的配置文件,这里使用的是`yolov5s.yaml`,该文件定义了模型的架构和其他参数。这里列出的是两个不同情况下的命令行用法。

2024-03-26 22:11:05 3536 1

原创 YOLO版本迭代

3. **YOLOv5的命名争议**:当Ultralytics发布YOLOv5时,它引起了一些争议,主要是因为命名方式突然改变(跳过了v4,因为v4是由另一团队开发的),以及YOLO的原创作者不再参与。4. **逐渐被接受**:随着时间的推移,Ultralytics的YOLOv5由于其性能、易用性和社区支持,逐渐获得了广泛的认可和使用。综上所述,YOLOv5之所以最初不强调“Ultralytics”,是因为它在一个转折点上出现,既是YOLO算法的继承者,也是由一个新的团队在不同的命名和发展背景下推出的。

2024-03-23 16:14:24 381

原创 YOLO中的三个数据集

如果我们只用训练集来调整这些设置,我们可能最终会得到一个对训练数据过度优化(即过拟合)的模型,这样的模型对新数据的预测性能往往会下降。验证集相当于是训练过程中的“模拟测试”,它帮助我们监控模型在未见过的数据上的表现,并据此调整超参数,比如学习率或模型结构的选择等。但是,我们希望这个模型不仅仅在我们用来训练它的数据上表现良好,更重要的是,它也能在新的、未见过的数据上表现良好。总之,验证集的作用就是在训练过程中提供一个独立的性能反馈,帮助我们选择和调整模型配置,以达到在未见过的数据上也能表现良好的目标。

2024-03-23 15:55:03 1745

原创 在OpenCV的detectMultiScale方法中,scaleFactor参数

假设你有一个图像,并且你想在这个图像上进行面部检测。面部可能以不同的大小存在于图像中,因此我们需要以不同的尺度来查找面部。这就是发挥作用的地方。

2024-03-23 15:53:55 829

原创 Yolo中的参数:--cfg 参数和 --weights 参数

这些权重可以是随机初始化的,也可以是通过在另一个(通常是相似的)数据集上预训练得到的。使用预训练权重可以帮助模型在新的数据集上更快地收敛,并可能提高最终模型的准确率。这是一种迁移学习的方法,它利用了在一个任务上学到的知识来帮助解决另一个相关的任务。)定义了模型的架构,包括但不限于模型层的数量、类型、尺寸以及其他模型结构相关的配置。提供了“模型开始训练时的知识基础”(即模型参数的初始值)。这两个参数共同决定了训练开始时模型的状态,包括它的结构和参数。指定的是模型训练开始时使用的权重文件的路径,这个文件(如。

2024-03-06 13:06:19 2669 1

原创 苹果id使用说明

例如:账号xxxx@163.com----密码xxx----邮箱密码xxx----密保----生日xxx-xx-xx----朋友xxxx----工作xxx----父母xx。账号所有信息一经交付,其安全问题自交付之日起由买家承担,买家可自行修改密码、密保、手机号等信息,卖家只保证首次登录成功。千万记住,只有常用号才能消费,否则容易触发风控系统,导致充值成功,但是付款失败,并且苹果不会退钱,余额不能提现;即使是国区绑定支付宝、微信进行支付的账号,长时间不登录,也会提示你验证支付渠道,以保证支付安全;

2023-10-13 12:04:01 1199 1

原创 C语言标识符的分类:关键字、预定义标识符、用户定义标识符

C语言中系统预先定义的标识符,如函数库中的函数名、宏定义和类型别名(typedef)。预定义标识符具有见字明义的特点,如函数“格式输出”(英语全称加缩写:printf)、“格式输入”(英语全称加缩写:scanf)、sin、isalnum等等。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原意,使用不当还会使程序出错。注:C语言函数库中的函数名可以成为用户定义的变量名!!!允许但不安全!!!关键字不允许定义为用户定义标识符!!!!用户根据需要自己定义的标识符。

2023-09-16 17:41:25 3311 1

原创 printf()函数,指针,字符数组,字符串

注意:在字符指针中p 、*p 和&p的区别:p是指针变量指向字符串首元素(前提对p指针没有进行指针操作),p中存放首元素的地址(一旦被初始化就,系统就为我们分配好了地址,而且地址也不能改变,因为字符指针是一个只读变量,你不能企图对一个初始化好的指针进行内部修改),而*p是对指针变量p进行解引用操作,也就是指针所指向的内容,而&p是对指针变量取地址,所以也就肯定不会和p的值相等,因为字符指针系统会为其分配内存,p的值是字符串首元素的地址。答:是的p肯定是指针变量,它也一定是地址,但是别忘了。

2023-09-14 11:30:56 425

原创 python基础

字典{(元组):“value”},增加了key中的元素,更多区分,比如同名通讯录;字符串长度:无论一个数字、字符、文字、空格都是一个长度,完整的转义字符如/n为一个长度;f = open("路径",模式,encoding=“utf-8”)字典{“key”:"value","key":"value"...}空类型None同样;需要注意的是:w和a模式下不允许读文件,r+模式支持读写操作;1:'' ".format(替换的内容)'' ".format(参数=替换的内容)模式分r、w、a、r+模式。

2023-05-24 21:40:49 90

原创 conda代码常用

安装jupyter(Jupyter Notebook是基于网页的用于交互计算的应用程序,JupyterLab 是 Jupyter 主打的最新数据科学生产工具,某种意义上,它的出现是为了取代Jupyter Notebook)创建名为name的虚拟环境,同时安装python3.6版本。①先 clone 一份 new name 的环境。②删除 old name 的环境。# 查看python版本。进入jupterlab。查看所有已安装虚拟环境。进入notebook。

2023-05-23 20:09:30 388

原创 vscode里面的解释器位置不同,用cv读取图片的图形化界面也不同

如果使用相同的代码和相同的解释器,但在不同的位置上运行,而界面显示仍然不同,这可能是由于其他因素引起的。如果上述检查都没有解决问题,建议提供更多具体细节,例如代码示例和在不同位置上的相关配置,以便更好地理解问题并提供帮助。环境变量:检查在两个位置上是否设置了相同的环境变量。工作目录:确认在两个位置上的工作目录是否相同。版本差异:检查使用的cv库的版本是否相同。不同的版本可能具有不同的默认行为和配置。图像路径:确保在代码中使用的图像路径是正确的,并且可以在两个位置上找到图像。

2023-05-19 22:03:19 193

原创 conda环境安装指定位置的虚拟环境

【代码】conda环境安装指定位置的虚拟环境。

2023-05-19 15:04:28 5885

原创 【无标题】

就是扩展名为.py的文件,里面定义了一些函数和变量。通过使用模块,不仅可以有效地避免命名空间的冲突,还可以将一个较大的程序分为多个文件,提升代码的可维护性和可重用性。在模块之上的概念,为了方便管理而将文件进行打包。包目录下第一个文件必须是__init__.py,否则就是普通股的文件夹目录。然后就是一些模块文件和子目录,假如子目录中也有__init__.py,那么它就是这个包的子包了。

2023-05-18 22:22:02 49

Qt5 串口助手请康子哥测试一下

Qt5 串口助手请康子哥测试一下

2023-03-17

空空如也

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

TA关注的人

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