- 博客(55)
- 收藏
- 关注
原创 对开漏输出的理解
这个名字来源于其内部电路结构,非常形象。核心结构:开漏输出内部只有一个 MOSFET(场效应管,可以想象成一个电子开关) 作为输出级,并且这个开关的一端连接着输出引脚,另一端直接 “漏” 到了 地(GND)。这个MOSFET的 “漏极” 是直接对外开路的,因此得名 “开漏”。与之对应的是“开集输出”(使用BJT三极管,原理类似)。工作原理:当内部电路想让输出为低电平(0)时:它会打开这个MOSFET开关。此时,输出引脚通过这个开关被“拉”到地,电压接近0V。当内部电路想让输出为高电平(1)时:它会关闭
2025-12-22 10:33:22
340
原创 使用DMA_Idle中断对数据进行接收
(3)数据未传输完毕因空闲而中止也要中断接收的变量传入的环形缓冲区。(2)数据传输完成以后将变量存入到环形缓冲区。(1)一开始初始化环形缓冲区并开启空闲中断。
2025-12-20 14:58:11
194
原创 串口发送之中断函数函数改造
中断函数HAL_UART_Receive容易造成数据丢失,因此我们使用将串口接受的数据存入到环形缓冲区,环形缓冲区顾名思义缓存串口接收到的数据。
2025-12-19 21:34:14
209
原创 串口发送之中断方式
HAL_UART_Transmit_IT 启动发送函数HAL_UART_TxCpltCallback 发送完成回调函数//回调函数的作用是通知main函数,所有的都已经全部发送完了HAL_UART_Receive 启动接收函数HAL_UART_RxCpltCallback 接收完成回调函数。
2025-12-19 20:13:23
152
原创 使用环形缓冲区防止按键丢失
将读到的数据存入到环形缓冲区,作,我们这一节课来使用环形缓冲区,将按键数据写入到环形缓冲区,再将它读出来显示在OLED上。
2025-12-01 16:22:15
296
原创 为什么使用HAL_UARTEx_ReceiveToIdle_DMA函数回调函数要使用两个,一个是HAL_UART_RxCpltCallBACK,另一个是HAL_UARTEx_RxEvebtCallba
使用两个回调函数可以更灵活地处理串口接收数据,无论是固定长度数据(DMA接收完成)还是可变长度数据(空闲事件)。这样确保了数据接收的完整性和及时性。
2025-12-01 11:22:34
276
原创 使用定时器实现按键消抖
最近在网上学习韦东山老师的课程,感觉老师讲的很不错,不过需要有一定的基础才可以,最开始在学习这部分的时候,听不懂老师在讲什么,后面自己梳理了代码的逻辑,算是茅塞顿开吧!
2025-11-26 10:27:03
553
原创 遇到的问题:keil里点击load以后程序不运行,点击debug进去再退出来,程序运行?这是为什么呢?Debug是一个非常强硬且彻底的复位按钮
HW RESET:硬件复位,最彻底的复位方式,通过NRST引脚实现,效果等同于按复位键。这个方法还没有试,开发板短路了,等好了再试!
2025-11-25 16:54:30
151
原创 结构体变量和结构体指针使用
结构体变量:当作为函数参数传递时,会进行值传递,即复制整个结构体的值。结构体指针:传递的是指针(内存地址),因此是地址传递。例如,如果结构体有多个成员,就会分配这些成员所需的总内存。结构体指针:如果指向动态分配的内存(如malloc),则需要手动释放(free),否则会导致内存泄漏。结构体指针:赋值操作只是复制指针的值(即地址),使得两个指针指向同一个结构体。结构体变量:可以将一个结构体变量赋值给另一个同类型的结构体变量,这会进行逐个成员的复制。结构体指针:可以为NULL,表示指针不指向任何有效的结构体。
2025-11-14 10:13:36
374
原创 GPIO中断实现流程
GPIO中断实现的流程:GPIO外部引脚电平发生跳变触发EXTI中断(包含上升沿触发,下降沿触发,双边沿触发)触发后的信号传送到NVIC,NVIC设置中断优先级包含抢占优先级和分组优先级,同时进行使能(使能的含义就是允许中断触发的信号进入CPU),同时把中断向量表给CPU,CPU根据中断的优先级去处理各个中断。外部引脚电平变化------------EXTI中断--------------NVIC------------------CPU。EXTI功能:1.上升沿触发中断/下降沿触发中断/双边沿触发中断。
2025-11-13 11:34:21
517
原创 SPI flash挂载fatfs文件系统
本实验基于STM32F427开发板,通过移植FatFs文件系统实现对W25Q64 SPI Flash的读写操作。实验内容包括:1)硬件平台搭建,使用8MB容量的W25Q64 Flash;2)FatFs源码集成与配置,重点修改diskio.c实现底层驱动接口;3)W25Q64驱动开发,包含初始化、读写、擦除等功能;4)文件系统格式化、挂载及文件操作。测试分两阶段:首次上电完成格式化、文件创建及数据写入;断电重启后验证数据持久性。实验成功实现了文本文件的写入和断电后读取,验证了Flash存储的可靠性。关键点包括
2025-09-04 15:47:21
1032
原创 RK3568开发板/电脑/ubuntu处于同一网段互通
win+R输入cmd打开电脑终端输入ipconfig或arp -a查看无线局域网IP地址,这就是WIFI.这里的IPv4是192.168.0.147,ipconfig。
2025-02-20 18:13:59
607
原创 Yolov5算法移植RK3568开发板完整步骤
否则在rknn模型转换的最终步骤就会报错!,为什么呢,因为在训练自己的权重文件过程之后过程中选择的是官网。强调一点模型训练时选择的图片大小必须是。完整的移植步骤终于实现了!
2024-11-25 13:08:35
473
原创 6.算法移植第六篇 YOLOV5/rknn生成可执行文件部署在RK3568上
接上一篇文章best-sim.rknn模型生成好后,我们要将其转换成可执行文件运行在RK3568上,这一步需要在rknpu上进行,在强调一遍!!退出上一步的docker环境exit。
2024-11-22 11:55:59
903
原创 5.算法移植第六篇YOLOV5 /onnx模型转换成rknn
上两篇文章讲述了pytorch模型下best.pt转换成onnx模型,以及将onnx进行简化成为best-sim.onnx,接下来这篇文章讲述如何将onnx模型转换成rknn模型,转换成该模型是为了在rk3568上运行。
2024-11-22 10:29:03
1953
原创 4.算法一直系列第四篇模型转换best.pt转onnx,运行export.py修改文件
结果运行export.py发生报错 修改export.py这部分代码。模型转换时将上述部分改为。将上述代码将进行修改。
2024-11-11 13:18:20
648
4
原创 3.算法移植系列第三篇yolov5训练时修改train.py文件
修改为自己的nc种类 nc: 1 # number of classes。同时修改\yolov5\\models\\yolov5s.yaml。
2024-11-11 12:03:10
216
原创 1FreeRTOS学习(队列、二值信号量、计数型信号量之间的相同点和不同点)
队列、二值信号量、计数型信号量均可用在任务与任务,任务与中断之间进行消息传递 创建队列--发送队列--接受队列 创建二值信号量--发送二值信号量--接受二值信号量 创建计数型信号量--发送计数型信号量--接受计数型信号量 最主要的不同是队列在写队列和读队列过程中均可阻塞,信号量在释放过程中不可阻塞在获取过程中可阻塞。 二值信号量相当于队列长度为1的信号量,只有0和1两种状态 计数型信号
2024-10-28 22:27:30
464
原创 ping mirrors.aliyun.combash: ping: command not found
在docker镜像中无法ping,也无法更新!问题出在docker镜像中无法连接liunx内网,而是使用了docker默认的桥接网络,我们只要保证docker网络和linux网络互通即可。我们只需要更换命令将镜像运行,指定docker网络为linux主机网络即可,就可以在该docker镜像下运行。使用 Docker 默认的桥接网络。根本原因使用该命令,在该环境下。
2024-10-28 14:14:29
1112
原创 2.算法移植系列第二篇 yolov5训练数据集
这是执行训练脚本的命令,其中train.py是 YOLOv5 模型训练脚本的名字。这个脚本位于 YOLOv5 项目的目录中。:这个参数指定了训练过程中的批量大小(batch size)。批量大小是指一次训练过程中传递给模型的数据样本数量。在这里,批量大小设置为 2,意味着每次训练迭代将使用 2 个样本。:这个参数指定了训练过程中的迭代次数,也就是整个数据集将被训练多少次。在这个例子中,设置为 150 次。:这个参数指定了数据集配置文件的路径。data.yaml。
2024-10-14 19:38:08
624
原创 AssertionError: train: No labels found in,can not start training. 训练数据集时出现的错误来源(自制数叶数据集)
train/images中的每一个图片均对应txt,而我之所以出现AssertionError: train: No labels found in,can not start trainin,就是在使用labelImg标注过程中,未生成txt文件.在yolov5下创建数据集目录dataset,再创建子目录leaf,在leaf下创建子目录train和valid,train叫做训练数据集数据,valid叫做测试数据集目录。train中要训练的图片是为了生成权重文件,为测试数据集提供。使用labelImg!
2024-10-14 19:23:16
948
2
原创 1.算法移植系列第一篇 yolov5环境GPU搭建 ,用GPU跑polov5算法
在环境搭建中踩了许多坑,yolov5环境的搭建需要依赖很多环境,用cpu跑很容易跑单张识别,用GPU跑却踩了很多坑,不过GPU环境搭建起来后续训练数据集我想就会快很对!GPU搭建第一步别着急。
2024-10-13 20:09:53
1953
4
原创 STM32实验之USART串口发送+接受数据(二进制/HEX/文本)
/串口发送数字uint8_t Serial_GetRxFlag(void);同时也要判断在中断中数据接收标志位,在最后也要清除中断数据接受标志位。
2024-05-29 17:47:26
1706
1
原创 STM32之USART(串口)通信学习
USART为同步收发器,UART为异步收发器。要了解的是USART是STM32内部集成的一个硬件外设,可根据数据寄存器的一个字节自动生成数据帧时序,从TX引脚发送出去,同时自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。自带波特率发生器,最高达4.5Mbits/s 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2) 可选校验位(无校验/奇校验/偶校验)支持同步模式、硬件流控制(控制数据帧速度)、DMA(数据搬运)、智能卡、IrDA、LIN。
2024-05-29 15:39:13
1611
原创 STM32定时器总结
定时器已经学完了,我们需要明确的是定时器都有哪些功能?对于这些功能来说,它的最基本的原理都有哪些?从模式:接受其他外设或者自身外设的一些信号,控制自身定时器的运行。,第一个通道选择上升沿捕获输入信号的完整周期为CCR1,第二个下降沿捕获输入信号的高电平周期为CCR2。主模式:将定时器内部信号映射到TRGO引脚,用于触发别的外设。原理:CNT计数器自增,不断与ARR自动重装值进行比较,,通过锁存不同的值,可以用来计算频率和占空比。,编码器正转CNT自增,编码器反转CNT自减。(3).定时器输入比较。
2024-05-23 11:47:44
623
原创 STM32定时器四大功能之定时器编码接口
编码器接口接受编码器的正交信号,根据编码器产生的正交信号脉冲控制CNT的自增和自减,从而指示编码器的旋转方向和旋转速度。每个高级定时器和通用定时器都有一个编码器接口,同时正交编码器产生的正交信号分为正转和反转,通过两个GPIO口产生的正交信号来决定是正转还是反转。
2024-05-23 10:52:10
771
原创 STM32定时器四大功能之输入捕获
输入捕获可以用来测频率,同时也可以从来测占空比,输入捕获时是指引脚发生指定电平跳变时,当前的CNT锁存到CCR中。可配置PWMI模式,同时测量频率和占空比。同时也可以配合主从触发模式,实现硬件的全自动每个高级定时器和通用定时器都拥有4个输入捕获通道(1)输入捕获就是这左边一部分电路 那右边就是我们之前讲过的输出比较部分 四个输入捕获和输出比较通道共用四个CCR寄存器 另外它们的CH1到CH4 4个通道的引脚也是共用的 所以对于同一个定时器输入捕获和输出比较 只能使用其中一个不能同时使用。
2024-04-28 18:02:01
2749
原创 STM32定时器四大功能之输出比较
通过比较CNT和CCR寄存器的值,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能舵机是一种根据输入PWM信号占空比来控制输出角度的装置输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms。
2024-04-28 15:42:52
1912
原创 STM32定时器之四大功能之定时器中断
我们选择RCC内部时钟作为时钟源,内部时钟经过预分频器进行分频,计数器进行自增,不断与自动重装寄存器进行比较,当CNT=ARR时,这时就会产生中断响应或者是事件响应,TIM会立即向NVIC发出中断申请,经NVIC裁决后,即立即中断主程序,使CPU执行TIM对应的中断程序。定时器中断的时钟源我们既可以选择内部时钟源,同时也可以选择外部时钟源。当CNT自加到ARR=10时,触发定时器中断Num++;在这个程序中,我们选择的时钟源位外部时钟。没来一次定时器中断实现Num++。
2024-04-28 14:53:33
2510
2
原创 STM32之定时器学习(了解定时器可以实现哪些功能)
简单理解:定时器定一个时间,每隔这个时间产生一个中断。定时器可以对输入的时钟进行技术,并且在计数值达到设定值时触发中断。包含16位计数器、预分频器(对计数的时钟进行分频)、自动重装寄存器(计多少个数时申请中断)的时基单元。同时定时器不仅具备基本的定时中断功能,而且还包含内外时钟源选择输入捕获、输出比较、编码器接口、主从触发等功能。
2024-04-28 12:46:58
472
1
原创 STM32学习之外部中断(实现对射式红外计次/旋转编码器计次)
AFIO的作用可以进行中断引脚选择,同时也可以进行复用功能引脚重映射。5.配置外部中断步骤(1)配置RCC,将涉及的外部时钟打开(2)配置GPIO,选择端口为输入模式(3)配置AFIO,中断引脚进行选择,选择我们用的GPIO口,连接到后面的EXTI.(4)配置EXTI,选择边沿触发方式打开中断:比如上升沿触发/下降沿触发/双边沿。同时选择触发响应:中断响应还是事件响应。(5)配置NVIC,给我们的中断选择一格合适的优先级(6)通过NVIC,外部中断信号就能进入CPU了.
2024-04-28 11:22:31
1208
空空如也
现在是点击load程序不跑,但是点击debug里面的全速运行程序就可以跑
2025-11-25
串口打印不出来数据,但是debug以后再退出就打印出来了这是为什么
2025-11-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅