- 博客(107)
- 资源 (9)
- 收藏
- 关注
原创 STM32_HAL库—ADC采集数据
STM32 的ADC精度为 12 位,且每个 ADC 最多有 16 个外部通道。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。ADC 的转换时间跟 ADC 的输入时钟和采样时间有关,公式为:Tconv = ( 采样时间 + 12.5 个周期 ) / 预分频一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是12M,然后设置 “ 采样时间 ” 为 1.5 个周期。
2022-12-09 10:14:08 6887 2
原创 基于Arduino设计的OLED游戏机
自己设计制作的一个Arduino游戏机,有两个简单的小游戏。一个是贪吃蛇的小游戏,另外一个游戏则是躲避陨石的小游戏。可以用来做成mini手掌游戏机,在上班的路上,放学的路上,坐公交的空隙玩一玩。来消磨时光的同时,还能吸引别人的眼球。 (((o(*゚▽゚*)o)))♡ 使用的编程平台是Arduino平台进行的开发。 Arduino IDE可以在Windows、Macintosh OS X、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。Arduino是一款便
2022-12-05 16:21:41 1165 2
原创 CRC_8 计算方法及代码实现
3). 检测相异或后的CRC寄存器的最高位(第7位),若最高位为1,CRC寄存器先左移1位,再与多项式0x07H进行异或;(2). 把第一个 8 位数据与 8 位 CRC 寄存器的相异或,把结果放于 CRC 寄存器;(1). 预置 8 位寄存器为十六进制 0x00(即全为 0) ,称此寄存器为 CRC 寄存器;(4). 重复步骤 3 ,直到右移 8 次,这样整个 8 位数据全部进行了处理;(5). 重复步骤 2 到步骤 4,进行下一个 8 位数据的处理;(1). CRC寄存器。......
2022-08-04 10:39:11 9695 2
原创 STM32软件复位方式
在很多时候我们外部硬件方式不能复位或者不方便操作的情况下,软件复位的方式就变得很实用了。可以写入到串口,当串口发送特定字符就复位;也可以某个按键设置了长按就复位等等快捷的方式进行复位。在复位发生器执行复位命令时,往往会有一个延时。在此延时期间,仍然可以响应中断请求这里就有可能触发中断,所以在复位前最好先关闭全部中断。//软件复位函数void System_Reset(void) { __set_FAULTMASK(1); //关闭所有中断 NVIC_SystemReset(); //进行软件复位
2022-04-13 11:55:12 8955 3
原创 CRC_16---ModBus 计算方法及代码实现
1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1;2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。计算步骤为:(1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器;(2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器;(3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器
2022-03-18 10:29:17 13115 2
原创 STM32_HAL库串口printf函数重定义
总的来说,这段代码实现了将标准输入输出函数 printf 和 scanf 重定向到串口,从而可以通过串口进行数据的输入和输出,这在嵌入式系统中非常常见,用于与外部设备或调试工具进行通信。接下来,通过宏定义选择了串口发送数据的类型,有两种选择,分别是 HAL_USART 和 HAL_USART_DMA。根据不同的宏定义,可以使用不同的方式来发送数据,一种是阻塞式的串口发送,另一种是使用DMA(直接内存访问)来发送数据。类似地,定义了一个 fgetc 函数,该函数用于重定向 scanf 函数,从串口接收数据。
2022-03-04 10:39:34 10566
原创 STM32_HAL库—串口通信
(一)CubeMX设置:1. 晶振配置(72M)2. 基础配置==>Mode(模式选择): Asynchronous: 异步通信 Synchronous: 同步通信 Single Wire (Half-Duplex): 单线/半双工 Multiprocessor Communication: 多处理器 支持局域互连网络LIN、智能卡(SmartCard)协议与lrDA(红外线数据协会) SIR ENDEC规范。...
2022-01-26 14:29:10 8992
原创 教程3_图像的处理
有趣的是,在上述过滤器中,中心元素是新计算的值,该值可以是图像中的像素值或新值。它需要两个输入,一个是我们的原始图像,第二个是决定**操作性质的结构元素**或**内核**。原始图像中的一个像素(无论是1还是0)只有当内核下的所有像素都是1时才被认为是1,否则它就会被侵蚀(变成0)。空间的高斯函数确保仅考虑附近像素的模糊,而强度差的高斯函数确保仅考虑强度与中心像素相似的那些像素的模糊。操作如下,保持这个内核在一个像素上,将所有低于这个内核的25个像素相加,取其平均值,然后用新的平均值替换中心像素。
2024-04-15 16:49:11 19
原创 Slic3r切片软件使用解释
是一款非常专业的3D打印切片软件。使用它你能够轻松的讲3D打印出来,并且进行切片处理。是为数不多的3D打印软件之一。这个软件使用起来十分简单,基本上只要下载完成就能够使用,兼容性十分好,能够与各种打印机兼容。拥有从硬盘加载3D模型进行指令转换、定制打印形状以及实时切片等功能,能够为各种不同的用户满足不同的需求。
2024-04-15 16:37:30 191
原创 自制3D打印机-Marlin 2.1具体参数配置
Marlin 是一种开源的 3D 打印机固件,广泛应用于各种 3D 打印机的控制系统。它最初是为了 RepRap 3D 打印机而开发的,但随着时间的推移,它已经成为了许多不同类型和品牌的 3D 打印机的首选固件。开源与可定制:Marlin 是开源的,这意味着用户可以访问和修改其源代码,以满足特定的打印需求或硬件要求。用户可以根据自己的打印机配置进行定制,调整各种参数和设置。广泛的硬件兼容性:Marlin 支持多种类型的 3D 打印机,包括 FDM(熔融沉积建模)和某些其他类型的打印机。
2024-04-10 11:14:44 929
原创 教程5_模版匹配
模板匹配是一种用于在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV带有一个函数**cv.matchTemplate**()。它只是将模板图像滑动到输入图像上(就像在2D卷积中一样),然后在模板图像下比较模板和输入图像的拼图。OpenCV中实现了几种比较方法。(您可以检查文档以了解更多详细信息)。它返回一个灰度图像,其中每个像素表示该像素的邻域与模板匹配的程度。如果输入图像的大小为(WxH),而模板图像的大小为(wxh),则输出图像的大小将为。
2024-03-26 15:30:17 30
原创 教程4_轮廓特征(更多属性)
OpenCV附带一个函数 cv.matchShapes(),该函数使我们能够比较两个形状或两个轮廓,并返回一个显示相似性的度量。如果它是真的,它会找到有符号的距离。我们画一条连接起点和终点的线,然后在最远处画一个圆。记住,返回的前三个值是cnt的索引。它返回的距离,点在轮廓线外时为负,点在轮廓线内时为正,点在轮廓线上时为零。如果您不想找到距离,请确保第三个参数为False,因为这是一个耗时的过程。在本章中,我们将学习 - 凸性缺陷以及如何找到它们 - 查找点到多边形的最短距离 - 匹配不同的形状。
2024-03-26 14:57:42 342
原创 教程4_图像的轮廓
为了理解这一点,假设您试图在图像中找到一个正方形,但是由于图像中的某些问题,您没有得到一个完美的正方形,而是一个“坏形状”(如下图所示)。它返回一个Box2D结构,其中包含以下细节 -(中心(x,y),(宽度,高度),旋转角度)。例如,检查下面的手的图像。特征矩可以帮助您计算一些特征,例如物体的质心,物体的面积等。可以按照以下步骤进行,第一个示例为简单的检测单个轮廓,第二个示例能检测图片中的多个轮廓。在本文中,我们将学习 - 如何找到轮廓的不同特征,例如面积,周长,质心,边界框等。红色矩形是旋转后的矩形。
2024-03-26 13:39:55 186
原创 教程2_图像的合并及融合
您可以通过OpenCV函数cv.add()或仅通过 numpy 操作添加两个图像。两个图像应具有相同的深度和类型,或者第二个图像可以只是一个标量值。OpenCV加法和Numpy加法之间有区别。OpenCV加法是饱和运算,而Numpy加法是模运算。这也是图像加法,但是对图像赋予不同的权重,以使其具有融合或透明的感觉。根据以下等式添加图像:通过从 αα 从 0→10→1 更改,您可以在一个图像到另一个图像之间执行很酷的过渡。在这里有两个图像,将它们融合在一起。
2024-03-26 11:36:00 40
原创 教程2_视频入门
这段代码实现了一个简单的摄像头视频流捕获和显示程序。它使用OpenCV库来从计算机摄像头捕获视频帧,将每帧图像转换为灰度图像,并在窗口中显示。在退出前,它会释放摄像头资源并销毁所有OpenCV创建的窗口。正常情况下,一个摄像头会被连接(就像我的情况一样)。让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来。如果太小,则视频将非常快,而如果太大,则视频将变得很慢(嗯,这就是显示慢动作的方式)。它与从相机捕获相同,只是用视频文件名更改摄像机索引。
2024-03-25 15:37:38 224
原创 教程1_图像视频入门
它使用OpenCV库来从计算机摄像头捕获视频帧,将每帧图像转换为灰度图像,并在窗口中显示。让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来。如果太小,则视频将非常快,而如果太大,则视频将变得很慢(嗯,这就是显示慢动作的方式)。如果成功读取图像,该函数将返回一个多维 numpy 数组,代表图像的像素值。是 OpenCV 库中的一个函数,用于在窗口中显示图像。这是一个良好的编程实践,可以确保资源得到正确释放,并避免程序结束时留下悬挂的窗口。
2024-03-25 15:20:16 476 2
原创 AD实用设置教程
请注意,这里使用的是报错方式,让GND不能正常的在顶层和底层布线,该功能有一定风险性,具体的操作步骤可能会因软件版本或界面布局的不同而略有差异。如果在实际操作中遇到问题,建议查阅AD9的官方文档或相关教程,以获取更详细和准确的指导。请注意,这些步骤可能因AD9的具体版本和设置有所不同,具体操作时请参照软件的实际界面和提示进行操作。另外,为了确保敷铜的准确性和可靠性,建议在设置间距规则前仔细检查和确认多边形的形状和尺寸,以确保规则的正确应用。
2024-03-21 17:27:14 672
原创 Python使用pynput模块后台监控鼠标及按键
它首先导入了pynput库中的mouse和keyboard模块,这两个模块分别用于处理鼠标和键盘事件。在代码中,定义了几个回调函数,这些函数会在特定的事件发生时被调用。on_mouse_move函数用于处理鼠标移动事件,当鼠标在屏幕上移动时,它会打印出鼠标当前的位置坐标。on_mouse_click函数则处理鼠标点击事件,它会根据鼠标按键的状态(按下或释放)和点击位置打印相应的信息。on_mouse_scroll函数则处理鼠标滚动事件,它会打印出滚动发生的位置以及滚
2024-03-15 15:53:59 619
原创 Python 将字符串作为代码执行
这种技术可以用于动态生成和执行代码,有时可以用于特定的应用场景,如动态生成函数或根据用户输入执行不同的代码逻辑。这个程序展示了如何在Python中使用字符串来表示代码,并通过。函数执行了这段代码,从而实现了将字符串转换为可执行代码的目的。的字符串变量,它存储了一段Python代码。在这个示例中,程序定义了一个名为。中的代码的执行,结果输出了内容。函数执行该字符串中的代码。的函数,其中包含一个名为。函数,触发了对存储在。
2024-02-26 11:53:28 466
原创 Python获取天气数据
整体而言,这段代码展示了如何使用Python的标准库来从网络API获取数据,并将这些数据解析成易于理解和查看的格式。对于每一天,打印日期、白天天气状况、晚上天气状况、最高温度、最低温度、降雨量和湿度。列表,每个元素代表一个地理位置的天气信息。对于每个结果,提取地点名称、国家、时区和最后更新时间,并打印出来。其他参数包括语言选择(简体中文),单位系统(摄氏度)和天数(5天)。)的天气数据,然后对数据进行解析,以此获得天气数据并最终显示出来。的内容,这通常是为了调试目的,以便查看未解析的原始JSON字符串。
2024-02-24 11:05:26 576
原创 (五)ESP32基于MicroPython平台——IO口中断触发
函数将中断处理函数与GPIO引脚2关联起来,并设置触发模式为下降沿触发。在主循环中,我们简单地延时1秒,以便观察LED的状态变化。,当GPIO引脚2的电平从低变高时触发中断。在中断处理函数中,我们切换LED的状态并翻转LED的输出。类初始化GPIO引脚2,并将其配置为输入模式,启用内部上拉电阻。通过这种方式,我们可以使用ESP32的GPIO引脚实现简单的中断IO触发功能。当GPIO引脚2的电平从高变低时,MicroPython会自动调用中断处理函数。在这个示例中,我们首先定义了一个LED引脚,并使用。
2024-02-02 11:25:53 703
原创 (四)ESP32基于MicroPython平台——PWM输出
这段代码是一个基于MicroPython的ESP32 PWM控制示例,它使用PWM信号来控制LED的亮度。然后,在主循环中,通过两个循环分别控制LED的亮度从暗逐渐变亮和从亮逐渐变暗。每次循环中,它使用time.sleep()函数实现延时,以便观察LED亮度的变化。在上述代码中,我们首先导入PWM和Pin模块,并使用Pin(25)初始化PWM对象。在主循环中,我们使用两个循环分别控制LED的亮度从暗逐渐变亮和从亮逐渐变暗,每次循环中都使用time.sleep()函数实现延时,以便观察LED亮度的变化。
2024-02-02 10:21:35 452
原创 Python通过Tkinter设计GUI(更新中)
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。目前有15种Tkinter的部件。控件描述Label标签控件;可以显示文本和位图Button按钮控件;触发特定事件的按钮组件Entry输入控件;单行文本输入框组件多选框控件;允许用户选择多个选项单选按钮控件;允许用户从多个选项中选择一个Combobox下拉框控件;结合了输入框和列表框的功能Listbox列表框控件;允许用户从多个选项中选择Canvas画布控件;
2024-01-18 14:24:01 1021
原创 Python实现自动操作 GUI
pyautogui 是一个纯 Python 的 GUI 自动化工具,通过它可以让程序自动控制鼠标和键盘的一系列操作来达到自动化测试的目的。具体的模块安装方式就自己百度吧。。。。
2024-01-10 14:52:47 468
转载 (三)FreeRTOS任务控制(1)
必须在 FreeRTOSConfig.h 中将 configUSE_TRACE_FACILITY 中定义为 1,才能使用 uxTaskGetSystemState()。uxTaskGetSystemState() 为系统中的每个任务填充结构体。除其他外,TaskStatus_t 结构体包含任务句柄、任务名称、任务优先级、任务状态和任务消耗的运行时间总量等成员。注意:此函数仅用于调试,因为使用此函数会导致调度程序长时间处于挂起状态。由 uxTaskGetSystemState() 填充的结构体的数量。
2023-11-07 10:41:41 93
转载 (二)FreeRTOS任务控制(2)
对 vTaskSuspend 的调用不会累积次数,例如:若在同一任务上调用 vTaskSuspend () 两次,将仍然仅需调用一次 vTaskResume (),即可准备完毕暂停的任务。由多次调用 vTaskSuspend() 中的一次调用挂起的任务可通过单次调用 xTaskResumeFromISR() 重新运行。由一次或多次调用 vTaskSuspend () 而挂起的任务可通过单次调用 vTaskResume () 重新运行。可从 ISR 内调用的恢复挂起任务的函数。XTask 的优先级。
2023-11-06 16:02:47 101
转载 (二)FreeRTOS任务控制(1)
必须将 INCLUDE_vTaskDelay 定义为 1,此函数才可用。按给定的 tick 数延迟任务。任务保持阻塞的实际时间取决于 tick 频率。常量 portTICK_PERIOD_MS 配合 tick 周期分辨率可用于从 tick 频率计算实际时间。vTaskDelay() 会指定任务想要取消阻塞的时间,该时间是相对于 vTaskDelay() 被调用的时间。例如,如果指定 时间块为 100 个 tick,那么在调用 vTaskDelay() 100 个 tick 后任务会取消阻塞。
2023-11-02 10:14:21 129
转载 (一)FreeRTOS任务创建及删除
创建一个新并将其添加到准备运行的任务列表中。必须在 FreeRTOSConfig.h 中被设置为 1,或保留未定义状态(此时,它默认 默认为 1) ,才能使用此 RTOS API 函数。每个任务都需要RAM来保存任务状态,并由任务用作其堆栈。如果使用创建任务,则所需的 RAM 将自动 从中分配。如果创建任务使用了,则 RAM 由应用程序编写者提供,因此可以在编译时进行静态分配。pvTaskCode任务通常;实现任务的函数决不能试图返回 或退出。但是,任务可以。pcName任务名称的最大长度由中的定义。
2023-11-02 09:56:45 202
原创 Python项目——识别指定物品
本项目是基于百度EasyDL平台制作的识别转盘内瓶子,且识别瓶子位置的一个项目。通过在百度进行物体识别的训练,然后配置好后,通过Python调用API函数,识别上传图像中的物品,以及识别物体所在的位置。
2023-11-01 10:49:53 674
原创 (4) OpenCV图像处理SVM算法
考虑下面的图像,它具有两种数据类型,红色和蓝色。我们找到一条线f(x)=ax1+bx2+cf(x)=ax1+bx2+c,它将两条数据都分为两个区域。当我们得到一个新的test_data XX时,只需将其替换为f(x)f(x)即可。如果f(X)>0f(X)>0,则属于蓝色组,否则属于红色组。我们可以将此行称为“决策边界它非常简单且内存高效。可以将这些数据用直线(或高维超平面)一分为二的数据称为**线性可分离**数据。因此,在上图中,你可以看到很多这样的行都是可能的。我们会选哪一个?
2023-10-30 16:59:07 156
原创 (六)ESP32基于MicroPython平台——多线程任务
模块来创建多线程程序。下面是一个简单的ESP32单片机上使用MicroPython的多线程示例程序,其中创建了两个线程执行不同的任务。运行到num等于10后,会关闭线程2的任务。同时,主线程也在后台运行,并每三秒打印一次消息。您可以根据需要修改线程任务和时间间隔。模块是用来创建线程的,但它有一些限制,如不能使用线程锁(锁定线程共享的资源)。此外,资源受限,所以要小心不要创建过多线程。请注意,在MicroPython中,这个示例程序创建了两个线程,,它们分别每秒和每两秒打印一次消息,线程2。
2023-10-24 09:29:13 1149
原创 (3) OpenCV图像处理kNN近邻算法-识别摄像头数字
使用Python的OpenCV库进行图像处理和数字识别的例子。通过下面的步骤对摄像头的黑色数字进行识别(由于我电脑没有摄像头,实际使用需要替换获取图像部分的代码)。这里的代码只能用于识别照片里面最大的单个数字的简单识别算法,需要更多样化的识别就需要自己在这基础上扩展咯!!!(注意:识别的是黑色数字)具体步骤如下:首先,它读取一个名为“digits.png”的图像文件,这个文件应该包含了一些手写数字。然后,它将这个图像从彩色模式转化为灰度模式,这样做可以减少数据的维度,使得处理更加简单。
2023-10-18 10:26:01 195
原创 驱动LCD12864显示器
LCD12864是一种128x64像素分辨率的液晶显示器,通常用于嵌入式系统和电子设备中,以显示字符、图像和其他信息。它的驱动IC型号是ST7567A,这个IC是一款常用于控制12864型LCD的驱动芯片。以下是关于LCD12864和ST7567A驱动IC的详细介绍:LCD12864液晶显示器: LCD12864的名称中包含了一些关键信息:"LCD" 表示它是一种液晶显示器(Liquid Crystal Display),通过控制液晶分子来显示图像。
2023-10-11 11:04:01 948
原创 项目1-基于STM32制作T12烙铁
当使用STM32来制作T12型号的烙铁,并集成LCD12864显示器时,你将进入一个令人兴奋的嵌入式系统开发领域。这个项目将涉及硬件和软件的复杂工作,以实现一个功能强大的烙铁控制器。首先,你需要正确连接STM32微控制器和LCD12864显示器。这包括连接数据线、控制线和电源线,确保硬件连接正确,以便实现数据的传输和显示的功能。接下来,你需要编写适用于STM32的底层驱动程序,以与LCD12864进行通信。这可能需要使用SPI或其他通信协议,具体取决于你的硬件和LCD的规格。
2023-10-11 10:12:45 1050
原创 项目-ESP32获取图像电脑端显示,并跟踪对应颜色
ESP32是一款功能强大的微控制器,可以通过其上的摄像头获取JPEG数据流。当电脑端获取到ESP32发送的图像数据流后,我们可以使用相应的图像处理库或算法对数据进行处理,并对获取的图像数据进行检测,识别里面的红色物体。②电脑服务器端:接收UDP数据流 —> JPEG数据流转换为HSV颜色空间 —> 对HSV图像设置跟踪颜色范围的阈值 —> 单独提取颜色对象 —> 对提取的图像做腐蚀、膨胀等操作进行滤波 —> 在图像中寻找轮廓 —> 通过运算获取轮廓的质心 —> 输出跟踪的红色物体的坐标值。
2023-09-28 15:37:28 122
原创 (2) OpenCV图像处理kNN近邻算法-识别照片集中手写数字0~9
我们的目标是构建一个可以识别手写数字的应用程序。为此,我们需要创建一个手写数字的图片文件 “ digits.png”,图像的像素为:(), 其中包含 32个手写数字(每个数字16个),每个数字都是20x20的图像,如下图。因此,我们的第 1 步是将图像分割成 32 个不同的数字。对于每个数字,我们将其展平为400像素的一行。那就是我们的训练集,即所有像素的强度值。这是我们可以创建的最简单的功能集。我们将每个数字的前8个样本用作训练数据,然后将后8个样本用作测试数据。
2023-09-26 17:06:14 363
CRC16-MudBus示例函数(计数法+查表法)
2024-04-16
位置式PID使用示例代码
2024-04-16
GD32F103VBT6核心板原理图
2024-04-11
GD32F103VBT6核心板代码示例
2024-04-11
3D打印机固件Marlin-2.1.2.2
2024-04-10
ESP32获取图像,并通过电脑端服务器显示图像
2023-10-17
STM32F103RCT6驱动LCD12864屏(驱动IC:ST7567A)
2023-10-11
基于单片机STM32制作T12烙铁
2023-10-09
STM32移植U8g2图形库-驱动OLED显示(模拟IIC)
2023-08-25
U8g2源码文件(驱动OLED显示)
2023-08-25
CharacterMatrix-v3.0.1.2图片取模软件
2023-08-23
ESP32获取图像数据通过TFT-1.44寸屏显示
2023-08-11
TFT-1.44寸屏驱动程序
2023-08-11
Python五彩透明时钟(源码)
2023-06-03
PID加热及PID自整定
2023-05-29
GD32F103RCT6最小系统原理图
2023-04-19
单片机控制WS2812B显示渐变色
2023-03-21
五彩透明时钟-EXE软件
2022-12-03
PCtoLCD2002图片取模软件
2022-12-03
ESP8266_SDK_OLED-0.96屏驱动显示程序
2022-05-12
ESP8266使用NONOS_SDK获取心知天气数据(HTTP)
2022-05-07
Keil.STM32F1xx_DFP.2.4.0固件库
2022-04-14
STM32实现程序跳转例程
2022-04-13
Keil.STM32F1xx_DFP.2.3.0固件库
2022-04-12
51+NRF24L01实现超声测距无线传输
2018-01-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人