- 博客(42)
- 收藏
- 关注
原创 RT-Thread内核配置
RT-Thread内核配置1、配置示例RT-Thread 的一个重要特性是高度可裁剪性,支持对内核进行精细调整,对组件进行灵活拆卸。配置主要是通过修改工程目录下的 rtconfig.h 文件来进行,用户可以通过打开 / 关闭该文件中的宏定义来对代码进行条件编译,最终达到系统配置和裁剪的目的。RT-Thread 内核部分/* 表示内核对象的名称的最大长度,若代码中对象名称的最大长度大于宏定义的长度, * 多余的部分将被截掉。*/#define RT_NAME_MAX 8/* 字节对齐时设
2021-05-18 19:12:57
1325
原创 RT-Thread内核基础
RT-Thread内核基础1、RT-Thread 内核介绍下图为 RT-Thread 内核架构图,内核处于硬件层之上,内核部分包括内核库、实时内核实现。实时内核的实现包括:对象管理、线程管理及调度器、线程间通信管理、时钟管理及内存管理等等,内核最小的资源占用情况是3KB ROM,1.2KB RAM。1.线程调度 线程是 RT-Thread 操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外
2021-05-15 11:26:28
1145
原创 stm32零碎漫谈----启动流程
启动文件1、几种启动方式STM32芯片自带的启动方式有3种,通过设置BOOT1、BOOT0的引脚的高低电平即可选择。通过boot引脚设置可以将中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处。主闪存启动是将程序下载到内置的Flash进行启动(该flash可运行程序),该程序可以掉电保存,下次开机可自动启动。通过boot引脚设置可以将中断向量表定位于内置Bootloader区。系统存储器启动是将程序写入到一块特定的区域,一般由厂家直接写入,不能
2021-05-13 08:51:48
499
原创 STM32F1----SPI
SPI1、硬件SPI初始化流程(1)初始化通讯使用的目标引脚及端口时钟;(2)使能 SPI外设的时钟;(3)配置 SPI外设的模式、地址、速率等参数并使能 SPI外设;(4)编写基本 SPI按字节收发的函数;2、硬件SPI结构体SPI 初始化结构体详解跟其它外设一样,STM32 标准库提供了 SPI 初始化结构体及初始化函数来配置 SPI 外设。1 typedef struct2 {3 uint16_t SPI_Direction; /*设置 SPI 的单双向模式 */4 uint
2021-05-12 23:37:39
1421
原创 openmv4系列7----寻找色块
openmv4系列7----寻找色块1、find_blobs函数image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)参数解释:thresholds是颜色的阈值,注意:这个参数是一个列表,可以包含多个颜色。如
2021-05-08 17:24:08
11915
原创 openmv4系列6----外设功能
openmv4系列6----外设功能一、LEDfrom pyb import LED #从pyb模块引入LED类red = LED(1) # 红ledgreen = LED(2) # 绿ledblue = LED(3) # 蓝ledred.toggle() #翻转green.on() #亮blue.off() #灭red = LED(1)语句创建了LED(1)的对象,red.toggle()调用了对象的方法。LED(1) -> 红LED LED(2
2021-05-07 16:59:10
1473
1
原创 STM32F1----WWDG
1、WWDG初始化流程<1>使能窗口看门狗的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);<2>设置窗口看门狗时钟分频系数WWDG_SetPrescaler(WWDG_Prescaler_8);<3>设置窗口的上限值WWDG_SetWindowValue(80);<4>设置计数值的初值WWDG_Enable(127);<5>配置WWDG的NVIC//略&l
2021-05-03 20:41:11
413
1
原创 STM32F1----IWDG
1、独立看门狗初始化流程<1>使能看门口寄存器IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);<2>设置看门狗的时钟分频,(例:分频32kHz/200=125Hz,就是一秒完成125次计数)IWDG_SetPrescaler(IWDG_Prescaler_256);<3>设置看门狗计数值125 一秒内没有刷新计数值,就会复位一次IWDG_SetReload(125);<4>刷新独立看门狗的计数值,
2021-05-03 20:10:38
365
原创 STM32F1----TIM_ADVANCED
1、高级定时器带死区初始化流程<1>定时器IO口配置。<2>配置时基结构体:TIM_TimeBaseInitTypeDef<4>配置输出比较结构体:TIM_OCInitTypeDef<5>配置断路和死区结构体:TIM_BDTRInitTypeDef<6>启动定时器,输出使能。2、高级定时器结构体定时器基本初始化结构体 >> TIM_TimeBaseInitTypeDeftypedef struct{ uint
2021-05-03 19:14:01
442
原创 openmv4系列4----图像处理
openmv4系列4----图像处理sensor模块,用于设置感光元件的参数。一、感光元件的使用import sensor#引入感光元件的模块# 设置摄像头sensor.reset()#初始化感光元件sensor.set_pixformat(sensor.RGB565)#设置为彩色sensor.set_framesize(sensor.QVGA)#设置图像的大小sensor.skip_frames()#跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。# 一直拍照while
2021-04-27 20:57:32
1646
1
原创 openmv4系列3----图像知识
openmv4----图像处理1.摄像头 那么什么是摄像头,说到底,就是一个将光学信号转变成电信号的一个装置。图像透过镜头,照在一个感光芯片上,感光芯片可以把光照的波长和强度等信息转成计算机(数字电路)可以识别的数字信号。在计算机视觉中,最简单的相机模型是小孔成像模型:小孔模型是一种理想相机模型,没有考虑实际相机中存在的场曲、畸变等问题。但是在实际使用时,这些问题可以通过在标定的过程中引入畸变参数解决,所以小孔模型仍然是目前最广泛使用的相机模型。2.像素和分辨率 感光元件是有很多个感光点构成的,
2021-04-27 13:59:22
1877
原创 限幅消抖滤波
限幅消抖滤波法应用场景适用于采样速率比较慢的系统。原理分析限幅消抖滤波法相当于“限幅滤波法”+“消抖滤波法” 相结合。先限幅,后消抖 。参考代码#define A 200#define N 20typedef int filter_type;//返回两个整数差filter_type num_sub( filter_type a, filter_type b ){ return ( a >= b ? ( a - b ) : ( b - a ) );}
2021-04-27 12:45:49
1646
原创 消抖滤波
消抖滤波算法应用场景对于变化缓慢的被测参数有较好的滤波效果, 可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动。原理分析设置一个滤波计数器,将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零;如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出);如果计数器溢出,则将本次值替换当前有效值,并清计数器。参考代码#define N 6typedef int filter_type;filter_type fil
2021-04-27 12:10:15
1402
原创 加权递推平均滤波
加权递推平均滤算波应用场景适用于有较大纯滞后时间常数的对象和采样周期较短的系统原理分析加权递推平均滤波法是对递推平均滤波法的改进,即不同时刻的数据加以不同的权。通常是,越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。参考代码define N 12typedef unsigned int filter_type;filter_type coe[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1
2021-04-26 21:10:59
3276
1
原创 openmv4系列2----镜头讨论
openmv系列2----硬件基础1.镜头的选择 openmv常见的使用的镜头有OV7725、OV2640、OV5640、OV9640、MT9V034这几种。 OV7725:是一款30W像素的摄像头模块,支持最大VGA分辨率输出,帧率最大可达60fps。能配置输出RAW RGB、RGB(GRB422、RGB565/RGB444)、YVA422这几种格式的视频流。通俗点讲:OV7725像素是30W,虽然像素低,但是帧率高,应用在颜色追踪等应用上效果不错。 OV9650:是一款130W像素的摄像头
2021-04-23 21:56:32
18035
1
原创 openmv4系列1----基本认知
openmv4系列1----基本认知1.openmv的由来 OpenMV是一个开源,低成本,功能强大的机器视觉模块。以STM32F427CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器视觉算法,提供Python编程接口。2.openmv4的硬件主控STM32H743VI ARM Cortex M7 处理器,400 MHz ,1MB RAM,2 MB flash. 所有的 I/O 引脚输出 3.3V 并且 5V 耐受。这个处理器有以下的IO接口。有大
2021-04-23 18:56:49
9428
2
原创 一阶滞后滤波
一阶滞后滤波法应用场景一阶滤波无法完美地兼顾灵敏度和平稳度。有时,我们只能寻找一个平衡,在可接受的灵敏度范围内取得尽可能好的平稳度。而在一些场合,我们希望拥有这样一种接近理想状态的滤波算法。即:当数据快速变化时,滤波结果能及时跟进(灵敏度优先)。当数据趋于稳定,在一个固定的点上下振荡时,滤波结果能趋于平稳(平稳度优先)。原理分析一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。一阶低通滤波的算法公式为:Y(n)=αX(n) (
2021-04-22 20:19:13
3404
1
原创 限幅平均滤波
限幅平均滤波算法应用场景对于偶然出现的脉冲性干扰,可消除有其引起的采样值偏差。原理分析限幅平均滤波法相当于“限幅滤波法”+“递推平均滤波法”,每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理。参考代码#define LIMIT 200#define SIZE 20 //返回两个数差typedef unsigned int filter_type;filter_type num_sub( filter_type a, filter_type b )
2021-04-22 19:46:15
2618
原创 中位值平均滤波
中位值平均滤波算法应用场景中位值平均滤波法(又称防脉冲干扰平均滤波法),融合了“中位值滤波法”+“算术平均滤波法”两种滤波法的优点。对于偶然出现的脉冲性干扰,可消除由其所引起的采样值偏差。对周期干扰有良好的抑制作用。平滑度高,适于高频振荡的系统。原理分析中值平均滤波就是在采集的N个数据中去掉一个最大值和一个最小值,然后对剩下的数据求平均值。所以这个算法不需要对数据排序,关键是计算最大值,最小值,求和,然后计算平均值。参考代码typedef unsigned short fi
2021-04-20 20:10:50
6037
原创 STM32F1----TIM_GENERAL
1.通用定时器PWM模式初始化流程<1>建立GPIO、时基、输出比较结构体 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure;<2>使能定时器以及相关IO口时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_
2021-04-17 17:25:56
515
原创 递推平均滤波
递推平均滤波算法应用场景 对周期性干扰有良好的抑制作用,平滑度高; 适用于高频振荡的系统。原理分析 采用队列作为测量数据存储器 , 设队列的长度为 N ,每进行一次测量 ,把测量结果放于队尾, 而扔掉原来队首的一个数据, 这样在队列中始终就有 N 个 “最新” 的数据。当计算平均值时, 只要把队列中的 N 个数据进行算数平均 ,就可得到新的算数平均值。这样每进行一次测量, 就可得到一个新的算术平均值。参考代码/*定义滤波数据类型*/typedef int filter
2021-04-17 15:48:21
1301
原创 STM32F1----TIM_BASE
1.基本定时器定时初始化流程<1>建立时基初始化结构体与中断NVIC结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;<2>打开定时器外设的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);<3>配置定时器初始化与NVIC结构体并初始化/* NVIC结构体并初始化
2021-04-17 14:20:28
1356
原创 算术平均滤波
算术平均滤波算法应用场景对于有近似正负偏差的随机干扰,算术平均滤波法可以有效滤除。也就是说待滤波的信号的特点是有一个平均值,信号在某一数值范围附近上下波动。原理分析连续采集N组数据,计算算术平均值,计算结果作为本次数据有效值参考代码typedef int filter_type;/*函数声明*/filter_type filter(filter_type value_buf[], int num);/*算术平均滤波函数,num为value_buf[num]中元素个
2021-04-17 11:10:52
3133
原创 STM32F1----ADC
1.ADC初始化流程<1>建立GPIO、ADC初始化结构体GPIO_InitTypeDef GPIO_InitStructure;ADC_InitTypeDef ADC_InitStructure;<2>打开相应的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);<3>配置GPIO、ADC初始化
2021-04-17 01:36:00
914
原创 中位值滤波
中位值滤波算法应用场景中位值滤波法可以滤除偶然因素引起的脉冲干扰,适用于变化缓慢的采样系统。原理分析对某一被测参数连续采样 n次(一般 n 取奇数) ,然后再把采样值按大小排列 ,取中间值为本次采样值。参考代码/*定义滤波数据类型*/typedef int filter_type;/*函数声明*/filter_type filter_1(filter_type value_buf[], int num);filter_type filter_2(filter_ty
2021-04-16 23:24:34
1448
原创 限幅滤波
限副滤波算法应用场景限幅滤波是一种消除随机干扰的有效方法。原理探究比较两个相邻时刻t(n)和t(n - 1)的采样值y(n)和 y(n – 1),根据正常值估计并确定两次采样的最大允许误差。如果两次采样值的差值超过了最大允许误差 ,认为发生了随机干扰 ,并认为后一次采样值y(n)为非法值 ,应予删除 ,删除y(n)后 ,可用y(n – 1) 代替y(n);若未超过所允许的最大偏差范围 ,则认为本次采样值有效。参考程序 /*定义最大允许误差*/#define ERROR_M
2021-04-16 22:33:53
4870
原创 STM32F1----I2C
1.硬件I2C的初始化流程<1>建立GPIO、I2C初始化结构体GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure;<2>打开GPIO和I2C挂载的时钟/*启动时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
2021-04-13 20:02:20
591
1
原创 STM32F1----USART
1.USART初始化流程<1>建立GPIO、USART、NVIC初始化结构体USART_InitTypeDef USART_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;<2>打开对应的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockC
2021-04-12 23:50:57
678
1
原创 STM32F1----SysTick
1.SysTick定时器初始化流程<1>调用SysTick_Config函数配置SysTick定时器计数频率。<2>定义SysTick定时器中断函数,每次中断时对递减某一个变量,当变量等于0时,定时时间到。<3>封装延时函数2.SysTick定时器中断延时例程#include "systick.h"#include "misc.h"#include "core_cm3.h"static __IO uint32_t delay_ticks; //__I
2021-04-12 00:04:34
605
原创 STM32F1----NVIC
1.NVIC初始化流程<1>配置中断优先级分组void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);<2>建立NVIC初始化结构体NVIC_InitTypeDef NVIC_InitStructure;<3>配置NVIC结构体并初始化NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQCha
2021-04-11 17:35:56
1386
原创 STM32F1----EXTI
1.EXTI初始化流程<1> 建立EXTI、GPIO、NVIC初始化结构体。 EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;<2> 打开GPIO与AFIO时钟 /* 使能 GPIOA 时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GP
2021-04-10 17:29:25
1534
原创 STM33F1----GPIO
1.GPIO初始化流程 <1>建立gpio初始化结构体 GPIO_InitStructure <2>打开gpio外设的时钟 RCC_APB2Periph_GPIOx <3>结构体变量初始化 (Pin、Mode、Speed) <4>结构体初始化GPIO_Init(GPIOx,&GPIO_InitStructure)2. GPIO初始化结构体typedef struct{ uint16_t GPIO_Pin;
2021-04-10 15:58:49
271
原创 RT-Thread嵌入式操作系统
RT-Thread嵌入式操作系统 1一、系统架构二、文件结构1、RT-Thread 完整版2、RT-Thread Nano版3 源文件的文件说明4 移植后的文件层次三、系统启动四、用户代码一、系统架构 RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统。 RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。针对资源受限的微控制器(
2021-03-19 17:35:47
3322
1
原创 FreeRTOS嵌入式实时操作系统(1)
嵌入式操作系统FreeRTOS (1)1、基础知识<1> 系统认识2、移植必要文件<1> 文件<2> 移植说明3、源码的命名规范1、基础知识<1> 系统认识FreeRTOSv10.3.1 | | -- FreeRTOS | -- Demo 放的是一些主流芯片主流IDE的示例代码,刚开始建立工程的时候可以参考里面的 FreeRTOSConfig.h | -- License 放的
2021-03-18 21:35:57
809
原创 STM32F1----RCC
【stm32学习总结】 rcc篇——————————芯片基于stm32f103vet6———————————想了想时间过的真快啊,转眼间就大二了啊。昨天看见大一新生,在他们身上我依稀看见了我那个时候的模样。 <1>时钟树(重要的时钟节点用彩色标注)<2>主时钟控制框图 对于STM32来说,时钟源一共有四个,分别为 LSI 、LSE 、HSE 、HSI。另外一种说法为五个,加上PLL。个人认为,根据上面这个时钟树也可以看出,PLLCLK是HSE或者HSI经过锁
2020-09-14 16:05:51
565
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人