- 博客(219)
- 收藏
- 关注
原创 基于MSP430送药小车 ----- 基础篇【2021年全国电赛(F题)】
设计并制作智能送药小车,模拟完成在医院药房与病房间药品的送取作业。院区结构示意如图1所示。院区走廊两侧的墙体由黑实线表示。走廊地面上画有居中的红实线,并放置标识病房号的黑色数字可移动纸张。药房和近端病房号(1、2号)如图1所示位置固定不变,中部病房和远端病房号(3-8号)测试时随机设定。工作过程:参赛者手动将小车摆放在药房处(车头投影在门口区域内,面向病房),手持数字标号纸张由小车识别病房号,将约200g药品一次性装载到送药小车上:小车检测到药品装载完成后自动开始运送;小车根据走廊上的标识信息自动识别、寻
2023-06-01 22:56:27
237
2
原创 【瑞萨RA_FSP】DMAC/DTC编程实战
首先,要使用 DMA 传输,就肯定要有一个源地址和一个目标地址, 这里定义 SRC_Buffer 数组的首地址作为源地址, DST_Buffer 数组的首地址作为DMAC传输的目标地址。SRC_Buffer 数组由于有 const 声明为常量,因此其数据存储在内部 Flash 中, DST_Buffer 为普通的全局变量,其数据存储在 RAM 中。这两个数组的大小由宏定义 BUFFER_SIZE 来决定。
2023-05-30 21:07:52
332
1
原创 【瑞萨RA_FSP】DMAC/DTC——直接存储器访问与数据传输
DMAC(Direct Memory Access Controller)为直接存储器访问控制器或者直接内存访问控制器, 可以在不占用 CPU 的情况下将数据从一个内存位置传输到另一个内存位置。DTC(Data Transfer Controller)为数据传输控制器,用于在被中断请求激活时传输数据。DTC 也可以在不占用 CPU 的情况下将数据传输,它的功能与 DMAC 的功能其实是相似的。
2023-05-24 06:00:00
319
原创 【瑞萨RA_FSP】UART 编程实战
若使用了 R_SCI_UART_Write() 来发送数据, 在数据发送完成之后会导致 uart_send_complete_flag 这个标志位被置位, 因此程序在调用 R_SCI_UART_Write 函数之后需要等待 uart_send_complete_flag 标志位被置位, 然后将该标志位清零。FSP 配置并生成代码之后,首先需要使用 R_SCI_UART_Open 函数打开 SCI4 UART 模块, 我们把这层调用封装为一个 Debug_UART4_Init 函数,如下所示。
2023-05-23 06:00:00
253
原创 【瑞萨RA_FSP】SCL UART 串口通信
串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设。对于通讯协议, 我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
2023-05-22 06:00:00
276
原创 【瑞萨RA_FSP】外部中断
Interrupt Request Control Register(IRQCR) — 中断请求控制寄存器,这个寄存器拥有0-15个通道,有三个标志位: (1) IRQMD[1:0]检测感知选择 (2) FCLKSEL[1:0]数字滤波采样时钟选择 (3) FLTEN数字滤波器使能。
2023-05-21 06:00:00
407
原创 【野火启明_瑞萨RA6M5】按键输入检测
野火启明6M5开发板的按键电路图如下图所示, 图中RA6M5芯片的P004、P005引脚分别通过一个10KΩ的贴片电阻连接到电源的正极,所以按键在没有被按下的时候,GPIO引脚的输入状态为高电平状态, 分别又通过串联一个100Ω的贴片电阻和一个按键接地,所以按键在被按下的时候,GPIO引脚的输入状态为低电平状态。只要我们检测引脚的输入电平,即可判断按键是否被按下。需要注意的是,KEY1_SW2_PIN 和 KEY2_SW3_PIN 宏定义了两个用户按键的引脚,不同的板子按键引脚是不一样的。
2023-05-20 06:00:00
385
原创 【野火启明_瑞萨RA6M5】梦的开始 ---- 点灯(FSP库)
在 FSP 配置界面里面点开 “Pins”-> “Ports”-> “P4”-> “P400”, 然后将连接到LED灯的 IO 引脚的 “Mode” 属性配置为 “Output mode (Initial High)”, 表示该引脚默认输出高电平,其他的属性默认即可。重新规划一下我们的工程结构。工程新建好之后,在工程根目录的 “src” 文件夹下面新建 “led” 文件夹, 再进入 “led” 文件夹里面新建 led 驱动的源文件和头文件:“bsp_led.c” 和 “bsp_led.h”。
2023-05-19 06:00:00
214
原创 【野火启明_瑞萨RA6M5】梦的开始 ---- 点灯(寄存器)
芯片的引脚可以被粗略地分为 IO 引脚和非 IO 引脚。非 IO 引脚就是电源引脚、晶振引脚等的那些引脚,他们不具备 GPIO(通用输入输出)功能。而 IO 引脚是那些具备 GPIO 功能的引脚,他们可以配置为各种模式、实现各种通用功能。IO 引脚最基本的输出功能是输出高、低电平,实现开关控制(比如开关LED灯、继电器或三极管等);最基本的输入功能是检测外部输入电平(比如通过引脚电平的高低区分按键是否被按下)。IO 引脚还可以用来连接外部设备,与外部设备进行通讯,发送控制指令,采集传感器数据等等。
2023-05-18 06:00:00
306
原创 Zigbee物联网应用与开发复习汇总(附某高校期末真题试卷)
1. Zigbee、蓝牙、IEEE802.11b(WiFi)标准都是工作在2.4G频段的无线通信标准;Zigbee主要用在短距离无线控制系统,传输少量的控制信息;2. 短距离无线网络主要分为:无线局域网(WLANs)和无线个域网(WPANs)3. 无线个域网所对应的通信协议:HR-WPANS:802.15.3MR-WPANS:蓝牙LR-WPANS(低速率无线个域网):802.15.44. Zigbee最大传输速率:250kbps。 ZigBee可工作在2.
2023-05-17 22:24:57
214
原创 【瑞萨RA系列FSP库开发】初识寄存器
寄存器实际上与 RAM、FLASH 一样,也是芯片内部的一种存储器(Memory)。 一般而言,RAM 是程序运行的内存,FLASH 则是用来保存程序本身。 寄存器与 RAM、FLASH 等存储器的不同之处在于:寄存器除了保存了芯片的功能状态之外, 还是配置和控制芯片的桥梁,我们可以通过寄存器配置和操作芯片的功能。一般而言,我们在对 MCU 芯片进行编程时有两种编程方式, 一种是寄存器编程,另外一种是固件库编程(或者说库函数编程)。 那么,固件库又是什么东西?固件库说白了其实是通过寄存器编程之后的产物,
2023-05-17 06:00:00
235
原创 【瑞萨RA系列FSP库开发】串口烧录(Renesas Flash Programmer)
RA 产品家族单片机 (MCU) 于 2019 年 10 月推出,丰富了瑞萨的 32 位 MCU 系列产品。除了 RA系列之外的 32 位 MCU 产品还有 RX 系列(CPU 使用瑞萨自家 RX 内核)和 Renesas Synergy™ 平台 MCU。Renesas Advanced (RA) 32 位 MCU 是采用 Arm® Cortex®-M33、-M23 和 -M4 处理器内核,并经过 PSA Certified ® 1 级认证的、行业领先的 32 位 MCU。
2023-05-16 06:00:00
120
原创 【瑞萨RA系列FSP库开发】RASC+Keil的环境搭建
RA 产品家族单片机 (MCU) 于 2019 年 10 月推出,丰富了瑞萨的 32 位 MCU 系列产品。除了 RA系列之外的 32 位 MCU 产品还有 RX 系列(CPU 使用瑞萨自家 RX 内核)和 Renesas Synergy™ 平台 MCU。Renesas Advanced (RA) 32 位 MCU 是采用 Arm® Cortex®-M33、-M23 和 -M4 处理器内核,并经过 PSA Certified ® 1 级认证的、行业领先的 32 位 MCU。
2023-05-15 17:07:47
498
原创 FreeRTOS 内存管理
FreeRTOS 创建任务、队列、信号量等的时候有两种方法,一种是动态的申请所需的 RAM。一种是由用户自行定义所需的 RAM,这种方法也叫静态方法,使用静态方法的函数一般以“Static”结尾,比如任务创建函数 xTaskCreateStatic(),使用此函数创建任务的时候需要由用户定义任务堆栈,本章我们不讨论这种静态方法。使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请RAM。
2023-05-07 06:00:00
404
原创 FreeRTOS 空闲任务
当 FreeRTOS 的调度器启动以后就会自动的创建一个空闲任务,这样就可以确保至少有一任务可以运行。但是这个空闲任务使用最低优先级,如果应用中有其他高优先级任务处于就绪态的话这个空闲任务就不会跟高优先级的任务抢占 CPU 资源。空闲任务还有另外一个重要的职责,如果某个任务要调用函数 vTaskDelete()删除自身,那么这个任务的任务控制块 TCB 和任务堆栈等这些由 FreeRTOS 系统自动分配的内存需要在空闲任务中释放掉,如果删除的是别的任务那么相应的内存就会被直接释放掉,不需要在空闲任务中释放。
2023-05-06 06:00:00
623
原创 FreeRTOS 低功耗 Tickless 模式
在之前介绍获取任务运行时间信息的时候可以看出,一般的简单应用中处理器大量的时间都在处理空闲任务,所以我们就可以考虑当处理器处理空闲任务的时候就进入低功耗模式,当需要处理应用层代码的时候就将处理器从低功耗模式唤醒。相比于前面两种低功耗模式,待机模式的功耗最低。(9)、configPRE_SLEEP_PROCESSING()是个宏,在进入低功耗模式之前可能有一些其他的事情要处理,比如降低系统时钟、关闭外设时钟、关闭板子某些硬件的电源等等,这些操作就可以在这个宏中完成,后面会讲解这个宏如何使用。
2023-05-05 06:00:00
434
原创 Zigbee 无线串口通信模块( DL-22 )
DL-22无线串口模块为串口转2.4G无线模块,可以通过无线将两个或者多个串口连接起来。串口发入模块的数据会被模块使用无线发出,收到无线数据的模块会将这个数据使用串口发出,在两个设备上使用模块就像将这两个设备用串口连接起来一样。1. 主要特点点对点传输带有确认,数据丢失率为0.00%。支持串口不间断发送。支持串口双向同时收发。最高可达3300字节每秒的传输速率。适应2.8V~3.5V。使用单个按键进行设置,可以修改模块的信道、波特率。按键可配置为多对多模式。2. 模块实图。
2023-05-04 06:00:00
603
原创 基于TI板MSP430 玩转PID
该篇以电机控速为例展开分析,假如你手上有一个编码器电机,其余配件若干,请你运用PID算法相关知识设计出一套完整的反馈路线。相信大家最常用的设计路线是用定时器,那么这里我就以定时器来构思反馈路线。1. 编码器电机的变化源于所在ABZ三相的变化(一般编码器电机只有A相和B相,这里也以该俩相为例),所以先对该两项进行设计,可知定时器有输入捕获功能刚好可以用于捕获AB相的变化 【定时器一】。2. 每隔一定时间对电机速度进行一次检测,以及时响应未知变化 【定时器二】。3. 需对电机进行速度控制
2023-05-03 06:00:00
584
原创 FreeRTOS 任务通知
任务通知在 FreeRTOS 中是一个可选的功能,要使用任务通知的话就需要将宏configUSE_TASK_NOTIFICATIONS 定义为 1。FreeRTOS 的每个任务都有一个 32 位的通知值,任务控制块中的成员变量 ulNotifiedValue就是这个通知值。任务通知是一个事件,假如某个任务通知的接收任务因为等待任务通知而阻塞的话,向这个接收任务发送任务通知以后就会解除这个任务的阻塞状态。
2023-05-02 06:00:00
730
原创 FreeRTOS 事件标志组
1. 事件位(事件标志)事件位用来表明某个事件是否发生,事件位通常用作事件标志,比如下面的几个例子:● 当收到一条消息并且把这条消息处理掉以后就可以将某个位(标志)置 1,当队列中没有消息需要处理的时候就可以将这个位(标志)置 0。● 当把队列中的消息通过网络发送输出以后就可以将某个位(标志)置 1,当没有数据需要从网络发送出去的话就将这个位(标志)置 0。● 现在需要向网络中发送一个心跳信息,将某个位(标志)置 1。现在不需要向网络中发送心跳信息,这个位(标志)置 0。2. 事件组。
2023-05-01 06:00:00
620
原创 FreeRTOS 软件定时器
1. 软件定时器概述软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,简而言之,当定时器的定时周期到了以后就会执行回调函数。2. 编写回调函数的注意事项软件定时器的回调函数是在定时器服务任务中执行的,所以一定不能在回调函数中调用任何会阻塞任务的 API 函数!
2023-04-30 06:00:00
725
原创 FreeRTOS 信号量(五) ------ 递归互斥信号量
递归互斥信号量可以看作是一个特殊的互斥信号量,已经获取了互斥信号量的任务就不能再次获取这个互斥信号量,但是递归互斥信号量不同,已经获取了递归互斥信号量的任务可以再次获取这个递归互斥信号量,而且次数不限!一个任务使用函数 xSemaphoreTakeRecursive()成功的获取了多少次递归互斥信号量就得使用函数 xSemaphoreGiveRecursive()释放多少次!比如某个任务成功的获取了 5 次递归信号量,那么这个任务也得同样的释放 5 次递归信号量。
2023-04-29 06:00:00
745
原创 FreeRTOS 信号量(四) ------ 互斥信号量
互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中断与任务之间的同步)二值信号量最适合。互斥信号量适合用于那些需要互斥访问的应用中。在互斥访问中互斥信号量相当于一个钥匙,当任务想要使用资源的时候就必须先获得这个钥匙,当使用完资源以后就必须归还这个钥匙,这样其他的任务就可以拿着这个钥匙去使用资源。互斥信号量使用和二值信号量相同的 API 操作函数,所以互斥信号量也可以设置阻塞时间,不同于二值信号量的是互斥信号量具有优先级继承的特性。
2023-04-28 06:00:00
575
原创 FreeRTOS 信号量(三) ------ 优先级翻转
(1) 任务 H 和任务 M 处于挂起状态,等待某一事件的发生,任务 L 正在运行。(2) 某一时刻任务 L 想要访问共享资源,在此之前它必须先获得对应该资源的信号量。(3) 任务 L 获得信号量并开始使用该共享资源。(4) 由于任务 H 优先级高,它等待的事件发生后便剥夺了任务 L 的 CPU 使用权。(5) 任务 H 开始运行。(6) 任务 H 运行过程中也要使用任务 L 正在使用着的资源,由于该资源的信号量还被任务L 占用着,任务 H 只能进入挂起状态,等待任务 L 释放该信号量。(7) 任务 L 继
2023-04-27 06:00:00
405
原创 FreeRTOS 信号量(二) ------ 计数型信号量
有些资料中也将计数型信号量叫做数值信号量,二值信号量相当于长度为 1 的队列,那么计数型信号量就是长度大于 1 的队列。同二值信号量一样,用户不需要关心队列中存储了什么数据,只需要关心队列是否为空即可。1、事件计数在这个场合中,每次事件发生的时候就在事件处理函数中释放信号量(增加信号量的计数值),其他任务会获取信号量(信号量计数值减一,信号量值就是队列结构体成员变量uxMessagesWaiting)来处理事件。在这种场合中创建的计数型信号量初始计数值为 0。2、资源管理。
2023-04-26 06:00:00
359
原创 基于STM32和oneNET云平台的数据采集系统(MQTT协议)
该篇为基于stm32+esp8266通过mqtt协议连接onenet物联网云平台,单片机部分将采集到的数据(温湿度、光照强度、压强等等)上传至云平台服务器,云平台可下发指令操控单片机,实现远程通信。
2023-04-25 06:00:00
1377
原创 MQTT协议 详解
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
2023-04-24 06:00:00
364
原创 FreeRTOS 信号量(一) ------ 二值信号量
二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常类似,但是还是有一些细微的差别,互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。因此二值信号另更适合用于同步(任务与任务或任务与中断的同步),而互斥信号量适合用于简单的互斥访问,有关互斥信号量的内容后面会专门讲解,本节只讲解二值信号量在同步中的应用。和队列一样,信号量 API 函数允许设置一个阻塞时间,阻塞时间是当任务获取信号量的时候由于信号量无效从而导致任务进入阻塞态的最大时钟节拍数。如果多个任务同时阻塞在同一一个信号量上的话那么优先
2023-04-23 06:00:00
368
原创 FreeRTOS 队列(二)
创建好队列以后就可以向队列发送消息了,FreeRTOS 提供了 8 个向队列发送消息的 API 函数,如下所示:1、函数 xQueueSend()、xQueueSendToBack()和 xQueueSendToFront()这三个函数都是用于向队列中发送消息的,这三个函数本质都是宏,其中函数 xQueueSend()和 xQueueSendToBack()是一样的,都是后向入队,即将新的消息插入到队列的后面。函数xQueueSendToToFront()是前向入队,即将新消息插入到队列的前面。然而!
2023-04-22 06:00:00
296
原创 FreeRTOS 队列(一)
队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的长度,创建队列的时候会指定数据项目的大小和队列的长度。由于队列用来传递消息的,所以也称为消息队列。FreeRTOS 中的信号量的也是依据队列实现的!所以有必要深入的了解FreeRTOS 的队列。
2023-04-21 06:00:00
424
原创 FreeRTOS 时间管理
一、FreeRTOS 延时函数1. 函数 vTaskDelay()2. 函数 prvAddCurrentTaskToDelayedList()3. 函数 vTaskDelayUntil()二、FreeRTOS 系统时钟节拍
2023-04-20 06:00:00
452
原创 FreeRTOS 其他任务 API 函数
1. 函数 uxTaskPriorityGet()2. 函数 vTaskPrioritySet()3. uxTaskGetSystemState()4. 函数 vTaskGetInfo()5. 函数 xTaskGetApplicationTaskTag()6. 函数 xTaskGetCurrentTaskHandle()7. 函数 xTaskGetHandle()8. 函数 xTaskGetIdleTaskHandle()9. 函数 uxTaskGetStackHighWaterMark()
2023-04-19 06:00:00
295
原创 FreeRTOS 系统内核控制函数
1、 taskYIELD() 2、taskENTER_CRITICAL() 3、taskEXIT_CRITICAL() 4、 taskENTER_CRITICAL_FROM_ISR() 5、taskEXIT_CRITICAL_FROM_ISR() 6、 taskDISABLE_INTERRUPTS() 7、taskENABLE_INTERRUPTS() 8、vTaskStartScheduler() 9、vTaskEndScheduler() 10、vTaskSuspendAll() 11、xTaskRe
2023-04-18 06:00:00
405
原创 FreeRTOS 任务切换
RTOS 系统的核心是任务管理,而任务管理的核心是任务切换,任务切换决定了任务的执行顺序,任务切换效率的高低也决定了一款系统的性能,尤其是对于实时操作系统。PendSV 异常 、FreeRTOS 任务切换场合1. 执行系统调用 taskYIELD()2. 系统滴答定时器(SysTick)中断 SysTick_Handler、PendSV 中断服务函数 PendSV_Handler()、查找下一个要运行的任务 vTaskSwitchContext()、FreeRTOS 时间片调度、时间片调度实验
2023-04-17 06:00:00
381
原创 FreeRTOS 任务调度及相关函数详解(二)
一、任务创建函数 xTaskCreate()二、任务初始化函数 prvInitialiseNewTask()三、任务堆栈初始化函数 pxPortInitialiseStack()四、添加任务到就绪列表 prvAddNewTaskToReadyList()五、任务删除 vTaskDelete()六、任务挂起 vTaskSuspend()七、任务恢复 vTaskResume()
2023-04-16 06:00:00
183
原创 FreeRTOS 任务调度及相关函数详解(一)
顾名思义,空闲任务就是空闲的时候运行的任务,也就是系统中其他的任务由于各种原因不能运行的时候空闲任务就在运行。(3)、取 R3 所保存的地址处的值赋给 R0,我们知道任务控制块的第一个字段就是任务堆栈的栈顶指针 pxTopOfStack 所指向的位置,所以读取任务控制块所在的首地址(0X20000EE8)得到。可以看出(1)、(2)和(3)的目的就是获取要切换到的这个任务的任务栈顶指针,因为任务所对应的寄存器值,也就是现场都保存在任务的任务堆栈中,所以需要获取栈顶指针来恢复这些寄存器值!
2023-04-15 06:00:00
282
原创 FreeRTOS 列表和列表项
1. 列表列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。2. 列表项就是存放在列表中的项目,FreeRTOS 提供了两种列表项:列表项和迷你列表项。3. 列表初始化新创建或者定义的列表需要对其做初始化处理,列表的初始化其实就是初始化列表结构体List_t 中的各个成员变量。4. 列表项初始化同列表一样,列表项在使用的时候也需要初始化,列表项初始化由函数 vListInitialiseItem()来完成.
2023-04-14 06:00:00
177
原创 FreeRTOS 任务相关 API 函数(二)
从上图可以看出,一开始任务 1 和任务 2 都正常运行,当挂起任务 1 或者任务 2 以后任务 1 或者任务 2 就会停止运行,直到下一次重新恢复任务 1 或者任务 2 的运行。pdTRUE: 恢复运行的任务的任务优先级等于或者高于正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数以后必须进行一次上下文切换。pdFALSE: 恢复运行的任务的任务优先级低于当前正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数的以后不需要进行上下文切换。
2023-04-13 06:00:00
368
原创 FreeRTOS 任务相关 API 函数(一)
其他任务的创建就放到开始任务的任务函数中,由于开始任务的职责就是创建其他应用任务和信号量、队列等这些内核对象的,所以它只需要执行一次,当这些东西创建完成以后就可以删除掉开始任务了。是使用动态方法创建的,也就是使用函数 xTaskCreate()创建的,那么在此任务被删除以后此任务之前申请的堆栈和控制块内存会在空闲任务中被释放掉,因此当调用函数 vTaskDelete()删除任务以后必须给空闲任务一定的运行时间。创建任务设置优先级的时候就用这个宏,当然了也可以直接在创建任务的时候指定任务优先级。
2023-04-12 06:00:00
329
stm32-OneNet(mqtt).zip
2023-05-08
基于STM32 蓝牙双机通信.zip
2023-05-05
STM32F103红外循迹小车
2023-05-05
stm32-五线四相步进电机.zip
2023-05-05
STM32-读写RFID.zip
2023-05-05
stm32-qt遥控小车.zip
2023-05-05
mpu6050姿态解算(陀螺仪).zip
2023-05-05
GY-39(IIC).zip
2023-05-05
MSP430驱动函数库
2023-03-14
IAR for MSP430 7101
2023-03-11
C语言/C++常见笔试面试题难疑点汇总
2023-02-27
STM32-BH1750+OLED
2023-02-25
ESP8266WiFi模块
2023-02-25
5.0步进电机绝对定位+梯形加减速.zip
2022-11-17
MQ-2烟雾浓度传感器.zip
2022-11-17
12864OLED液晶屏
2022-11-17
对射式红外传感器模块、测速传感器模块、计数器模块、电机测试模块、槽型光耦模块
2022-11-17
基于PID算法下STM32控制的坡道行驶电动小车(2020年电赛)
2022-10-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人