自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ApexYuan

Learn & Share

  • 博客(171)
  • 资源 (9)
  • 收藏
  • 关注

原创 线性自抗扰控制LADRC(一)---基础知识

LADRC(Linear Active Disturbance Rejection Control)是ADRC的线性化版本,通过简化非线性模块(如ESO和反馈律)降低计算复杂度,适用于实时控制系统(如电机驱动)。

2025-02-10 10:02:37 549

原创 STM32F4适配WINUSB2.0

USBD_DescriptorsTypeDef结构体定义部分添加如下内容。至此,修改部分就修改完成了,可以下载到单片机上进行验证测试了。修改USBD_GetDescriptor函数。将对应用到的配置描述符修改为如下内容。修改USBD_StdDevReq函数。修改USBD_StdItfReq函数。描述符结构体定义部分修改如下。文件最后添加如下函数实现。文件最后添加如下函数实现。修改开始部分的宏定义。

2025-01-06 15:24:14 507

原创 STM32F4适配WINUSB1.0

修改开始部分的宏定义,根据自己的需求修改即可,注意:VID和PID不要用和默认工程一样的。至此上面的工程就修改完成了编译下载到单片机上便能够正常识别为USB设备。USBD_GetDescriptor函数部分添加如下内容。USBD_StdDevReq函数部分添加如下内容。USB描述符类型定义结构体部分添加如下如下内容。USBD_CDC类定义部分添加如下内容。将配置描述符部分都修改为如下一样的内容。USB类定义部分添加如下内容。描述符部分后面添加如下内容。文件最后部分添加函数实现。文件最后添加函数实现。

2025-01-06 14:47:43 602

原创 STM32 ADC —测试实验

虽然配置了多个通道,但禁止扫描模式,相当于只配置了第一个通道。因而每次采样都是第一个通道的值。单次转换模式,每次转换完配置的这个通道后便会停止,因而不会触发OVR错误。连续采样模式下,如果不及时将数据寄存器中的数据读取出来,便会触发溢出错误上面的测试实验我们的主要目的是为了真正的区分清楚单次转换模式、连续转换模式、扫描模式之间的区别和联系,大多数写法在实际使用中并不推荐。

2024-12-02 20:31:14 1031

原创 STM32 ADC --- 知识点总结

启动ADC后,便会一直转换通道CH0,在每次转换结束后如果没有及时将数据寄存器中的值读出来,会触发溢出(OVR)错误。:这种情况其实和上面单通道采样情况是一样的,虽然配置了多个通道,但实际转换时只会转换第一个通道。在使用多通道采样的情况下一般都会使能扫描模式,下面的讨论中我们也会分析下禁止扫描模式的情况。这种模式是将序列寄存器中配置的所有通道扫描一次,然后再重新扫描,一直重复。这种模式是将序列寄存器中配置的所有通道扫描一次。例如:我们配置了采样通道CH0和CH1。例如:我们只配置了一个采样通道CH0。

2024-11-29 17:49:24 826

原创 STM32 ADC --- 多通道序列采样

这种使用方式需要注意的是每次通过函数启动转换后便会将整个序列的所有通道转换一次。错误用法示例:// ...这种方式其实两次采样的都是序列中第一个通道的值,因而第二次采样无法获取到正确的结果。

2024-11-29 11:37:21 586

原创 STM32 ADC --- DMA乒乓缓存

cubeMX默认生成的工程中是打开DMA中断的,这章我们需要用到该中断,固不要将该中断关闭(对于上节的配置使用将DMA中断关闭也是可以正常工作的)。参考文章:https://shequ.stmicroelectronics.cn/thread-625398-1-1.html。DMA在传输完成时会调用。

2024-11-15 20:32:27 720

原创 STM32 ADC --- DMA采样

如果先配置过不使用DMA的ADC工程,再重新配置使用DMA时,生成代码中ADC初始化在DMA初始化之前,这样可能导致ADC+DMA无法正常工作,因而无法正确获取到数据。函数启动,便可以以一直进行转换,只需要从指定的数组中读取数据即可。cubeMX配置工具中可以根据上图所示调整每个初始化函数的顺序。基于上面ADC配置为连续转换模式和DMA配置为循环模式。这样ADC+DMA才能正常工作。则需要在每次需要转换的时候通过。,否则可能无法正确获取到数据。正确的初始化顺序应该是。上面红框中选择配置为。

2024-11-15 17:24:44 902

原创 STM32 ADC --- 任意单通道采样

需求:有多个通道需要进行ADC采样,实现每次采样只采样一个通道,且可以随时采样不同通道的功能。这里我们想通过10通道和11通道分别进行ADC采样。需要注意的是:**当ADC规则转换中配置的转换数大于1时,cubeMX会自动将扫描转换模式使能。**但这里我们实际需要扫描转换模式为关闭,这里可以等下在代码中修改。还有个需要注意的地方是结束转换的选择:单个通道完成转换时即触发EOC标志位为了方便后续继续使用cubeMX生成代码不影响改动,我们采用重新初始化ADC的方式来实现需求:通过函数将ADC1重新初始化后

2024-11-15 11:51:04 1006

原创 C++练手项目---迷宫

【代码】C++练手项目---迷宫。

2024-10-23 20:21:28 418 1

原创 Makefile简明使用教程(二)

通过利用Makefile函数,OBJECTS变量中的名称就可以简化了,且是根据SOURCES自动生成的,这样有新增文件时只需要修改SOURCES处即可。说明:从文件名序列中取出非目录的部分。即取出相对路径的文件名,最后一个斜杠后面的内容(不包括斜杠)。说明:从文件名序列中取出目录的部分,即取出文件所在的路径,最后一个斜杠前面的内容(包括斜杠):将SRC变量中所有以.c结尾的文件名替换成对应的以.o结尾的文件名,然后赋回给SRC。基于上一章v4的基础上继续优化。说明:指定文件的搜索路径。

2024-10-15 17:48:57 214

原创 QCustomPlot笔记(一)

QT中用于绘制曲线的第三方工具第一个压缩包中提供了源文件+文档+例子,使用时可以将帮助文档添加到QT的帮助文档中,这样在使用时直接按F1就可以获取上下文提示第二个压缩包提供了将qcustomplot源码编译为共享库的方法,和一个如何使用的案例第三个压缩包中仅包含源码文件。

2024-09-17 10:35:56 755

原创 STM32获取系统运行时间

获取系统运行时间

2024-09-16 19:05:48 1519

原创 vscode搭建ros开发环境问题记录(更新...)

然后重新加载工作空间便可以获得自动提示了。这里将头文件已经正确包含到。中代码中仍然不能自动补全,将C_CPP插件设置中的。

2024-09-15 16:45:00 544

原创 C++笔记---引用

有的说法是引用是变量的别名,和引用变量共占一块内存。这种说法仅是基于表面上的应用对引用的理解,因为编译器隐藏了引用的细节。通过引用的本质我们可以知道引用本质还是通过指针实现的,因此引用和指针占据同样大小的空间。引用传递也是通过指针实现的,因此也相当于将变量的地址传递给形参。单纯从理论上将,如果函数完全一致且不存在编译器优化的情况下两者的效率应该是一致的。首先指针传递是将变量的地址赋值给函数的形参,后续的操作都是基于地址进行操作。编译器不会专门开辟内存空间存储引用,而是将引用的地方替换为真正的地址。

2024-09-12 10:16:17 351

原创 C++笔记---指针常量和常量指针

指针常量:指针本身是一个常量,即指针一旦初始化后变不能改变,但指针指向的内容是可以改变的(常量指针:一个指向常量的指针,即指针指向的内容不可以修改,但指针本身是可以修改的。指针数组:一个数组,数组中存放的元素是指针(一个存放指针的数组)指针函数:一个函数,函数的类型(返回值)是指针。指针常量:指针是一个常量,本质是一个常量。常量指针:指向常量的指针,本质是一个指针。汉语描述一般前面是修饰后面是中心。函数指针:一个指针,指向函数的指针。数组指针:一个指针,指向数组的指针。读作指针,按顺序读即可。

2024-09-11 19:55:39 375

原创 Qt问题笔记

相当于字符串的结束符,字符串在遇到‘\0’时会被截断。问题描述:QByteArray数据在定义时会被。

2024-09-11 15:10:01 415

原创 Linux TCP服务器和客户端学习

socket这里实现的是单连接的情况,即一个服务器只能连接一个客户端。实现的功能是服务器端:等待客户端连接,连接后显示客户端发送的数据,并将数据原样发送给客户端。客户端:连接服务器,然后向服务器发送数据,并回显服务器返回的数据。

2024-09-09 18:16:34 480

原创 Makefile简明使用教程

这里我的理解是每一个.c文件都会生成一行对应的处理,正如上面完整的makefile文件中注释掉的那一部分,对于每一行来说第一个依赖文件和所有的依赖文件来说是一样的都是对应的那个.c文件。make有一种机制,会根据目标文件的修改和依赖文件的修改时间来判定要不要重新构建,按照上面的写法,某一个源文件稍作改动,所有文件都会重新编译。比较直观的写法,hello 为要构建的目标,main.c和message.c文件为依赖文件,下一行为生成目标要执行的命令。文件,可以通过-f参数来指定要使用的makefile文件。

2024-09-09 14:53:42 843

原创 NanoPC-T6安装redriod笔记

这里主要用于自己对安装过程的记录,中间可能记录比较粗糙。

2024-09-03 20:08:11 800 1

原创 redroid rk3588折腾笔记

第一步先要重新编译一个相应的内核环境,然后再通过docker运行相应镜像。手头有一个nanoPC-t6的3588板卡,想试下搭建云手机。

2024-09-01 10:59:51 1059 1

原创 redroid搭建云手机学习笔记(一)

Linux系统通过容器方式实现云手机

2024-08-30 10:15:27 3653 2

原创 STM32程序启动异常分析(更新...)

STM32程序启动异常分析

2024-08-26 15:33:50 386

原创 python实现CRC32计算

【代码】python实现CRC32计算。

2024-07-03 10:07:39 1708

原创 RoboDK试用期间提示无效或过期的许可证

该目录下的文件全部删除掉,便可以正常使用RoboDK应用了,但是等软件关闭后还是会出现上面的问题,还需要执行同样的操作。RoboDK下载下来在试用期间提示如下信息,不知道什么原因。

2024-06-18 19:15:37 1579

原创 通过微软提供的工具制作win10启动盘

【代码】通过微软提供的工具制作win10启动盘。

2024-06-11 13:34:22 1788

原创 机械臂学习资料收集

机器人学之运动学笔记【3】—— 机械臂DH表示法+正向运动学(Forward Kinematics)标准DH建模与改进DH建模

2024-06-07 12:29:19 188

原创 STM32 MAP文件结合固件文件分析

MAP 文件分析可以参考之前的文章程序代码在未运行时在存储器空间内称为加载域,在运行时在存储器空间内称为运行域。在这里我们根据加载域的描述可以知道加载域的空间结束位置应该为0x08020000+0x00010978=0x08030978的位置。从下面的固件我们可以知道固件的实际结束位置应该是0x080305E8。这里的俩个位置并不一致是什么原因呢?我们继续往下逐步分析。上图内容的最后一行:结束地址为0x080304e0+0x20=0x08030500,和第一行中的描述一致。根据类型和属性可以知道这一部分

2024-05-24 20:14:31 1244

原创 Keil MDK map文件学习笔记

从flash的0x08030500位置开始加载数据,加载大小为0x000069b0大小的数据到RAM空间(上图最后一行0x200049b0+0x2000=0x200069b0)。这里要注意的是并非直接从0x08030500直接向后复制0x000069b0大小的数据到RAM中,实际是根据FLASH空间中的0x08030500后面的部分数据和之前的分散加载表等内容在RAM中生成的0x69b0空间。上面两个红框中的内容分别对应于全局函数和全局变量,并显示了所在执行域空间的位置和大小。

2024-05-24 15:52:17 1178

原创 基于STM32看Cotex-M内核中断向量表重定向

正常的执行过程为,启动时先执行Boot程序中的Reset_Handler函数然后经过分散加载,初始化堆栈,初始化C库后跳转到用户main函数执行,其中监测到不许要升级则通过跳转函数(设置主栈指针,将App中Reset_Handler函数的地址作为执行地址)跳转到App程序中的Reset_Handler函数,然后再经过分散加载,初始化堆栈,初始化C库等操作后跳转到用户main函数中执行,在main函数开始位置首先要修改VTOR的值,则后续的中断触发都会跳转到App代码中对应的中断服务函数中。

2024-05-24 13:25:54 1691

原创 基于STM32看Cortex-M内核相关的一些底层知识

向量表位于存储器的开头部分,它的头两个字为主栈指针(MSP)的初始值,以及代表复位处理起始地址的复位向量(参考本书图4.26和4.5.3节)。细心的你可以能已经发现了,这里固件中存储的向量表的地址和map文件中对应的函数地址不完全一致,差了1,这是因为向量表的LSB位必须置1以表示Thumb状态(Cortex-M处理器不支持ARM状态)从上面的map文件中我们可以看出程序的栈顶地址就是0x200069b0,从下面的固件中我们可以看出起始地址存放的就是栈顶指针的值。复位函数是系统上电后第一个执行的程序。

2024-05-23 17:39:45 684 3

原创 无刷电机中对霍尔同步电角度的理解

在自己的驱动程序中也使用了ST的方法来测量同步电角度,然后根据当前霍尔的状态再确定启动时的电角度。在霍尔无刷电机驱动时需要进行初始电角度定位,根据ST电机库提供的方法首先我们要测量同步电角度。

2024-05-13 17:18:51 811

原创 记一次使用STM32F042K6芯片内部HSI48M时钟导致CAN总线报错问题

深入去解决某个问题时,也会加深你对其它部分的了解和思考,比如这里让我又重新了解和CAN的采样点和CAN报错机制。

2024-04-12 20:33:36 620

原创 STM32笔记---CAN采样点设置和报错

这里我们可以在HAL库的CAN中断处理的部分找到依据,ERRIE中断使能后出错时会将主状态寄存器(MSR)中的ERRI位置位,然后再依次判断有哪些分开关管理的错误中断触发了。之前使用CAN总线一直没详细搞清楚,使能的错误中断都具体对应的是什么,使用的时候一下把所有的CAN错误中断都使能上,正好今天遇到的CAN总线的一些问题,详细看了下。再同步补偿宽度(SJW)的设置范围位1-4TQ,相当于CAN总线的采样点可以根据实际情况在1-4个TQ范围内进行调整,这个值大可以增大CAN波特率的容错范围。

2024-04-12 19:37:23 3291

原创 C语言知识点---char *a和char a[]

在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。= 17 ,a为数组名,sizeof可以直接计算数组所占空间的大小。= 4,p为指针变量,sizeof计算的是这个变量所占空间的大小。a为数组名,数组首元素的指针常量,因此a不能被赋值。: a为char类型数组名,表示数组的首地址,可以将数组名赋值给指针变量p。这两种形式都可以定义字符串。类型指针,表示用于存放。

2024-04-08 15:59:59 519

原创 vscode开发ESP32问题记录

首先可以通过vscode 中的IDF插件生成模板工程,这样会自动创建。文件夹中的一些json配置文件,保存后对应的波浪线警告便消失了。

2024-04-04 12:09:29 565

原创 ESP32学习---ESP-NOW(一)

ESP-NOW 是乐鑫定义的一种无线通信协议,能够在无路由器的情况下直接、快速、低功耗地控制智能设备。它能够与 Wi-Fi 和 Bluetooth LE 共存,支持乐鑫 ESP8266、ESP32、ESP32-S 和 ESP32-C 等多系列 SoC。ESP-NOW 广泛应用于智能家电、远程控制和传感器等领域。

2024-04-03 20:09:03 1004

原创 基于vscode Arduino插件开发Arduino项目

因此可以知道:vscode中的Arduino插件已经不支持添加Arduino IDE路径的方式了,转而使用了Arduino CLI(用于开发arduino的命令行工具)的方式。这样在vscode中开发Arduino可以不依赖于Arduino IDE,即不安装Arduino IDE也可以。意思是说:早期Arduino IDE的支持方式将在插件的下个发布版本中移除,请尽快使用Arduion CLI.指定输出路径,可以提高编译速度,也可以直接从输出路径中获取编译的二进制文件。便可以正常输出详细信息了。

2024-04-03 10:53:46 2477 1

原创 ESP32学习---ESP-NOW

这里使用3个模块之间互相传输数据,首先我们先要获取到3个模块的MAC地址,每个模块向外发送数据并同时接收来自于其它两个模块的数据。打开串口监视器复位模块显示信息中会包含如下信息即为mac地址。

2024-03-31 00:23:48 3531

原创 python知识点记录

版本是支持python2.7的最后版本,如果使用的是python2.7环境的话,需要安装正确的版本才能正常使用。是python的一个轻量级的定时任务调度库,可以实现每分钟,每天,每周的定时任务等,类似于Linux系统下的。官网地址:https://pypi.org/project/schedule/基于python的进程管理工具。

2024-03-29 23:41:45 299

STM32F4适配WINUSB2.0

STM32F4适配WINUSB2.0

2025-01-06

STM32F4适配WINUSB1.0

STM32F4适配WINUSB1.0

2025-01-06

CRC32两种计算法对比测试

crc32计算法测试

2024-07-02

MAP文件分析Rdrive.map

分析使用的map文件

2024-05-24

vscode_stm32f411.rar

vscode开发STM32的工程,具有编译、下载、调试功能。搭建过程也可参考:https://blog.csdn.net/xiaoyuanwuhui/article/details/116301416

2021-04-30

STM32F4_ROS.rar

STM32F407移植rosserial 通过USB虚拟串口和ROS系统进行通信,内部包含简单的发布测试例程。

2019-07-31

Stm32f103_超声波模块测试_利用外部中断.rar

stm32驱动HC-SR04超声波模块测距的中断例程,PA4->Trig,PA5->Echo 串口1打印测量距离。

2019-07-29

STM32编码器模式测试例程

STM32编码器模式的测试例程,代码中采用TIM2定时器的编码器模式,在主程序中利用延时函数监测单位时间内的脉冲数,并根据脉冲数计算速度。程序中不包含电机输出控制和PID调速。

2018-11-19

stm32驱动舵机

STM32驱动舵机转动的测试程序,程序中使用定时器1的pwm输出比较模式。

2018-11-14

WS2812驱动程序(SPI+DMA)

STM32通过硬件SPI+DMA方式驱动WS2812灯珠的驱动程序,其中移植了Adafruit_NeoPixel库函数可以实现多种显示效果。main函数中保留了各种样式的测试函数,只需在头文件中配置灯珠个数,将控制引脚接到PA7即可。目前测试过程中未发现明显bug,若有问题欢迎指出!

2018-10-28

MAX6675中文数据手册

MX6675芯片的中文数据手册,其中的重点部分作了高亮标记。

2018-08-16

STM32驱动max6675测温的测试例程

STM32F103 驱动max6675模块测量k型热电偶温度的测试例程。用到的资源有串口1和SPI1

2018-08-16

基于STM32单片机的指纹识别模块的测试代码

基于深圳十指科技公司出品的TFS-M64指纹识别模块的STM32测试代码,为了测试方便直接从原子例程中修改的。通过串口2与指纹模块通信,程序中封装了指纹模块的操作函数库。main.c文件中包含了许多之前测试的代码。

2018-08-15

空空如也

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

TA关注的人

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