自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 IAP升级——LWIP+FreeRTOS

最近在写项目的时候学到了有关IAP这方面的知识,所以决定分享出来。我的开发环境是STM32H743+STM32CudeIDE网上也有很多关于IAP的知识,我也找了很多,也踩了很多的坑。IAP是什么我先来说说什么是IAP以及问什么要用IAP。IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。对我来说,我需要使用IAP实现无线

2022-03-05 09:51:31 1962 1

原创 STM32代码灵异事件——自动清零的变量

声明:这个专栏专门用来记录我遇到的一些比较奇怪的事情,欢迎大家一起讨论!今天在调试代码的时候遇到了一件特别诡异的事情,有一个会自动清零的变量!废话不多说直接看图!我在user_tcoecho.c文件中定义了一个全局的结构体变量tIAP_Updata,并在user_tcoecho.h文件中对外声明了这个变量。好的,现在看看是发生了什么问题。我在在调试过程中将tIAP_Updata.BootOnlineFlag赋值为1,然后我点击了继续运行!接着我就惊奇的发现tIAP_Updata.BootOnli

2022-03-02 16:34:10 2196

原创 FreeRTOS学习第三篇——FreeRTOS任务创建(下)

声明:本文为博主的学习篇章,欢迎大家指错,共同学习在解决一下上篇遗留下来的问题之前,还得提前做些功课,了解一些FreeRTOS的全局变量。PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];/* 按照优先级排序的就绪任务列表 */PRIVILEGED_DATA static List_t xDelayedTaskList1; /* 延时任务列表 */PRIVILEGED_DATA static Li

2022-02-28 09:48:19 838

原创 FreeRTOS学习第二篇——FreeRTOS任务创建(上)

声明:本文为博主的学习篇章,欢迎大家指错,共同学习在FreeRTOS中最最最主要的部分就是任务,FreeRTOS内部所有的东西基本都是为了任务而存在的。在FreeRTOS中,一共提供了两种创建任务的形式:动态创建和静态创建。让我先来看看创建任务的声明/* 动态创建 */#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, /* 任务函数入口 */

2022-02-26 11:33:02 7860

原创 FreeRTOS学习第一篇——FreeRTOS的列表和列表项

声明:本文为博主的学习篇章,欢迎大家指错,共同学习在FreeRTOS中最最最主要的部分就是任务,而任务创建的过程中会遇到有关于列表和列表项的问题,所有我首先要解决的就是列表和列表项的问题。FreeRTOS中使用指针指向列表项。一个列表可能包含多个列表项,并且每个列表项都有一个指针指向列表。具体是什么样子如下图:在FreeRTOS中的列表项有两张形式:xLIST_ITEM和xMINI_LIST_ITEM。xMINI_LIST_ITEM是xLIST_ITEM的迷你版。struct xLIST_ITEM

2022-02-25 14:37:32 1192

原创 Linux学习笔记——pstree命令未找到

有些Linux安装的时候默认不安装pstree命令,需要手动安装。yum -y install psmisc安装了就可以了。

2020-08-14 15:27:52 790

原创 Linux学习笔记——软件安装(源码包篇)

准备工作Linux下的绝大多数源码包都是用C语言编写的,还有少部分是用C++等其他程序语言编写的。所以,要想安装源码包,就必须安装这些程序语言的编译器,尤其是C语言的编译器gcc(可以使用yum在线安装)。首先检查一下gcc是否已经安装:我这里已经安装好了。有了编译器,还需要考虑一个问题:源码包软件内的源码文件成百上千个,而且这些文件之间都是有联系的,编译时有先后顺序。这时我们就需要make命令来帮助我们完成编译,所以make也是必须安装的。检查一下make是否安装:安装我这里以安装apache

2020-08-10 09:36:50 231

原创 Linux学习笔记——基本权限的解析

刚学习Linux的我认为权限挺好分辨的,不就是读写和执行吗。后来发现这里面还是有很多我不理解的知识的。在说明权限之前,要先了解Linux的ext文件系统。在ext文件系统中,我们格式化的同时会把分区大体分成两类:一部分是占用空间较小,用于保存inode信息的;另一部分是占了大部分空间的block(数据块),用于保存文件中的实际数据。在Linux中inode的大小默认是128Byte,用于记录文件的权限(r、w、x)、文件的所有者和属性、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(

2020-08-05 16:33:06 161

原创 Linux学习笔记——软链接和硬链接的分析

在学习链接这部分知识的时候,我遇到了很多的疑问,身边也没有大神帮我解答,只能凭借自己的理解来学下去,今天再看这部分知识的时候发现了很多被我落下的东西。硬链接:硬链接的特点:创建硬链接会增加额外的记录项以引用文件对应用于同一文件系统上的一个物理文件每个目录引用相同的inode号创建时链接数递增删除文件时,递减链接数,当链接数为0时,该文件已被删除硬链接的建立是不能越驱动器或分区的语法为:ln filename linkname软链接:软链接的特点:与硬链接最大的不同就是,软链

2020-08-04 15:31:51 220

原创 Linux学习笔记——软件安装(rpm包篇)

软件包分类源码包(脚本安装包)优点:开源,有足够的能力的人可以修改源代码 。可以自由选择所需的功能 。软件是编译安装,所以软件会更加适合自己的系统,也会更加稳定,效率更高 。卸载方便。缺点:安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误。编译过程时间较长,安装比二进制安装时间长 。因为是编译安装,安装过程中一旦报错新手很难解决。二进制包(RPM包、系统默认包)优点:包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载 。

2020-08-02 16:19:07 306

原创 Linux学习笔记——Centos7永久修改IP

通过修改配置文件来修改IP。1、vi /etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=dhcpDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stabl

2020-07-25 15:32:55 312

原创 Linux学习笔记——Vim

Vim常用操作Vim使用技巧

2020-07-22 09:12:18 163

原创 Liunx学习笔记——关机重启命令

shutdown -h 20:30表示20:30定时关机。shutdown -r 20:30表示20:30定时重启。NFS服务:网上文件共享服务。这些在/etc/inittab文件里面有说明。

2020-07-21 20:12:46 149

原创 Linux学习笔记——文件搜索命令

文件搜索命令findfind搜索指令是最大的搜索指令,常常会占用大量的资源。find指令也可以进行模糊搜索,如:find /etc -name init* (只有含有init的文件都会被找到。)也可以:find /etc -name init(init开头的文件才会被找到。)也可以:find /etc -name init???(init开头,后面接三个字符的文件才会被找到。)其中*表示任意字符,?表示单个字符,可以放前面也可以放后面,根据我们的需要。fine / -size +204800

2020-07-19 21:24:42 237

原创 Linux学习笔记——权限管理命令

权限管理命令chmod只有文件的所有者和root用户才能更改文件的权限。例如:chmod g+w,o-r /tmp/math一般很少用这种方式来更改文件权限,常用权限的数字来表示:例如:chmod 640 /tmp/mathchmod -p 640 /tmp/math 此时math目录下所有文件的权限都改成了640,-p为递归修改。对于目录下的文件,即使用户对该文件没有任何权限,但如果其目录具有w权限,用户也可以删除该文件。其他权限管理命令useradd 【用户名】:添加新用户。gr

2020-07-18 16:31:18 530

原创 Linux学习笔记——部分常用指令

命令格式与目录处理命令ls命令格式:命令 【-选项】 【参数】例:ls -la /etc1、个别命令使用不遵循此格式2、当有多个选项时,可以连在一起写3、简化选项和完整选项:-a等于- -all另外还有-h:- -human-d:查看目录本身,而不展开目录。-i:查看文件的索引号。在Linux中以.开头的文件是隐藏文件,可以通过改名将文件设为隐藏文件。目录处理命令Ctrl+c终止本次命令,Ctrl+l清屏。文件处理命令/+关键字可以在文件中搜索关键字。如:/LinkT

2020-07-18 15:22:03 136

原创 Linux学习笔记——小知识

Linux不靠扩展名区分文件类型Linux跟windows不同,它不依靠扩展名来区分文件的类型。Linux是依靠文件的权限来区分文件的,但是有一部分的文件会加后缀名,主要是为了增加它的可读性,便于用户清除明白它的类型。压缩包:" *.gz"、" *.bz2"、" *.tar.bz2"、" *.tgz"等。二进制软件包:" *.rpm"网页文件:" *.html"、" *.php"脚本文件:" *.sh"配置文件:" *.conf"Linux虽然有命令确定文件的类型,但是并不直观。Window

2020-07-17 07:41:59 116

原创 stm32笔记——移植uos后出现打印浮点型变量错误的问题

最近再看UOSIII的文档,学习UOSIII。在实操的时候出现了打印浮点型变量错误的问题,在网上找了一下发现这是个常见的问题,所以在这里记录一下这个问题,方便日后的开发。查阅后发现原来是我定义的堆栈没有八字节对齐,在裸机的时候系统默认的堆字节就是八字节对齐的,但UOCIII的用户堆栈并不是这样的。所以这里需要手动的设置它为八字节对齐。一开始我对任务堆栈的定义是这样的: #define TASK1_STK_SIZE 128 OS_STK TASK1_TASK_STK[TASK1_STK_SIZE];

2020-07-10 10:11:21 299

原创 STM32输入捕获(库函数版本)

什么是输入捕获?顾名思义,输入捕获就是对输入的信号进行捕获,可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。STM32 的输入捕获,简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。STM32输入捕获之前讲过定时器的配置,这里就不

2020-07-08 16:05:44 1551

原创 STM32输出PWM信号(库函数版本)

什么是PWM信号?官方解释:PWM信号一般指脉冲宽度调制。脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。相信大家都会很努力的看完它吧。作为一个学习糟糕的大学生,我一般都不看这种官方的解释,我认为的PWM信号就是一种占空比可调的方波,什么又是占空比呢?不知道就去百度吧。懒得百度我也

2020-07-08 11:28:52 5306 2

原创 PID算法的原理和实现(二)

上一节我们主要讲了什么是PID,以及PID的主要原理,这一章我们来讲PID的分类以及实现。PID的分类PID在离散域中主要分为两大类:位置式PID和增量式PID。二者之间有什么区别和联系呢?听我细细道来。位置式PID位置式的PID的表达公式为:KP:比例系数ek:第k次的输入量与目标量的偏差值KI:积分系数KI后面的乘数:每次的偏差值的累加KD:微分系数ek - ek-1:第k次的偏差值和第k-1次的偏差值的差值位置式PID的优点就是能够记录一开始到现在的偏差值,能够更好的将系统给稳定

2020-07-06 16:46:51 899

原创 PID算法的原理和实现(一)

1、什么是PID?能吃吗?PID是常见的控制算法。当然算法不单单要“吃”,更要进行“消化”。PID中的P就是比例(proportional)、I就是积分(integral)、D是微分(derivative)。其实PID在生活中非常的常见,就好比平衡小车、无人机、一部分的扫地机器人…emmmm再好比骑自行车?总之PID主要就是控制某一个量“保持平衡”的一种算法。我这里举一个常规的例子你大概就能够明白了:我们想煮一壶60℃的水,你会怎么做呢?这个答案不是很简单嘛。就当他低于60℃的时候加热,超过60

2020-07-06 09:53:17 1519

原创 STM32配置定时器(库函数版本)

本文章以STM32F407ZGTx为例:STM32F407一共有14个定时器,其中有两个基本定时器(TIM6和TIM7)、十二个通用定时器(TIM2 ~ TIM5,TIM9 ~ TIM14)、两个高级定时器(TIM1和TIM8)。由于定时器的功能比较繁多和复杂,这里就不介绍这些定时器的功能了。接着我们开始配置我们的定时器,我这里以TIM2为例。首先我们要开启TIM2的时钟一般通用定时器的时钟都在APB1总线上。接着我们对TIM2进行初始化一般的通用定时器都是这样配置,通用定时器的配置主要是对

2020-05-25 23:33:13 2679 2

原创 STM32配置GPIO--外部中断的配置(库函数版本)

本文章以STM32F407ZGTx为例:STM32F407的外部中断有22个:从图中可以看出STM32F407供IO口使用的中断线有16个,但其每个IO口都能够作为外部中断的输入,他是如何做到的呢?从上图我们可以发现STM32F407是通过映射的方式来将16个中断线分配到每一个IO口上,但这样的映射有个限制:一个中断线每次只能连接一个IO口。配置外部中断首先我们要配置对应的IO口,使能IO口的时钟、外部中断的时钟,设置IO口与外部中断线的映射关系。(这里以PA0为例)一般开启时钟的函数都在

2020-05-24 23:04:12 4144

原创 STM32配置GPIO--串口的配置(库函数版本)

本文章以STM32F407ZGTx为例:1、首先我们需要知道能够作为串口使用的GPIO有哪些:这里以串口一为例:PA9作为TX,PA10作为RX。2、对串口的配置:(1)、首先我们要知道串口的配置过程:GPIO的初始化,串口的初始化,NVIC的初始化。故首先我们要先创建这些初始化必要的结构体:(2)、开启时钟(3)、对GPIO进行配置GPIO的配置主要是对GPIO的初始化,这里使用的是stm32f4xx_gpio.c文件里的GPIO_Init(GPIO_TypeDef* GPIOx, GPIO

2020-05-23 23:38:36 4125 3

原创 C++的编译和执行过程(我是小白,记录学习过程)

编译和执行过程1、编译(预处理->编译->目标文件)形成目标代码/文件。目标代码是编译器的输出结果,常见的扩展名为“.o”或“.obj”。预处理:(将.cpp文件预处理为.ii文件)在控制台中输入“g++ -o 文件名.ii -E 文件名.cpp”,即可显示.s文件这一步的过程是将include里头文件引出来。编译:(将.ii文件转成.s文件)(.s文件是汇编文件)在控...

2020-01-10 23:16:18 273

原创 Atom的安装和C\C++开发环境的搭建(我是小白,记录自己的学习)

软件的下载首先是下载Atom编译器,百度一搜一大把。软件的安装傻瓜式安装,直接安装即可。MinGW的下载并配置C++的编译环境官网下载MinGW在MinGW官网中下载“mingw-get-setup.exe”官网传送门:http://www.mingw.org/直接下载即可。安装MinGW下载gcc安装完成后点击“continue”,打开MinGW Installa...

2020-01-10 22:27:53 352

原创 创建并通过中序遍历线索化一颗二叉树

创建并线索化一颗二叉树#include "stdio.h"#include "stdlib.h"typedef char Elemtype ;typedef enum{Link,Thread} PointerTag;typedef struct BiTNode{ Elemtype data; struct BiTNode *lchild; struct BiTNode *rchil...

2019-08-13 22:28:35 314

原创 创建和遍历一颗普通的二叉树

创建和遍历一颗普通的二叉树#include "stdio.h"#include "stdlib.h"typedef char Elemtype ;typedef struct BiTNode{ Elemtype data; struct BiTNode *lchild; struct BiTNode *rchild;}BiTNode,*BiTtree;//前序的方法创建一棵二叉树...

2019-08-12 21:21:24 181

原创 用递归实现汉诺塔

用递归实现汉诺塔#include "stdio.h"void move(int n,char x,char y,char z){ if(n==1){ printf("%c->%c\n",x,z); } else{ move(n-1,x,z,y); printf("%c->%c\n",x,z); move(n-1,y,x,z); }}void main(...

2019-08-05 21:47:48 395

原创 利用递归实现斐波那契数列

利用递归实现斐波那契数列#include "stdio.h"int Fib(int i){ if(i<2) return i=0?0:1; else return Fib(i-2)+Fib(i-1);}int main(){ int i; printf("请输入要实现的递归次数:"); scanf("%d",&i); printf("\n最后的结果为:%d...

2019-08-05 21:17:54 1006

原创 利用栈实现中缀表达式转换成后缀表达式

利用栈实现中缀表达式转换成后缀表达式#include "stdio.h"#include "stdlib.h"#include "math.h"#define OK 1#define ERROR 0#define STACK_INIT_DATA 20#define STACKINCREMENT 10typedef char Elemtype;typedef i...

2019-08-04 16:14:07 532

原创 利用栈实现二进制数转化成八进制数

利用栈实现二进制数转化成八进制数#include “stdio.h”#include “stdlib.h”#include “math.h”#define OK 1#define ERROR 0#define STACK_INIT_DATA 20#define STACKINCREMENT 10typedef char Elemtype;typedef int Stat...

2019-08-03 21:50:49 705

原创 利用栈实现二进制数转化成十进制数

利用栈实现二进制数转化成十进制数#include "stdio.h"#include "stdlib.h"#include "math.h"#define OK 1#define ERROR 0#define STACK_INIT_DATA 20#define STACKINCREMENT 10typedef char Elemtype;typedef int St...

2019-08-03 21:02:35 450

超声波模块程序_STM32F103RCT6.zip

HC-SR04超声波模块在STM32F103RCT6上的初始化及使用的代码。从原子哥的代码的基础上修改的。

2020-07-07

空空如也

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

TA关注的人

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