自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Hex文件与BIn文件的关系

单片机底层文件分析

2024-06-24 17:38:03 417

原创 单片机启动流程

自用

2023-11-11 11:01:55 473

原创 Rtthread源码分析<1>启动文件和链接脚本

其实,总的来说系统初始化的过程就是对内存空间的操作,利用对需要初始化的函数进行编号,然后通过链接脚本按照编号分配至连续的内存空间,其中对于需要在不同区域初始化的部分在内存中打标签也就是1.end,0.end,6.end等等。接下来是最奇妙的地方,可见上述代码中存在 ____rt_init_desc_rti_board_start 和 ____rt_init_desc_rti_board_end两个变量,这两个变量也是通过INIT_EXPORT宏函数进行导入的。但是最重要的是其level值。

2023-11-04 14:16:52 593

原创 不同版本的GNU编译器共存

解决slam项目,对于不同版本opencv的编译和不同版本的GNU编译器共存的问题的解决。

2023-07-25 21:36:27 359

原创 【五】零基础上手HAL库之—按键外部中断

【五】零基础上手HAL库之—按键外部中断5.1 前言我们已经大致的了解了Cubemx软件中GPIO的基本操作了,接下来我们开始进入外部中断的操作,这是一个惊心动魄的时刻,为什么呢?在使用Hal库的同时你会感觉到其优势性,开发效率大大提高带来的快感。前期准备STM32各类型的板子(本人使用F103Rc和F407ZE)。CubeMx软件,Keil_IDE。5.2 Key按键中断同样的我们先来看看按键模块的原理图部分:当按键没有按下时,按键部分相当于断路,PC13的电压相当于电容两端电压

2021-09-02 23:20:37 2573

原创 【四】零基础上手HAL库之—GPIO按键

【四】零基础上手HAL库之—GPIO按键3.1前言我们在上一节已经知道了点灯操作,相当于是学会了GPIO输出的配置,接下来是GPIO输入完成按键扫描的操作。前期准备STM32各类型的板子(本人使用F103Rc和F407ZE)。CubeMx软件,Keil_IDE。3.2 KEY按键同样的我们先来看看按键模块的原理图部分:当按键没有按下时,按键部分相当于断路,PC13的电压相当于电容两端电压为3.3V。当按键按下时,按键部分相当于短路(即一根导线),PC13的电压和GND地相连为0V

2021-09-01 21:04:20 3147

原创 【三】零基础上手HAL库之—GPIO点灯

【三】零基础上手HAL库之—GPIO点灯3.1前言我们已经大致的了解了Cubemx软件界面的一般操作,懂得如何新建工程和使用步骤了,接下来我们正式进入使用Hal库开发的旅程,这是一个惊心动魄的时刻,为什么呢?在使用Hal库的同时你会感觉到其优势性,开发效率大大提高带来的快感,来吧我们先点灯。前期准备STM32各类型的板子(本人使用F103Rc和F407ZE)。CubeMx软件,Keil_IDE。3.2 LED流水灯我们先来看看板子对应流水灯的原理图:采用共阴极连接的LED灯,只有当

2021-08-31 16:38:06 2674

原创 【二】零基础上手HAL库之—熟悉Cubemx软件的框架

【二】零基础上手HAL库之—熟悉Cubemx软件的框架在完成了Hal库开发环境的搭建后,就是要开始使用此工具了,那么我们肯定有一些必要的准备工作要进行,本节内容仅仅讲解软件各个模块的功能,想要用好软件,第一步当然就是大体上的熟悉软件创建一个工程。如果还没搭建好环境可以看上一节内容:2.1 前期准备Stm32f103Rct6芯片的板子Keil5软件以及上一节内容安装好的开发环境(Cubemx、JRE、Hal包)点击打开软件可以得到如下界面:①创建,打开,导入项目等操作。②调整窗口大

2021-08-30 23:31:20 406

原创 【二】零基础上手HAL库之—环境搭建

【二】零基础上手HAL库之—环境搭建JRE :Java运行环境STM32CubeMx:意法半导体官方图形化配置软件HAL库:软件库包2.1 JRE安装STM32Cubemx是基于Java开发,并需要Java环境才能支持正常运行。官方地址:Java下载官方地址百度云地址:百度云地址提取码见文章尾公众号,下面是一个Java安装的步骤。打开网站后点击如下选项打开刚下载完成的软件,见得如下页面点击安装后,见得如下页面,点击更改选择自己想要安装的路径点击下一步

2021-08-29 19:55:44 543

原创 【一】零基础上手HAL库之—为什么要选择HAL库

【一】零基础上手HAL库之—为什么要选择HAL库寄存器:(Snippets)ST标准库:(Standard Peripheral Libraries)LL库:(Low Layer Libraries)HAL库:(Hardware Abstraction Layer Libraries)1.1 寄存器操作寄存器,不同于其他三种库的操作方式,适用于同C51中的开发模式,直接操作低层的寄存器,本身只对寄存器的地址进行了封装映射关系。因为在C51这样的单片机中,只有少量的寄存器需要操作,使用比较

2021-08-28 19:35:50 1211

原创 嵌入式C语言的高级使用(全网最详细)

嵌入式C语言的高级使用(全网最详细)一、宏宏,在我看来是一个C语言中的一大特色,在此基础上可以使用一些特殊的功能。1.1 变类型参数宏在一些运用场景下,我们常常要用到类似于二者求最大、最小值,常常将这样的简单的一个功能封装为一个方法函数,但在函数的语法中,要明确定义参数的变量类型,也就是不同类型的变量需要建立相对不同的函数,但我们使用一些特殊的手段,就可以用宏实现不定类型的带参宏。见如下例子:#define max(x,y)({\ typeof(x) _x = (x);\ typeof(y)

2021-08-27 13:45:07 840 2

原创 STM32实现按键有限状态机(超详细,易移植)

STM32实现按键有限状态机(超详细,易移植)一、状态机简而言之,状态机是使不同状态之间的改变以及状态时产生的相应动作的一种机制。1.1状态机的四要素现态:状态机当前状态。触发条件:改变当前状态的发生条件。动作:状态改变产生相应的动作。次态:状态机激活触发条件后跳转到的下一状态。注意:状态和动作是不同的,状态是持续的而动作是间断的,改变状态产生动作,动作完成后,状态依旧持续。1.2为什么要使用状态机​ 举一个简单的例子,在实现按键扫描常常有三种方式轮询方式

2021-08-18 20:03:11 8080 3

原创 Markdonw语法

目录Markdown 语法简介**粗体***斜体*标题分割线^上^角~下~标++下划线++ ~~中划线~~==标记==段落引用列表任务列表链接代码段落表格(table)脚注(footnote)表情(emoji)$\KaTeX$公式布局定义abbrMarkdown 语法简介语法详解粗体**粗体**__粗体__斜体*斜体*_斜体_标题# 一级标题 #一级标题====## 二级标题 ##二级标题----### 三级标题 ####### 四级标题 ######### 五级

2021-08-18 13:15:46 78

原创 取模软件配置

取模软件配置

2021-07-20 18:29:31 295

原创 TIVA_C学习笔记三

TIVA_C学习笔记三关于解决keil下不了的问题通过摸索我有发现了另一种下载方式,使用Ti官方的软件LM Flash Programmer软件。但这个软件需要的是.bin文件,keil默认生成的是hex文件axf文件,所以需要将其转化为bin文件,keil本身带了一个工具可以实现转化。具体操作步骤如下:1.如图在User中添加如下命令: fromelf --bin -o “$L@L.bin” “#L”实际上是使用了fromelf.exe工具2.下载LM Flash P

2021-07-20 11:28:08 454

原创 Keil下载代码闪退的问题(已解决)

Keil下载代码闪退的问题(已解决)问题描述:代码编译通过,下载时报错keil闪退解决方法如下:问题解决,只要保证以上两处的Debug的驱动一致即解决问题。

2021-07-20 10:01:24 6682 2

原创 TIVA_C学习笔记二

GPIO一、普通输出int main(){ unsigned int clk; // 系统时钟存在一个默认值 可不配置 SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); clk=SysCtlClockGet(); //需要打开时钟 这里的延时是每三个时钟周期计数一次,所以要除以3 SysCtlDelay(SysCtlClockGet()*0.2/

2021-07-19 15:47:48 460

原创 TivaC学习笔记

一、基础时钟源TM4C123内部共有4个时钟源,见下表时钟简介内部高精度振荡器(PIOSC)内部振荡器,其频率为16MHz,精度为1%,可以用来驱动PLL主振荡器 (MOSC)外部高速振荡器,频率可在4-25M间选择,可以驱动PLL(此时频率在5-25M)低频内部振荡器 (LFIOSC)适用于深度睡眠省电模式,它的频率是会改变的,范围在10KHz-90KHz之间,标准值30KHz休眠模块时钟源32.768KHz晶振,用于实时时钟源或睡眠时钟二

2021-07-19 14:20:17 1176 3

原创 Git上传文件到Github(最详细)

Git上传文件到Github(最详细)大致步骤本地仓库:a. git init 在本地创建一个Git仓库;b. git add . 将项目添加到暂存区;c. git commit -m "注释内容" 将项目提交到Git仓库;远程仓库:a. 添加SSH KEY;b. 新建repositories;本地仓库:a. git remote add origin git@github.com:UserName/projectName.git 将本地仓库与远程仓库关联;b. git p

2021-07-18 10:58:52 7519

原创 兔子与熊的故事

睡前故事<一>时间:2021/7/7当雪花一片片飘到地上的时候,小兔子和小熊都回到各自家里过冬,约好了明年春天再见面的时候,要一起陪小兔子吃好吃的胡萝卜蛋糕。但是今年的动物森林和往常不太一样,一些小动物得了很奇怪的病,这种病还会传染给别的小动物。小兔子和小熊在的城市里都有人得了这种病,大家都只能呆在屋子里,他们可以一起用手机聊天,玩游戏,但是却很久很久没有能够见过面了。小兔子很想很想小熊。“小熊小熊,我们再见面的时候,田野里会长出新的胡萝卜吗?”小兔子捧着手机,想到到时候就能看到

2021-07-07 23:16:19 420

原创 自动原理期末复习

Matlab自控原理上的使用一、根轨迹图绘制G(s) = Kr/s(s+3)(s+3)的根轨迹num=[1,]; %分子部分默认Kr=1时den=conv([1,0],[1,6,9]);%分母部分sys=tf(num,den);%建立传递函数rlocus(sys)%绘制根轨迹图获得如下实验结果:使用数据游标可以获取相关点的数据二、极坐标图(奈氏图)绘制G(s) = 10(2s+1)/s^2的极坐标图num=[20,10];den=[1,0,0];sys=tf(num,

2021-07-05 18:39:21 217

原创 Rtthread学习笔记<一>

RT-thread内核文档学习<一>内核基础Rtthread的初始化过程纯属个人学习笔记,敬请指正一、系统初始化首先初始化会进入一个被Sub和super修饰的main函数,由于我从来没有见过于是就看了官方的文档,做出了如下总结。附:相关文档1-ARM Compiler v5.06 for µVision armlink User Guide相关文档2-内核基础1.1 扩展补丁Sub和super的作用**∗∗super∗∗** super**∗∗super∗∗∗∗fo

2021-07-03 01:28:45 727

原创 自动控制原理<五>

六、根轨迹从开环传递函数的根去研究闭环传递函数的方法:当要使用根轨迹去分析闭环的传递函数时,需要将其化为标准形式,再将分析对象提出来进行分析通常的方法是分母整体乘以一个不包括k项的倒数分之一以上介绍了由闭环系统得到开环系统分析根轨迹的方法,接下来我们来进行根轨迹的绘制:①根轨迹的总条数为max(m,n)。②根轨迹总是从极点x向零点o移动。③实轴上的根轨迹为从右向左数奇数个零/极点的左边。④若根为共轭复根,则根是关于实轴对称的。⑤ 当零点m多余极点n时,将有m-n个无穷远指向

2021-06-28 20:04:04 588

原创 自动控制原理<四>

五、PI控制器我们还是先来看看第三节课中所说的一阶系统中仅仅使用比例调节会产生稳态误差,如下Kp<-1时:极点位于右半平面,系统不稳定,也谈不上稳态误差一说。Kp>-1时:极点位于左半平面,系统稳定,存在稳定误差r/(1+Kp)。综上所述,我们怎么去分析一个简单的系统呢?​ ①分析极点所处的位置​ ②若系统稳定,分析系统的误差到目前为止是这样去分析就够了,后面再深入,接下来我们深入分析怎么减小稳态误差。想要减小稳态误差,那么我们就必须对控制器进行新的改造设计,我

2021-06-28 17:22:04 353

原创 自动控制原理<三>

三、P控制器单纯的P控制器,能保证系统处于稳定的状态,但由于系统的特性,会造成系统有一定的稳态误差。稳态误差:系统稳定值和参考值直接的差值。四、终值定理终值定理是将求时域趋于无穷大的值转到求复频域趋于零的值一个方法:通过第二节我们知道一个系统要想稳定就要使极点分布于左半平面,这样的极点才能使传递函数在时域中随时间的增加,传递函数趋向于一个常数(而不是发散于无穷大)。所以要保证终止定理存在,即时域中趋向于无穷大的极限要存在,那么就要保证系统处于一个稳定的系统中。即所有的极点要位于左半平面,

2021-06-28 16:49:00 6218

原创 自动控制原理<二>

二、稳定性分析(stability)在建立一个控制系统的过程中,系统的稳定性是系统的基础,常说判定系统优劣的三要素有稳、准、快。第一要素就是稳,只有在稳定的系统中才有准确性和快速响应的说法。并才能达到的控制的目的以及可以进一步进行优化控制器,可以用下图金字塔进行简单的表现稳定性的重要性:图1:稳定性金字塔那么怎么去判断一个系统的稳定性呢?在控制系统中我们常常把一个系统先转换到用复频域来表示(因为在复频域中可以将积分微分简化为简单的s和1/s),简化了分析。那么在复频域要怎么去判断稳定性?这有是一个问

2021-06-28 13:35:43 780

原创 自动控制原理<一>

自动控制原理一、开环和闭环控制系统<1>Open Loop System:所谓的开环系统就是输入量能决定输出量的大小,但是反过来输入量却与输出量的大小无关。比如以前使用明火烧水,明火越大,那么水温越高,直到水温达到沸腾的温度为止。但是明火的大小和水温的高低无关。简单的来说就是水温无法通过系统本身趋于任意想要的水温。如下图中上半部分所示是一个开环的烧水系统。<2>Closed Loop System:而闭环系统是设定一个想要的水温(参考值Tr)在开环的基础上,将输出的温度(输出

2021-06-28 12:30:30 2228 1

转载 Vim基本介绍

一、Vim基本介绍        Vim是一个超级超级强大的文本编辑器,它和Emacs是一个数量级。Vim及前身VI,历史悠久(可能比多数读者的年龄更大),经历了几十年的考验和发展。Vim全称叫Vi IMproved. 而vi则是Visual Interface的缩写,他们处理都是ASCII码字符数据;vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac o

2021-06-13 22:52:57 5906

原创 2021-06-13

一、Openmv开发一之LED篇作者:Playcodes时间:2021年6月13日用途:2021年全国大学生电子设计竞赛版权所有,转载附带原有地址​ 用于在开发途中工程量的问题,所以将单独的功能写成模块的形式,最后通过main.py调用即可,由于LED功能实现简单,此文章的主要用途是对openmv中模块调用进行了解1.硬件准备OPENMV4高速内存卡SD_Card(存放代码——离线运行)2.简述OPENMV的两种运行方式2.1 通过OPENMV_IDE在线运行[外链图片转存失败

2021-06-13 15:46:11 137 1

原创 ubantu系统从命令行进入桌面

首先先安装好图形界面然后执行相关命令如下:init 5startxctrl+alt+F7切换界面 Ubuntu下轻松切换GDM, LightDM , KDMsudo dpkg-reconfigure gdm3或者sudo dpkg-reconfigure lightdmUbuntu的recovery模式进入及退出1.启动Ubuntu系统,过程中长按Shift键,进入grub菜单;磁盘修复开机时不要进入任何用户2.按ctrl+alt+F2 进入tty23.输入root用户,密码

2021-06-13 14:11:19 6475

原创 树莓派通过raspi-config启动摄像头时,出错:Your firmwave appears to be out of date (no start_x.elf). Please update

解决方法:1、查看boot分区所在的设备号,设备号可能是:/dev/mmcblk0p1df -h2、将该设备号挂载在/boot上mount /dev/mmcblk0p1 /boot3、完美解决

2021-06-13 11:49:00 845 1

原创 可变参数的使用

可变参数的使用在写C代码的时候,有的时候会想要一个函数可接受变化数目的参数。类似C stdio库中的printf syslog等函数。于是就想着如何像标准库一样实现一些自己的可变参数函数呢?比如printf函数,它还存在一个vprintf版本,定义如下:#include <stdio.h>int printf(const char *format, ...);#include <stdarg.h>int vprintf(const char *format, va_li

2021-05-26 10:13:06 344

原创 最全AD快捷键

AD16 快捷键大全一、总汇原理图快捷键特殊粘贴:EY右对齐:AR左对齐:AL上对齐:AT下对齐:AB对齐方式:AA放大缩小:CTRL+鼠标滑轮左右移动:鼠标右键调节栅栏:GPCB快捷键设置栅格:GG单位切换:Q3D图:32D图:2旋转3D图:V+B跳转到中心点:CTRL+END定位中心:E,F,C选择移动:M板形状:DSD换层:shift+s电源线线宽:15-60mil设置旋转器件的角度:TP复位错误:TM调方格为点:CTRL+G然后点Dots丝印位置

2021-03-23 13:30:19 43734

原创 卡尔曼滤波

KlamanKlaman:卡尔曼滤波器,最优化递归数字处理算法,主要引用与惯性导航,解决不确定性。1.卡尔曼滤波 1证明 1 :当实验次数K非常大的时候,第K次实验对整体平均值影响就不大了。由图中红色方框可知:当K->∞时,两次平均值结果越等。接着将K的倒数作为一个系数(卡尔曼增益/因数)。可得到如下公式:由上式中平均值X,我们可以看出存在一个递归的操作。再接着给出卡尔曼增益一个新的定义,如下:下面对此式子做讨论当上次估计误差很大时,本次测量值的影响非常大

2021-03-02 20:37:39 197

原创 Opencv入门系列十一

Opencv入门系列十一主要内容:摄像头(视频)处理OpenCV提供了cv2.VideoCapture类和cv2.VideoWriter类来支持各种类型的视频文件。常用函数包括初始化、打开、帧捕获、释放、属性设置等,下面对这些函数进行简单的介绍。1.VideoCapture类1.1 构造函数OpenCV为cv2.VideoCapture类提供了构造函数cv2.VideoCapture(),用于打开摄像头并完成摄像头(或者视频)的初始化工作。其语法格式为:● “摄像头ID号”:摄像头的ID号码

2021-02-10 17:30:54 498

原创 Opencv入门系列十

Opencv入门系列十主要内容:直方图直方图:一种通过分析图像灰度值信息来增强图像显示的工具。更直接的说直图是图像内灰度值的统计特性与图像灰度值之间的函数,直方图统计图像内各个灰度级出现的次数。横坐标:图像中各像素点的灰度级[0,255],对应的是8位位图的256个灰度级纵坐标:具有该灰度级(像素值)的像素个数。归一化直方图:纵坐标表示该灰度级出线的概率。在OpenCV中● DIMS:表示在绘制直方图时,收集的参数的数量。一般情况下,直方图中收集的数据只有一种,就是灰度级。

2021-02-09 17:03:05 289

原创 Opencv入门系列九

Opencv入门系列九主要内容:图像金字塔是同一图像不同分辨率的子图集合,是通过对原图像不断地向下采样而产生的,即由高分辨率的图像产生低分辨率的近似图像。高斯金字塔拉普拉斯金字塔图像金字塔是每上一层都是经过下层的一次高斯滤波和一次采样生成。可得如下图的图像金字塔:通常情况下,每向上移动一级,图像的宽和高都降低为原来的二分之一。1.高斯金字塔下面是一种简单的向上采样形式,如下图:采样采用了高斯核,使原来的像素点周围补零,补的像素点为原来的三倍。在向下采样中,我们需要丢失

2021-02-07 13:59:58 191

原创 Opencv入门系列八

Opencv入门系列八主要内容:边缘检测,在图像处理中将相邻像素点的像素值的差值作为图像的梯度。同时有较大差值的部分也就是图像的边界。此处的算子就是滤波器,用于边缘检测。Sobel算子Scharr算子Laplacian算子1.Sobel 算子Sobel算子:一种离散的微分算子,结合了高斯平滑和微分运算。该算子利用局部差分寻找边缘,计算所得的是一个梯度的近似值。如下图是算子的提现:左图是水平方向的算子,右图是垂直方向的算子。①将水平方向的Sobel算子与原始图像src进行卷积计算,可以

2021-02-04 15:52:23 144

原创 Opencv入门系列七

Opencv入门系列七主要内容:形态学操作通过形态学操作可以提取图形中描述形状的特征信息,在视觉检查,文字识别,医学图像处理等方面有重要作用。腐蚀膨胀开运算闭运算形态学梯度顶帽运算黑帽运算核函数1.腐蚀腐蚀:将图像边界点收缩,在小于一定范围会将像素点消除。可以用来除噪、元素分割等功能。如下图:图中两个相交的圆,通过腐蚀操作成了两个小的圆形。下面以一个例子,简单描述腐蚀的过程,如下图所描述:从图中我们可以看到原图像与核函数。① 找出核函数中心位置。因为核函数比

2021-02-03 15:40:40 540

原创 Opencv入门系列六

Opencv入门系列六主要内容:图像平滑处理:通过特定的操作在保证原图像特征完整的前提下,滤除一些噪音信号,将图像信息相邻像素点差距较大的进行近似处理。这里不同的滤波对应不同取近似值的方法。图像平滑处理对应的是英文Smoothing Images。图像平滑处理通常伴随图像模糊操作,因此图像平滑处理有时也被称为图像模糊处理,图像模糊处理对应的英文是Blurring Images。均值滤波方框滤波高斯滤波中值滤波双边滤波2D卷积1.均值滤波均值滤波:取周围N*N的平均值作为滤波结果的方

2021-02-02 20:07:30 201

using-animated-gif-files-in-circuitpython.pdf

using-animated-gif-files-in-circuitpython.pdf

2023-06-06

STM32与其他外设串口数据帧收发纯C代码详细的使用方式

STM32与其他外设串口数据帧收发纯C代码详细的使用方式

2021-08-18

适用与任何单片机的OLED程序,只需要改脚,使用模拟的方式

适用与任何单片机的OLED程序,只需要改脚,使用模拟的方式

2021-08-18

ENCODER.zip

在TM4C123GXL中的编码器使用和STM32中编码器模式类似,可以直接用到电机编码器上

2021-08-18

MPU6050.zip

本人实测能读取数据,另外还包含了各种外设的使用详情下载可知

2021-08-18

V1.0匿名上位机通讯代码,纯C标准库编写,各平台方便移植.zip

纯C标准库编写,各平台方便移植

2021-08-10

DMP库的MPU6050方便移植到TI的单片机和STM32的单片机,实测,评论区帮解决问题.zip

实测,评论区帮解决问题

2021-08-10

空空如也

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

TA关注的人

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