自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (6)
  • 收藏
  • 关注

原创 23年电赛D题-信号调制方式识别与参数估计装置

缺点,受单片机性能影响,FFT的精度不够,我使用的是300k采样率,12位AD, 8192采样点数,单精度FPU,168M运算主频进行分析。比如说将FM信号通过一个微分器,就可以达到数字求导的作用,变成一个AM和FM的混合体的样子,可以通过读取AM的信号幅度与频率来获得FM的信号频率以及频偏。缺点,对于AD位数要求高,使用单片机的内置AD无法达到题目要求,但是我试过外接一个24位的AD,可以提高分辨精度。识别信号有很多思路,最简单的方式便是通过对信号进行FFT分析,分析其中的各个谐波的特征值。

2023-08-07 18:32:51 2094 32

原创 C缺陷与陷阱-符号

【代码】C缺陷与陷阱-符号。

2023-05-31 19:01:43 150

原创 C语言指针笔记

【代码】C语言指针笔记。

2023-05-31 19:01:18 159

原创 左值与右值

由此可以看出int arr2[]作为形参时确实是一个int* 的指针,int arr2[]被转化为指针类型,至于为什莫不直接用指针呢,大概是为了语义化,并且方便在函数内部使用数组吧。关于指针与地址的一些感悟 地址是一个常量,右值,立即数,是固定的,在内存中表示某一个位置,是某一个位置的名字,对于地址的访问属于电路的操作,对于软件语言只是一个名字。数组名和函数名都可已被取地址,并且&arr == arr?int n = 1;当然,数组可以作为形参来接受数组地址,那是不是就意味着数组是一个指针呢?

2023-05-25 22:35:30 388

原创 freertos笔记-任务切换

跳出 3. 循环 (一般用于死循环的第二次循环,因为第一次肯定是溢出了,但是,可能溢出的不止一个,所以要把所有溢出的都找到,最后,找到下一个溢出值)3.5 判断是否要进行任务切换,如果溢出任务优先级高于运行任务优先级的话,会切换任务,而且切换的任务一定是是先添加进去的任务,原因1 高优先级的列表一定为空,pxIndex=>xlistend,而且添加的任务是添加到。作用场景为 当前任务和溢出的任务相同优先级,那么下一个执行的会是溢出的任务,当然如果列表里还有其他任务的话不一定是会执行这个溢出任务,

2023-05-25 22:33:50 877

原创 freertos笔记-任务基本构造

/删除任务,并在空闲任务中释放空间(堆栈以及TCB的空间)TCB空间如果是动态创建任务的话,就是自动分配自动回收,如果是静态创建,就需要初始化一下,而且必须是初始化StaticTask_t该结构体,而不是值初始化一个结构体指针。将该任务挂起,只有调用任务恢复函数 vTaskResume()或 xTaskResumeFromISR()才会恢复该任务,其他的队列,任务通知,delay都不能将其唤醒。表示有多少个任务要被清理。5. 如果该任务正在运行,切换上下文 portYIELD_WITHIN_API();

2023-05-25 22:30:54 752

原创 freertos笔记-内核函数配置

调用了几次 vTaskSuspendAll()挂起调度器,同样的也得调用几次 xTaskResumeAll()才会最终恢复任务调度器。PC = 任务函数指针 入栈。(4). 初始化任务 prvInitialiseNewTask();//以下是任务参数的初始化。(5). 将任务添加到就绪列表中 prvAddNewTaskToReadyList();xTaskGetApplicationTaskTag() 获取某个任务的标签(Tag)值。

2023-05-25 22:25:49 805

原创 freertos笔记-各种列表运行原理

就是说,列表中的第一个任务不是最先执行的,也许是刚一执行就立马遇到了新的切换吗 应该是,经过仿真器逐步调试,发现。有一个疑问,当节拍间隔比较小时,第一个执行的任务并不是预期的任务,节拍大一点时,才符合逻辑?2-true. 如果没有任务在运行, pxCurrentTCB指向新添加的这个任务, (这里会造成刚开始的时候,最先运行的是最后一个创建的任务)4.1.5.2 taskSELECT_HIGHEST_PRIORITY_TASK()获取就绪列表最高优先级的任务。挂起PendSV中断。

2023-05-25 22:24:23 700

原创 freertos笔记-队列

2.true.1.2 判断是不是互斥队列 是的话xTaskPriorityDisinherit 优先级操作。3.挂起调度器 并且队列上锁prvLockQueue 这里主要是防止中断程序对该队列有操作。2.true.1.1 获取当前队列uxMessagesWaiting值。2.true.1 复制队列中的信息prvCopyDataToQueue。2.false.1 队列满了的话,判断xTicksToWait是否要等待。2.true.2 队列集相关操作。队列项目一(32字节)队列项目二(32字节)

2023-05-25 22:22:48 712

原创 freeetos笔记-列表

prvAddNewTaskToReadyList时用到,有很大用途。列表是一个存放整个系统任务实时信息的数据结构,与单个任务本身是没有关系的是用来调度器用于控制任务的工具。这个函数改变了pxIndex的指向,开始了遍历,它不破坏列表结构。这个函数会将列表项插入pxindex的前面,所谓的尾部。mini列表 xListEnd使用这种类型。列表项是不断插入删除动态游走于各个列表的。获取列表下一项的函数。

2023-05-25 22:17:56 54

原创 CM3学习-中断

(使用双堆栈的条件下,线程模式响应中断时,进入中断入栈时使用psp,然后在中断中使用msp,结束该中断时,切换到psp来出栈)现在使用PendSV来切换上下文,(将PendSV的优先级设置为最低),滴答定时器打断中断后上下文未发生变化,因此可以回到被打断的中断。悬起后,如果优先级不够高,则将缓期等待执行。相同的抢占优先级,不同的子优先级,不会发生抢占,只用于解除悬挂状态,当子优先级也一致时,判断中断源的编号。中断状态标志位在系统内部,用于标识运行,悬挂,完成状态,可以动态改变,可能会导致硬件层次的死循环。

2023-05-25 22:12:10 633

原创 CM3学习-内存管理

别名区地址 = ((哪种位带区) + 别名区偏移量) + ((位带区字节地址)*8【*8是因为一个字节有8位】*4【*4是因为每一位都会别拓展成32位,又因为是字节寻址,则4个字节】 + (哪一位)*4)#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)

2023-05-25 22:09:46 312

原创 CM3学习-基础知识

然而,在分支时,无论是直接写 PC 的值还是使用分支指令,都必须保证加载到 PC 的数值是奇数(即 LSB=1),用以表明这是在 Thumb 状态下执行。IF-THEN(IT)指令围起一个块,里面最多有 4 条指令,它里面的指令可以条件执行(用于优化三元运算符以及小逻辑的if语句)使用双堆栈的条件下,线程模式响应中断时,进入中断入栈时使用psp,然后在中断中使用msp,结束该中断时,切换到psp来出栈。使用x后缀指令,要记得最低位置1,以示Thumb状态,为0的话是arm状态cm3不支持,会有fault;

2023-05-25 22:06:04 653

原创 STM32内存笔记

而且,如果你在函数里面进行这个操作的话,指针地址位于stack,但分配的内存属于heap,函数结束后,不会影响heap里面已经被分配的空间。所以,在初始化对象类型时,以及结构体时,如果直接申明结构体变量的话,它是属于stack的,会被销毁。其中stack作为系统的栈,所有函数里面定义的局部变量都是占用stack的空间的,递归调用函数要注意栈溢出问题。ROM又被称为“只读存储器”,ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。

2022-11-27 13:06:22 1317

原创 十大排序之快速排序

快速排序-RSIC-V版本。

2022-10-31 18:10:03 99

原创 十大排序之希尔排序

希尔排序之RSIC-V版本。

2022-10-28 17:11:28 131

原创 STM32 IO口模拟串口

比如说,我发送了一段0和1构成的波形,这段波形我希望他有8个二进制的信息,那么我让每一个二进制信息都保持一秒钟,然后在发生变化。那么,我们可以选择奇校验 当这八个数据里由0或2或4...个1时,我们设置校验位为1,那么这九个数据里就有奇数个1。那么,我们如果想要连续发好多个信号,我们不能把所有信息连到一起发送出去,就像我们写英语作文,不能把所有单词的字母挨得特别紧,一点空也不留。那么,每一秒有一个信息,这就是波特率。由于我们的信息中只有1和0两种状态,那么这就意味着1的个数可以是0~8,不是奇数就是偶数。

2022-09-03 20:57:13 2390 1

原创 STM32 时钟随笔

什么是时钟?通俗的的来说,时钟是一个系统的最小时间单位。它并不是用来提供能量的器件,他就像是我们生活中的秒表,以固定的频率一秒一秒的走着。而我们每做一件事都可以说是花费了几秒时间。(不存在零点几秒,它是一个系统的最小时间单位)。在单片机里面通常有4个时钟源,分别是HSI振荡器时钟 (高速内部时钟)8MHSE振荡器时钟 (高速外部时钟)外接一个晶振电路LSI振荡器时钟 (低速内部时钟)40kLSE振荡器时钟 (低速外部时钟)32.768k其中,一般情况下我们使用外部HSE。

2022-09-03 09:55:13 239

原创 2022年电赛F题 信号调制度测量装置

红叶何时落水一、任务设计制作信号调制度测量装置,该装置测量并显示信号源输出的被测信号调制度等参数,识别并显示被测信号的调制方式,输出解调信号。测量系统如图1所示。二、要求(1)被测信号为电压峰峰值100mV的普通单音调幅(AM)电压,其载频为10MHz、调制信号为频率1~3kHz的正弦信号。测量并显示的调幅度,要求测量误差绝对值≤0.1;输出解调信号,要求解调信号波形无明显失真。 (20分)(2)被测信号为电压峰峰值100mV的单音调频(FM)电压,其载频为10MHz、调制信号为频率3~5kHz的正弦信号。

2022-08-01 12:32:36 7897 13

原创 基于MC1496芯片的AM调制与解调

红叶何时落水皇家邮电电子专业大二电电课程设计一不小心抽到了AM调制题设计一个AM调制解调器,调制信号为500HZ的正弦波,载波信号为30KHZ正弦波,电路内部需要包含有源低通滤波器。根据要求,需要300KHZ和500HZ的正弦波信号,采用已有的函数发生器。整个电路需要包含调制和解调的过程,利用运算放大器,乘法器等元器件完成。本来吧,这个题应该重点是后面的解调部分。因为这个学期主要学的就是动态电路,自己独立设计一个低通电路还是没问题的。但是,调制部分花了3天,解调三天。首先进行AM信号的调制,通过理想的乘法器

2022-06-29 17:49:49 8749 17

原创 stm32 波形检测,绘制

红叶合适落水校赛第三部分详见http://t.csdn.cn/50yJu这里就简单多了波形检测见http://t.csdn.cn/LCvX1关于判断波形的类型FFT还没用过但一定频率范围内有两种方法方案一检测一下采集到的波形数据,大于某个值的数有多少个,就可以判断出是什么波形方案二将数组内相邻的两个数相减,判断差值;差值为0,方波差值为定值,但不为0,三角波差值不是定值,正弦波。关于STM32单片机对数的计算直接使用公式是没法返回正确的

2022-05-20 18:22:40 2870

原创 stm32 检测相位差 并简单实现两个单片机的通信

红叶何时落水校赛第二部分详见http://t.csdn.cn/50yJu利用定时器的输入捕获模式来测量相位差通过 (两路波形上升沿的时间差 / 波形周期)* 360°来实现相位差的测量deg = (360 - (((TIM2CH1_CAPTURE_VAL3 * 360) / (TIM2CH1_CAPTURE_VAL)) + chart)) % 180;其中chart为线性补偿,可以通过按键改变其值,以此实现不同电路的测量可以利用相位差来计算相应的频率与峰峰值难点在于C

2022-05-20 18:10:55 3282 2

原创 stm32实现波形输出,步进1hz

红叶何时落水校赛第一部分详见:http://t.csdn.cn/8op0B关键难点在于步进1hz,若使用定时器的PWM输出方波,步进1hz完全没有问题。但正弦与三角两种波形有一定的问题。方案一,将方波利用比较器转换成正弦和方波这一方案可以实现步进1hz,但是,峰峰值不能保证是5V.因为随频率的变化,峰峰值也会发生变化。解决方案:我们使单片机输出的方波的峰峰值并不是定值,而是一个随着频率而变化的值。以此保证经过比较,放到后,峰峰值为定制5V。方案二,利用DA输出波形DA可以

2022-05-20 17:42:06 1760 3

原创 记录第一次电赛——校赛

红叶何时落水题目很简单1、基础要求 1)波形产生模块可以输出 4KHz -6KHz,峰峰值 5V 的方波。频率可以 通过按键直接调整及步进调整,步进小于等于 10Hz,频率误差低于 2%,波形稳定无明显失真,无噪声。 2)电路 1 输出 12KHz -18KHz,峰峰值 4V 的正弦信号,波形稳定无 明显失真,无噪声。 3)在前级电路输出频率不变的情况下,电路 2 可以改变其输入信号 的相位,要求相位在 20°-160°内连续可调,输出峰峰值无要求,波形稳 定

2022-05-20 17:25:46 782

原创 JS 的var let const

红叶何时落水主要记录一下var,let的区别,以及变量声明提升与函数声明提升var 用于定义一个变量,并且限制了这个变量的作用域 (function fn() { var a = 'fn_var'; b = 'window_var'; })() console.log(a);//=>undefined console.log(b);//=>window_var没有var而直接定义的变量视为window的一个属性(作用

2022-05-10 17:53:28 144

原创 stm32 使用ADC_DMA采集电压,并在显示屏上输出波形

红叶何时落水DMA初始化 GPIO_InitTypeDef GPIO_InitStructure; DMA_InitTypeDef DMA_InitStructure;//结构体定义 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启DMA时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; G

2022-04-28 09:55:52 5971 8

原创 JS中call,apply,bind方法

红叶何时落水bind是函数原型对象上的一个方法,用于改变函数的this指向这个方法会返回一个新函数,新函数可以调用他所绑定的对象的属性。var name = 'window';var newThis = { name: 'newThis' };var showName = (info1, info2) => { console.log(this, info1, info2);}showName('a', 'b'); // 通过bind改变this指向var newS

2022-04-20 17:19:03 2463

原创 JS中的this

红叶何时落水谁调用就指向谁当一个对象调用时,this指向这个对象的首地址 var obj = { name: "obj_name", obj2: { name: "obj2_name", func: function() { console.log(this.name) } }, func: function() {

2022-04-19 22:01:51 356

原创 STM32 使用DAC和DMA输出任意波形

绿叶何时落水电赛代码备份,展示不做解释。简单思路,利用的是DMA2的DAC1的专用通道来将数组里的波形数据放到DAC1的寄存器里。定时器的TIM_SelectOutputTrigger来控制DAC的输出频率(DAC_InitType.DAC_Trigger = DAC_Trigger_T2_TRGO; )1.DAC1的初始化void Dac2_Init(){ GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_

2022-04-10 15:04:43 3329

原创 正则表达式的test()多次调用

红叶何时落水问题 let a = 'a.so'; let reg = /.so/g; console.log( a,reg.test(a)); console.log( a,reg.test(a));//输出 17:09:29.940 a.so true at IF_bug.html:43 17:09:29.942 a.so false at IF_bug.html:44同一个变量a,两次匹配,结果却不同;这是为何?原因在于Re

2022-03-22 17:18:14 577

原创 如何缓存函数计算结果?

红叶何时落水需求场景在请求数据时,我们免不了要对数据进行一些修饰,加一些前缀,组合一下字符串;那么当我们在不同页面请求同一组数据时,又不愿页面间传递参数时,我们便可以对数据处理函数进行修饰。function mathed(str) { console.log('math'); return str + 'd';}function cached(fn) { var cache = Object.create(null); return (function cachedFn(s

2022-03-14 17:48:29 389

原创 组件-原生组件webcomponent

红叶何时落水组件化开发有利于代码的复用这里是原生组件的思想与构建首先,代码复用,就意味着会有一个模板,这个模板已经实现了基础功能,我们只需要调用它即可;那么一个组件由两部分构成,视图与逻辑。视图模板视图的模板原生提供的方法为<template>标签,里面的内容可以被其他页面使用; <template id="new_message"> <style> .main { w

2022-02-25 11:33:08 706

原创 手写Promise(1)

红叶何时落水很多时候我们希望程序可以等待某个耗时操作执行完成后,获取到他所返回信息,以便进行下一步的操作。但JS 作为单线程语言,并没有提供这种操作。利用回调函数又不利于后期维护,毕竟我们将函数写到回调函数中;如果,回调次数多的话,一层一层的添加,可读性就太差了。那么,可以利用Promise来解决这个问题;首先,建立一个公共的,谁都可以建立的类function Pro(fn = (() => { })) { this.state = 0; this.the

2022-02-23 10:57:31 333

原创 微信小程序背景图片真机不显示问题

问题描述 :开发者工具上<view style="background-image: url(图片路径);"></view>可以正常显示但是真机预览,不显示。解决方式:1.图片路径以http开头时,可以显示。所以,可以将图片放到微信云端,直接引用云id;没钱的话,把多张图片放到一个压缩包里,压缩包放到云端储存;然后下载下来,保存到本地,再从本地引用即可;(实测,安卓没啥问题,苹果还是不显示)2.将图片路径转化为Base64格式 Backgrou

2022-02-22 10:47:42 5371 3

原创 微信小程序服务器文件下载及解压

对方法做个备份方法一 下载及解压代码第一个参数为下载地址,将下载地址以数组的方式传入,可以下载多个文件。第二个参数为想要将下载并解压好的文件保存到的本地路径。第三个参数为是不是微信云端路径,是的话为true;const wxP = require('../utils/util.js');Download_zip: function (load_path = [], target_path = '', if_cloud = false) { const fs = wx.

2022-02-22 10:30:30 1921

原创 函数的拦截(Vue数组方法响应化)

红叶何时落水首先明白原型链是啥关键语句:儿子原型的__proto__属性指向父亲的prototype属性,构造函数的prototype属性的constructor属性指向其本身;经典美图需求:Vue中data中的数据发生改变时,set属性可以确保响应式;但是我们只是在最开始的时候将所有的data数据都重新定义过一次;当我们使用数组方法添加数据时,我们该如何保证新添加的数据是响应式的呢。对象方法调用会沿着原型链向上寻找,一旦找到,就停止。那么我们可以插入一个节点,让数.

2022-02-21 23:31:31 725

原创 微信小程序全局变量的监听

当一个文件在后台下载,我们需要当文件下载成功后,自动进行一些行为(弹出一个下载成功的弹窗或者刷新当前页面);以微信小程序的下载为例,通过app.js里的全局变量来对其他页面进行通知// app.jsApp({ globalData: { userInfo: null }, watchProperty: function (method = function () {}, atrrs, value ) { var obj = this.globalData;

2022-02-20 10:56:41 3429 1

原创 响应式原理

红叶何时落水响应式指的是当我们修改一个变量时,会有某些操作可以自动进行。比较典型的便是Vue框架中的实例数据一旦发生变化,便会自动更新到视图层。<div id="red">{{name}}</div><script> var app = new Vue({ el: '#red', data: { name: '红叶', age: 19, } })

2022-02-20 10:13:44 2032

2023年电赛D题完成品视频

2023年电赛D题完成品视频

2023-08-07

RSIC-V单周期CPU设计代码,实现了17种指令

支持指令 add,sub,and,or,sll,srl addi,ori,andi,lw,slli,srli sw beq lui,auipc jal

2022-12-15

stm32核心板IO口定时器模拟串口

PA0为发送端 PA1为接收端 目前为PA1接收到到数据后,立马发送出去 波特率9600 若资源无法下载,请到微信小程序“非遗种草社”中获取。(我设置的是免费下载)

2022-09-03

ADC-DMA 实现波形采集

可以利用ADC_DMA 实现波形采集,并且测量电压值,在lcd屏幕上显示。 适用于stm32迷你版;

2022-07-19

stm32 校赛第三部分 可以检测三种波形,绘制特性曲线

利用AD_DMA采样,实现波形的绘制,并通过对数据的处理,显示波形名称 通过AD对第二部分的扫描信号进行采集,绘制幅频特性曲线以及对数幅频特性曲线 详情见博客

2022-05-20

stm32 校赛第二部分 相位差的测量,并将相位差为自变量,输出相应的正弦波

可以检测两路方波的相位差,误差在1°,可以通过按键进行线性补偿。数字3 输出两种频率与幅值承线性变化的正弦波。数字1,2 自动扫描数字1的线性波形。 并对单片机之间的通信做了处理。

2022-05-20

嵌入式 stm32实现校赛第一部分,信号发生器

可以产生幅值为3.3V的方波,频率可通过按键设置,步进为1hz,10hz,100hz 可以产生幅值为2.5V的正弦,三角波,频率可通过按键设置,步进为1hz,10hz,100hz。 校赛要求4khz-6khz没问题,频率小了的话没问题,但最大没有测,估计正弦,三角那一路最大40khz,方波大了去了。 个人电赛代码备份

2022-05-20

stm32波形生成器,可同时产生三个独立信号

基于stm32 mini板 可同时产生三路信号,信号类型可调为三角波,正弦波,方波,锯齿波;频率可按键独立控制1hz~40khz; 方波频率1hz~100khz; 幅值可手动调整0~3.3V.

2022-04-11

空空如也

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

TA关注的人

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