- 博客(45)
- 收藏
- 关注
原创 Robomaster电机控制和serialplot串口绘图(通用)
DJ M3508电机搭配C620电调,只需按照官方手册设定相应的ID,即可完成通信通过查看闪烁次数,可以判断此时电调ID对于发送报文和接收报文,采用的模式是不一样的(这样才能区分开来)
2025-09-01 20:59:18
366
原创 数字图像处理1(入门第一章)
先在py安装opencv,使用命令在终端(Alt+F12)验证一下安装好了没图像在计算机中每一个像素点都对应红绿蓝值,三维数组0,0,0黑色255,255,255纯白。
2025-08-10 10:53:29
741
原创 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
原创 芯片手册阅读指导
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
原创 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
原创 中断,定时器,如何找对应电路原理图
中断是看把谁设置成了中断,比如设置了一个外部中断,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
原创 程序2:串口输入控制灯闪烁的频率
结构体中的一个成员,它指向 UART 外设的硬件寄存器基地址。这个成员用于标识具体使用的是哪个 UART 外设(如 USART1、USART2 等)。是一个由 STMicroelectronics 定义的结构体,用于封装与 UART 通信相关的所有信息。2.UART_HandleTypeDef *huart这是什么意思。在 STM32 HAL 库的上下文中,1.这个instance是什么。
2025-07-23 15:24:59
139
原创 创建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语言嵌入式的应用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关注的人