自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Robomaster电机控制和serialplot串口绘图(通用)

DJ M3508电机搭配C620电调,只需按照官方手册设定相应的ID,即可完成通信通过查看闪烁次数,可以判断此时电调ID对于发送报文和接收报文,采用的模式是不一样的(这样才能区分开来)

2025-09-01 20:59:18 366

原创 CAN高速通信(含简单程序实战)

本文是b站中科大电控的学习笔记,也可供大家参考学习。

2025-08-21 20:55:43 732

原创 UART通信的进一步学习

因为在高铁上不便用电脑输入,所以这里暂时用纸质版代替。

2025-08-12 18:37:39 88

原创 数字图像处理4

预处理——ROI——形态学处理。

2025-08-11 11:25:38 766

原创 数字图像处理3

滤波——目的就是滤去噪声,但是边缘会模糊,整体也模糊。

2025-08-10 22:51:42 321

原创 数字图像处理2——图像增强

目的:突出某些信息,削弱不需要的信息可以利用颜色,形状,形态学。

2025-08-10 16:46:54 362

原创 opencv颜色识别项目:识别水果

识别图中的葡萄橙子柠檬。

2025-08-10 15:02:52 305

原创 数字图像处理1(入门第一章)

先在py安装opencv,使用命令在终端(Alt+F12)验证一下安装好了没图像在计算机中每一个像素点都对应红绿蓝值,三维数组0,0,0黑色255,255,255纯白。

2025-08-10 10:53:29 741

原创 Python基础

1.点击右上角开始符号运行,,或者Alt+F122.右击程序,选择在控制台中运行文件。就可以看到变量的具体。

2025-08-09 12:29:28 338

原创 PCB布线

5.高频信号线短,并做好屏蔽隔离,相邻层直接尽量不要平行走线,走线3w原则:两条线间距大于三倍线宽。晶振外围需要打过地孔,用较粗(20mil)的线连接,晶振的连线要差分布线。6.关键原件优先,关键信号线优先,密度优先:最密集的区域开始布线。2. 平时用10mil的导线,电源线要加粗至40mil左右。3.不用直锐角:酸角,阻抗不连续,天线效应,推荐135度。电源供电要先电容去耦,去耦电容贴近电源引脚,就近接地。TAB快捷键设置线宽。

2025-08-07 22:20:35 232

原创 从原理图到PCB的布局

2.为PCB板添加定位孔,选择过孔(可以试试外径4mm,内径3mm的过孔)分布在PCB版的四个角落,可以选择左上角是(2.6,-2.6),其余的部分自己计算。1.添加矩形板框注意大小不要超过100mm*100mm(添加完之后右击板框选择添加圆角,倒角半径为3)ctrl+shift+x布局传递,将原理图中的电路布局快速同步到PCB。shift+x交叉选择,将原理图和PCB的图一一对应,跳转、可以暂时关闭GND网络的飞线。

2025-08-06 22:31:10 164

原创 51单片机最小系统板绘制

相关数据手册进入立创EDA专业版,创建一个工程。

2025-08-05 10:32:47 345

原创 程序6:串口控制pwm亮灭和呼吸灯

这里一定要在app_entry中设置模式,而不是直接在中断里面去进入呼吸灯。还包括了多个字符输入的处理。

2025-08-04 11:14:22 150

原创 程序5:输出PWM波控制灯的亮灭

先初始化,再设置CRR。

2025-08-03 16:06:33 195

原创 芯片手册阅读指导

5.应用信息(典型应用,外围器件选型,性能曲线,一些应用建议) 后看。3.规格(电气参数,ESD等级,特性曲线) 再看。4.详细描述(原理框图,芯片功能详细描述)1.首页芯片特性介绍 先看。6.封装信息(阻焊开窗的大小)

2025-07-30 17:13:03 197

原创 通用定时器Timer的基本模式

特点:多通道,一般有四个16位或者32位的计数器(CNT)多种时钟源(内部APB,外部时钟其他定时器)多种功能模式:基本定时,中断输入捕获,PWM等基本结构APB总线 PSC预分配器 CNT CCR。

2025-07-30 11:45:44 551

原创 用sprintf格式化输出

指向字符数组的指针,用于存储格式化后的字符串。:格式化字符串,包含普通字符和格式说明符。

2025-07-30 10:13:03 145

原创 ubuntu 24.02 配置yolov12(胎教级)

本文介绍了YOLOv12模型的完整安装与训练流程:1)安装显卡驱动和Miniconda;2)配置清华/阿里镜像源创建虚拟环境;3)根据CUDA版本安装匹配的PyTorch和Torchvision;4)下载YOLOv12源码并处理依赖项;5)准备数据集和配置文件;6)在PyCharm中配置解释器后进行模型训练。关键步骤包括:注释requirements.txt前三行、正确设置data.yaml路径、使用多线程训练模板,最终通过predict.py验证模型效果。注意需保持软件版本兼容性,遇到问题可查找对应步骤的

2025-07-29 09:21:58 889

原创 程序4:按钮中断并改变闪烁频率,输出从复位到目前的时间

第一个完全由自己做出来的程序,这种感觉太好了。

2025-07-28 17:23:39 232

原创 中断,定时器,如何找对应电路原理图

中断是看把谁设置成了中断,比如设置了一个外部中断,gpio的外部中断,上升沿触发,那么在这个pin变成上升沿的时候就会触发中断,执行相应的gpio的回调函数,定时器输出的pwm波都是在定时器都是在定时器端口上输出的,所以接的外设就可以接收到定时器端口输出的pwm波。需要在cubemx里配置触发方式:比如此用户唤醒按钮是上升沿触发(按下触发)寻找原理图:lckfb——找到对应板子——教程资料。这样就能知道自己要输出高还是低。

2025-07-28 16:52:09 126

原创 程序3:外部中断实例(利用按钮完成中断)

例如,若系统时钟为 72MHz,PSC 设置为 71,则定时器的时钟频率为 1MHz。当 CNT(计数器)的值达到 ARR 时,计数器会重置为 0,并触发更新事件。ARR 的值直接影响定时器的周期。例如,若 ARR 设置为 999,且定时器时钟为 1MHz,则计数周期为 1ms。当 CNT 的值与 CCR 的值相等时,定时器会触发输出比较事件。例如,若 ARR 设置为 1000,CCR 设置为 500,则 PWM 输出的占空比为 50%。计数器的值会随着时钟脉冲递增或递减,直到达到 ARR 的值后重置。

2025-07-26 16:37:57 282

原创 定时器入门

内涵PSC,CNT,ARR(最大计算cnt),CCR寄存器(阈值)捕获计数(测量频率),捕获计时,输出比较(PWM输出)定时器是竞赛中最重要的外设。

2025-07-25 19:49:50 97

原创 常见外设和中断

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。组成:中断源,中断向量表,ISR(中断服务函数)为什么用中断。

2025-07-25 19:38:08 284

原创 HAL库相关

外设句柄类型被定义在 HAL库的库文件 stm32f4xx_hal_外设名.h中 这是uart的160行中的对句柄的设置。main中先包含了三个头文件,先看main.h,main.h中定义了引脚名字,进行了宏替换,外脚参数初始化()HAL_UART_Receive_IT() //UART中断方式接收数据。_HAL_GPIO_EXTI_CLEAR_FLAG_ 清楚外部中断标志物。如_HAL_UART_ENABLE_IT() 串口使能中断。

2025-07-25 13:12:16 911

原创 keil中无法转到指定函数怎么办

2.可能是因为文件夹中的keil文件太多了,可以将本工程移到其他地方。

2025-07-23 15:27:45 117

原创 程序2:串口输入控制灯闪烁的频率

结构体中的一个成员,它指向 UART 外设的硬件寄存器基地址。这个成员用于标识具体使用的是哪个 UART 外设(如 USART1、USART2 等)。是一个由 STMicroelectronics 定义的结构体,用于封装与 UART 通信相关的所有信息。2.UART_HandleTypeDef *huart这是什么意思。在 STM32 HAL 库的上下文中,1.这个instance是什么。

2025-07-23 15:24:59 139

原创 程序1:第一个点灯程序

所有HAL的函数都在前置芯片文件中定义了,可以通过右击来查看。同时可用vofa来查看输出的Hello world。

2025-07-21 22:32:26 104

原创 如何在keil中新建一个文件夹(分模块编程)

再次新建,并命名app.h,并保存。先新建文件,并新建文件夹。在keil中添加文件夹。

2025-07-19 17:08:33 212

原创 创建STM32cubemx工程(图文+重点指示)

配置串口PA9配置tx,PA10配置rx,进入connectivity usart1 模式选择As。配置时钟,注意HSE输入频率要等于实际板载晶振的频率,否则会通讯失败,注意红框内的数字匹配。在main.c中只建议使用两句话(代码模块份文件)app_entry();配置文件名,选择文件位置,IDE版本。外设GPIO配置,根据实际需要。进入keil文件,修改设置。选择RCC配置,无源晶振。选择SYS配置串行调试。设置编码位utf——8。

2025-07-19 16:38:49 197

原创 微嵌原理简单

时钟来源内部rc振荡电路(精度很差)外部可以用石英晶体提供更准确的时钟信号。开漏电阻能够得到更大的电压(驱动步进电机)(线与电路I2C)32bit体现在:数据总线宽度,寄存器宽度,地址空间,指令。开漏输出电路 无高电平输出能力(需要上拉电阻才能输出高低)时钟用来同步各个内部模块运行的执行速度,保证稳定运行。100个pin,83个i/o口。

2025-07-18 22:47:24 89

原创 如何查询单片机手册获取引脚地址

进意法半导体官网www.st.com,搜索手册编号,如stm32f1xx系列是rm0008.找到英文版手册。然后取引脚,引脚从0开始,PE6,构建掩码1<<6,就可以精准操控第6位。通过地址+偏移量就可以精确定位各个寄存器的地址,对寄存器的值进行直接操作。3.3memory map中的table3中有相应的地址。在第九章(GPIOs and AFIOs)9.2.4有端口输出寄存器的偏移地址。例如,GPIOE 端口的基地址是。

2025-07-13 15:18:50 210

原创 c语言嵌入式中的应用2

那么sizeof(str)=7,strlen(str)=6。比如说int a=0x12345678。那么78会在低地址,而12会在高地址。但32位机器指针都是=4字节(因为32/8=4)strlen不能用在数组上,可能会爆炸。小端:低位在低地址,高位在高地址。c语言中的字符串是const类型。32位机器的int类型是4字节。

2025-07-13 14:35:24 104

原创 c语言的嵌入式应用2

int main()

2025-07-12 23:15:45 105

原创 c语言嵌入式的应用1

嵌入式中常用int8_t表示有符号char,uint8_t表示无符号的char。一般会把一种硬件的驱动代码放在一对.c/.h文件中,比如led.c/led.h。int32_t uint32_t表示整形。如,之保留低四位 & 0x0F(掩码)在<stdint.h>中进行了定义。用处:改变寄存器中指定位数。把bit5置1,用或操作。判断bit3是否为0,嵌入式工程一般包含大量的驱动库文件。

2025-07-12 20:56:38 167

原创 c语法基础

endif #if, #ifdef, #ifndef这些条件命令的结束标志.#ifndef 与#ifdef相反, 判断某个宏是否未被定义。区分定义和声明,声明只是声明了变量,并不一定会有实际意义。applying 防止头文件多次包含。函数返回值不能返回一个局部变量的指针。不要使用动态内存申请malloc。使用宏替换一定要用括号。

2025-07-12 20:52:16 151

原创 19. 删除链表的倒数第 N 个结点

利用双指针,一个是快指针,一个是慢指针。快指针在开始先走n+1步,然后快慢指针同时开始后移,知道快指针走到None的时候,这个时候慢指针恰好走到倒数第n个元素的前面,可以进行删除了。这道题肯定是有最朴素的思路,那就是先遍历一遍,知道有几个元素,再遍历到要删除元素的前面元素进行删除,非常朴素,,但是也能过而且时间效率很高。但是这道题肯定是有更加巧妙的做法的(有的,当然有的)

2025-02-02 17:27:42 223

原创 lc24. 两两交换链表中的节点

交换链表中的两个节点,其实和倒转链表非常像,都用两个指针加一个临时变量。重点是在交换的过程要理清,不能改变步骤,最后的赋值迭代也非常重要,还有就是循环条件的选择,必须推演好在什么时候退出。

2025-02-02 16:56:34 196

原创 lc206 反转链表

反转链表是一个很基础的数据结构的问题。通常是用双指针或者递归来解决问题。首先使用单指针肯定是不够的 ,单指针无法访问前面的元素。双指针使用时也需要借助临时变量temp来完成构建新链表之后指针的移动。还要注意不能再类里面平行定义函数这样子会访问不到,要么在类的外面定义函数,要么在主函数下面再定义函数。递归的解答更加简洁,要注意返回递归函数的返回值最终是否给出。注意在草稿纸上演算循环退出的条件。此题使用递归也可以解答,

2025-02-02 16:34:22 124

原创 lc707设计链表 lc中链表的基本操作

3.不要眼高手低,这些操作都是高中就会的东西,但是真正落实到代码上,确实会出现很多问题,比如对类不熟悉,就会在类这个地方卡住,但通过这道题的学习对py实现链表操作以及类的定义等方面有了初步了解。在增加完一个元素过后,那么他就需要加一,就完成了self.size这个变量的维护,他也就确实有了实际的意义。其实有这种误解完全就是对类的特性不了解,在def init 的时候是在进行初始化,也就是链表最开始的样子,所以虚拟头节点的下面实际上是不可能有任何元素的。2.那既然给他叫head,他不应该是链表的头节点吗?

2025-02-02 11:44:04 288

原创 删除链表中的元素 lc203

理论上的删除操作其实是非常简单的,但是落实到代码上,却会出现很多的问题。首先是不能越界的问题,这里要明确元素存在的判断就是x==None这里的None是py内置字,接着是对头结点的的特殊处理,处理完之后明确pre和cur两个变量,逐一进行操作,注意while循环的推出条件。第二种做法是使用虚拟头节点,好处是可以统一操作,让我们不再需要对头节点进行特殊的操作,代码逻辑更加完善,缺点是牺牲一点空间复杂。在这个编辑的过程中,尤其要注意边界条件的选定与迭代操作该怎么做。

2025-01-26 20:25:53 197

空空如也

空空如也

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

TA关注的人

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