- 博客(24)
- 收藏
- 关注
原创 基于matlab的RRT算法路径规划(附带案例源码)
标准RRT算法只有一棵随机树单向搜索,搜索效率较慢,在此基础上引入两棵随机树双向搜索,一定程度上能够提升搜索效率。(还有三棵树的方法),但是一定程度上增加了路径的冗余度、长度。,具有渐进最优性,成功搜寻到路径后算法不会停止,随着不断迭代,理论上能够搜寻到最优路径。(2)在RRT-STAR算法基础上,扩大了重选父节点、重新布线的范围,扩大为范围内父节点、包括父节点再往上的若干代父节点。将RRT-STAR与RRT-CONNECT算法进行结合,具有两者的有点。算法在标准RRT的基础上引入了。
2024-06-19 20:23:02
1617
原创 modbus流量计数据解析(4个字节与float的换算)
通过modbus协议从流量计中读取数据后,需要将获得的字节数据合成float类型。以天信流量计为例:如何将字节数据合并成float类型呢?这里总结了三种方法。以温度值41 A0 00 00为例。
2024-06-18 21:08:34
741
原创 FreeRTOS任务调度(任务上下文切换)详解
在文章中对实时操作系统RTOS进行了移植。移植完成后由于PendSV_Handler、SVC_Handler、SysTick_Handler三个中断的影响使程序进入了硬件错误中断,。
2024-04-18 16:52:38
2023
2
原创 c/c++类型提升问题(int16_t与uint8_t类型加减)
当一个int16_t(有符号16位整数)和一个uint8_t(无符号8位整数)进行运算时,uint8_t会被提升为int16_t。如果将int16_t转换为uint8_t,可能会导致数据丢失,因此在上面计算过程中,将b提升为uint16_t类型,a+b结果为-1。在c中,当一个int16_t和一个uint8_t进行运算时,由于C语言的类型提升规则,int16_t会被提升为uint16_t。a+b结果为-1,那么它会被转换为uint16_t类型,即65535,因此if判断为真,导致程序错误执行。
2023-12-22 17:02:36
840
原创 STM32F1移植FreeRTOS
PendSV_Handler、SVC_Handler、SysTick_Handler是三个重要的中断处理程序。其中,SysTick_Handler是系统定时器中断服务程序,用于定时器中断的处理;FreeRTOS已经实现了这三个函数,而且这三个函数与程序原有的函数重名。因此,需要注释掉原有的函数,并添加宏定义来使用FreeRTOS提供的这三个函数.在源文件demo中找到对应文件,复制到include路径下,编译。将source中的文件全部复制到FreeRTOS中。删除其余文件,只留下上图中的文件。
2023-11-01 15:49:46
238
原创 esp32-idf:低功下耗保持wifi、蓝牙连接
esp32芯片的三种低功耗模式:1、Modem Sleep模式:在此模式下,CPU可以运行,时钟频率可配置。Wi-Fi和Bluetooth LE的基带和射频关闭,但Wi-Fi或Bluetooth LE可以保持连接2、Light Sleep模式:在此模式下,CPU暂停运行。任何唤醒事件(MAC、主机、RTC定时器或外部中断)都会唤醒芯片。Wi-Fi或Bluetooth LE可以保持连接。
2023-10-25 10:35:35
4216
5
原创 stm32使用一个定时器输出多路不同频率、占空比pwm
duty_cycle1=50个计数值,即为50us。相同,当其输出为高电平时,设置高电平持续时间OC_Count + f1。OC_Count为当前计数值,OC_Count +f1。一个通道频率为10khz,另外一个通道为5khz,和预期相同。
2023-10-13 13:54:34
2349
1
原创 嵌入式知识点总结——串口、RS232、RS485
串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
2023-09-06 19:36:48
955
1
原创 步进电机简单使用:STM32 PWM输出固定数目的脉冲数(基于CubeMX)
本文讲解步进电机驱动原理,以及如何通过CubeMX实现快速配置PWM来输出固定数目个脉冲
2023-09-01 12:35:15
7863
5
原创 通过STM32CubeMX快速使用超声波模块
在上图右下角处搜索需要使用的引脚,所搜索的引脚会变黑,如2处所示,点击2处将该引脚设置为GPIO_OUTPUT,再在红色框处设置该引脚为下拉输出,并将名称改为Trig。本文采用硬石电机控制板(STM32F407igt6)作演示,任何32板子都一样,只需要使用两个引脚和一个定时器。选用基础定时器6,基础定时器最高时钟频率为84Mhz,因此将分频系数设置为84-1,计数器周期设置为10-1。超声波测距模块有4个引脚,VCC接3.3~5v电源,Trig是触发信号引脚,Echo是接收信号引脚。
2023-08-31 19:02:13
1328
原创 起重机创意大赛比赛总结(7.17-8.17)
校赛结束(7.14)以后我们才正式制作起重机器人,时间比较短,熬了若干个通宵以1分11秒获得了区域赛(7.31)第一名,区域赛以后换了几个步进电机并加入了加减速算法将时间压缩到了50秒,由于准备时间比较短,整个机械机构不太稳定限定了整个搬运的极限最短时间。
2023-08-31 15:07:52
1196
5
原创 STM32CubeMX配置串口
配置时钟频率,由本人实验使用的mcu型号为STM32F407ZGT系列,所以直接在图示位置输入最高频率168,按回车,软件自动配置其他时钟,若为F1系列,则此处输入72。huart1是串口号,rx是接受缓存区,第三个参数是缓存区大小,将所有外设放入不同的源文件,方便查阅,最后点击生成代码。添加头文件,重定向,以便能够使用printf函数。添加串口接受dma,选用normal模式即可。选择好使用的MCU后,首先选择外部晶振。设置文件名、保存的地址以及编译软件。添加自己的中断回调函数。开启空闲中断和DMA。
2023-07-07 14:23:16
1832
原创 编码器测速原理与实现
原理图如上,一个小周期内AB两相分别各有一个上升沿和下降沿,只需要在AB两相的每个上升沿、下降沿进行采集,这样就实现了四倍频技术,即如果编码器分辨率为p,则现在编码器转动一圈就可以采集到4p个脉冲。定时器中断服务函数中读取采集到的脉冲数,TIM2的计数值为0-65535,采用short int类型对其强制类型转换,若TIM2计数器值为0 ~ 32767,则强制转化后的值仍为0 ~ 32767,电机正转;编码器正反转时,脉冲波形如上图所示,我们可以先定义pulse_num来对脉冲进行计数。
2023-02-25 14:01:51
7520
2
原创 STM32CubeMX配置ADC采样(轮询、中断、DMA)
STM32CubeMX能够极大减小STM32外设配置的工作量,本文介绍如何利用STM32CubeMX配置ADC采样,记录了作者学习过程中遇到的问题及解决办法
2023-01-20 18:54:08
21692
8
原创 手把手教你FreeRTOS源码详解(四)——信号量、互斥量、递归互斥量
信号量又分为二进制信号量和计数型信号量,二进制信号量相当于一个长度为一的队列,其消息数取值只能为0,1;计数型信号量创建时可以设置其队列长度与队列中的初始消息数,即其消息数的取值没有限制
2023-01-01 22:25:26
2351
原创 手把手教你FreeRTOS源码详解(三)——队列
当xNewQueue为pdFALSE时,该队列已经初始化过了,只需要进行复位,队列复位后为空,出队阻塞的任务仍然保存阻塞状态,但入队阻塞的任务不再阻塞,应该从对应的列表中删除。如果采用覆写入队,直接将队列消息数目减1,在任务结尾会重新将队列消息数目加1,这样队列中的消息数目会一直为0,队列不会进行阻塞,在下一次入队时会直接将前面的数据进行覆盖。首先初始化队列存储区的起始地址,若队列长度为0(队列没有存储区),则指向队列的起始地址,若队列长度不为0,指向队列存储区的起始地址。
2022-12-27 21:41:12
3103
1
原创 手把手教你FreeRTOS源码详解(二)——任务管理
vTaskDelay函数的本质是调用prvAddCurrentTaskToDelayedList,将任务添加至对应的延时、阻塞链表,同样,首先将任务从就绪列表中移除,移除后并所移除的就绪列表中是否还有其余就绪的任务,若剩余就绪任务数为0,则清除该列表的就绪标志位。如果阻塞时间不为最大时,首先计算出唤醒任务的时间,xConstTickCount为执行任务prvAddCurrentTaskToDelayedList的时间,xTicksToWait为延时时间,xTimeToWake为唤醒时间。
2022-12-22 16:47:18
3588
3
原创 手把手教你FreeRTOS源码解析(一)——内存管理
FreeRTOS中一共有5种内存分配的方法,分别在文件heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c种。虽然标准C库中的 malloc()和 free()也可以实现动态内存管理,但是它有以下缺陷:1、在小型嵌入式系统种效率不高。2、线程不安全。3、具有不确定性,每次执行的时间不同。4、会导致内存碎片。
2022-12-11 18:19:45
6494
1
原创 Lwip TCP/UDP客户端、服务器详解
一、TCP客户端 tcp客户端实现是比较简单的,大致分为以下几个步骤: (1)申请套接字。 (2)绑定远端服务器的ip地址和端口。 (3)连接远端服务器。 (4)接收和发送数据。现象: 电脑作为TCP服务器,单片机为TCP客户端来连接服务器,通过电脑服务端往单片机发送112233、555533,单片机接收到消息后将消息原路发送给电脑。部分函数解析:(1)int socket(int domain,int type,int protocol)该函数用于申请套
2022-12-06 18:35:31
7218
4
原创 阿里云物联实现不同设备间的通信
最近在做项目的时候,发现阿里云物联同一个产品下的设备只能订阅以其设备名命名的topic,无法实现设备之间的通讯,我捣鼓了许久,终于解决了这个问题。
2022-11-29 20:58:01
2372
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人