自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 网络基础知识总结

物理地址又叫mac。我们每一台电脑上面都有一个网卡,这个网卡的编号就是物理地址。注意:每一个网卡的编号都是独一无二的,所以物理地址也就是独一无二的,所以物理地址具有唯一性。

2022-09-05 21:06:03 1781 1

原创 函数传参——一级指针与二级指针

而且,当fun()函数执行完后,栈区中的一级指针就会被释放掉,那么此时我们也就再也无法寻找到这个一级指针指向的堆空间了。,申请一个堆空间,将堆空间的地址交给*s来保存,由上述所知,一级指针*s不是在fun()中,但是我们却可以通过对fun()函数内的二级指针s进行。所以,fun()函数中,s表示的是栈区中的二级指针。而s的解引用*s,则表示的是二级指针指向的一级指针,注意该一级指针是在全局变量区而不是在栈区。二级指针**s保存的是全局变量区中一级指针*s的地址,所以,二级指针变量就。.........

2022-07-28 20:26:46 1299

原创 stm32f103——IIC总线通信与EEPROM

1,IIC是一种简单的双向二线制串行通信的通信方式,SCL(时钟线),SDA(数据线)(可双向传输数据) 2,IIC是飞利浦公司开发总线协议。IIC是高位先行的通信方式(先发送高位) 3,IIC可以实现多主机多从机通信,但是IIC没有片选信号。每一个设备都有唯一的ID,主机通过SDA数据线发送设备的地址来查找从机 4,在IIC总线上必须接两个上拉电阻,用于将总线拉高 5,IIC的SCL线的作用:用于控制SDA线上的数据的有效性----SCL为高电平时,SDA线上的数据有效

2022-07-11 20:41:19 4098 2

原创 stm32F103——ADC与DMA(按键与光敏电阻)

Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 通道选择:1个ADC模块具有多个通道,不同的通道在不同的引脚上。所以,我们要采集哪个引脚上面的模拟量,需要我们去选择对应ADC通道。 采保电容:采样保持电容。当开关闭合的时候,给采保电容进行充电,然后在规定的时间内断开开关,然后将采保电容上面的模拟量电压进行转换

2022-06-27 01:02:02 6476 4

原创 STM32F103——DMA

DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输:在没有CPU的任何干预下,将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?因此:转移数据(

2022-06-23 12:10:33 4648

原创 stm32f103——通用定时器输出PWM

通用定时器 ----输出 1,输出一个PWM 2,检测脉冲宽度 1》PWM---脉冲宽度调制 占空比:高电平占整个周期的百分比 2》PWM作用:调节灯的亮度,声音的大小,速度的快慢----平均电压值 PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号

2022-06-22 17:33:43 10323 4

原创 stm32f103——基本定时器与定时器中断

我们前面已经学过了滴答定时器,那么定时器的原理与它一样,只不过滴答定时器是在内核中的定时器,而定时器是片上外设。 定时器分为:基本定时器和通用定时器。而基本定时器所拥有的功能,通用定时器都有。所以,通用定时器内集成了基本定时器。 定时器作用:产生一个精准的定时 ​​​​​​​​​​​​​​​​​​​​​ 16位预分频器:将输入进来的72Mhz进行预分频,但是它是16位的,所以它的分配系数范围为1~65535。 16位自动重装载累加

2022-06-19 19:54:13 4429

原创 stm32f103——外部中断和事件——检测按键按下点灯

我们先来看中断/事件控制器的内部注意:对某个通道的上升沿和下降沿检测,通过配置上升/下降沿选择寄存器来进行检测哪一种沿。但是,只能在上升沿和下降沿两者中二选一来进行检测。中断/事件寄存器:选择最后输出的是中断还是事件。如果选择的是事件寄存器:路径如图所示: 选择事件寄存器后,路径如图中红色箭头所示,我们由此可以知道事件路径最终输出的是脉冲信号。所以,事件的最终产物是指定频率的脉冲信号。可以输出脉冲信号给外设,使外设做出相应操作。如果选择的是中断寄存器:路径如图所示: 选择中断寄

2022-06-19 18:00:44 4355 1

原创 stm32f103——中断——UART中断服务函数

在程序中,CPU对外界突发事件进行处理的方式又两种:1》轮询系统:(在main中,使用while循环,进行循环判断外界事物是否发生) while(1){ }2》前后台系统:(此时main中的while中的程序是在处理其它事务,当中断来到时,就处理中断服务函数) 轮询系统+中断 在主程序执行的过程中,中断突然发生,此时主程序停止往下执行,并将CPU的当前状态保持在内核栈中(即:现场保护)。然后跳转到中断服务函数的入口,并执行中断服务函

2022-06-13 21:40:16 17431 1

原创 stm32f103——按键检测(轮询方式)

我们下面来讲一讲,GPIO在输入模式下检测按键是否被按下:首先我们来看看按键按下时,K1处电压的变化情况是什么: 我们看到,按键按下时,K1处的电压并不是立马就下降为0v,因为按键有机械的弹性形变,导致按键被按下时,会发生抖动。我们用GPIO来读取K1处的电压是否为0,如果为低电平,则表示按键被按下。被按下后,如果为高电平,则表示按键被抬起来了。 但是,在这个按键抖动的过程中,电平有上升沿也有下降沿,电压有高电平也有低电平。所以,在这一段抖动的部分的时间段内,如果我们用GPIO去

2022-06-09 21:35:26 6480 1

原创 stm32f103——串口UART

为什么这里要加一个二极管? 单片机与外围设备之间的信息交换和传输我们称为通信。过去通信方式有两种:并行通信和串行通信。并行通信:定义:并行通信是指利用多条传输线将一个数据的各位同时传送。传输方式:传输一个字节(8个位)的数据时,并口是将8个位一字排开,分别在8条连接线上同时传输。特点:传输速度块,适用于短距离通信。缺点:虽然,并行通信传输速度快,但是由于,线与线之间存在电磁干扰,会导致数据错误。而且由于线比较多,PCB布线比较麻烦,所以并行通信不常用,而串行通信用得比较广泛。

2022-06-07 19:46:17 6042 1

原创 stm32f103——滴答定时器

定时器的本质就是计数器。我们设置一个定值,然后计数器开始计数,从我们给的定值开始往下一直数,当数到0时,就做相应的动作(也可以不做什么,当把它用作延时计时的时候)。滴答定时器systick是一个内核外设(即:内核自带的) 所以在《STM32F10xxx参考手册中文版.pdf》手册中没有相关描述,我们需要参考内核手册《STM32F10xxx20xxx21xxxL1xxxx Cortex-M3 programming manual.pdf》 Systick是一个24bit的系统定时器(不同的芯片

2022-06-06 21:17:15 8570 6

原创 怎么查看单片机的APB1、APB2总线下的外设有哪些?——3种方式

方式一:查看stm32参考手册的总线架构 方式二:查看stm32固件库手册 方式三:查看源文件函数RCC_APB...

2022-06-06 19:56:40 1094

原创 STM32中 一些类型的别名

typedef signed char int8_t;typedef signed short int int16_t;typedef signed int int32_t;typedef signed __INT64 int64_t; /* exact-width unsigned integer types */typedef unsigned char uint8_t;typedef unsig

2022-06-06 19:55:19 280

原创 stm32f103——时钟树的分析与配置

时钟树是用来对单片机系统和各个外设进行时钟配置的,因为不同的外设,其电路不同,对时钟频率的要求也就不同。所以需要我们对时钟源的频率进行改变,变成外设需要的时钟频率。首先时钟树分为俩部分:左边部分是时钟的来源,右边部分是时钟的去向:各类时钟简括:1.HSE时钟(高速外部时钟):来源为外部晶振,通常速度8Mhz。由RCC_CR时钟控制寄存器中的16:HSEON控制。2.HSI时钟(高速内部时钟):来源为芯片内部,大小为8Mhz,当HSE故障时,系统时钟会自动切换到HSI,知道HSE启动成功,相当于HSE的替补

2022-06-06 11:14:43 4465

原创 STM32外围电路硬件解析

复位 :让MCU回到最开始的状态。并且从头开始,重新执行程序 我们什么时候需要复位? 1.烧录的时候 2.程序跑飞了的时候 3.上电复位(上电的时候需要复位) 复位方式: 1.上电复位: --- 一定要有 MCU的Reset是复位引脚,当这个引脚为低电平时,

2022-06-04 21:33:38 13308

原创 stm32基础介绍

(一)ARM和STM32 1》ARM的含义: 1,是一家公司的名字----生产内核(IP)----专利授权盈利 2,是使用ARM内核的芯片的代称 2》ARM内核的分类 ARM7,ARM9,ARM11 1,Cortex-A 针对计算量比较大,有交互性的界面的领域 ----手机,平板,投影,电视 2,Cortex-R 针对实时性比较高的领域 -----汽车刹车,航空航

2022-06-04 16:45:22 3373

原创 stm32——端口重映射

1、复用功能:片内外设(如:I^2C UART ADC等)是与I/O口共用引出管脚(不同的功能对应同一管脚)stm32所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。2、重映射功能:复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变到其他的引脚上! 如红框中的PD12引脚,它规定这个引脚所占用的复用功能为TIM4_CH1和UART3。 假设现在,PD12

2022-06-01 20:57:19 3586 3

原创 stm32f103 GPIO—— 一灯大师之库函数版

在使用库函数之前,我们先来看GPIO寄存器的结构体 该结构体中的成员,包含了引脚,输出速度,输出模式。我们可以使用这个结构体来对I/O口进行配置。GPIO_InitTypeDef GPIO_InitStruct; //定义一个结构体,用来需要配置的寄存器信息void LED_Config(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO

2022-06-01 19:52:12 1801

原创 GPIO寄存器的地址怎么寻找?

由上图知,GPIOC的地址就是在这个PERIPH_BASE地址的基础上偏移得到得。我们可以一步一步的计算一下GPIOC的地址是多少。0x40000000 + 0x10000 + 0x1000 == 0x4001 1000 我们的计算结果和参考手册上的一样。 这个是GPIO上的各个寄存器,它被装在一个结构体里面。由这张图可知,这也就是为什么GPIO的寄存器仅通过偏移地址就可以能找到它。 CRL寄存器是结构体的第一个变量,所以它的偏移量就为0x00,所以CRL寄存器的地址为:0x4001 1000

2022-05-31 21:24:41 7183

原创 stm32f103 GPIO——一灯大师之I/O口输出模式的寄存器配置

在讲述寄存器配置之前,我们先来看看在不改变其他位的条件下,对某个位的置1和清零。先看口诀: 清零用& (对某一位,进行"与"操作。与0相与,会清零。与1相与,不改变)置1用 | (对某一位,进行"或"操作。与0相或,不改变。与1相或,会置1)例如:二进制:00011100,我想要在不改变其他位的情况下,将第四位清零。因为,清零用&,与0相与,会清零,与1相与,不改变。所以:........................

2022-05-31 20:58:20 3591

原创 GPIO I/O口——八种工作模式(总结)

通用模式:4种输入模式,2种输出模式(此时GPIO受CM3内核控制)复用模式:2种复用模式:推挽式复用功能模式、开漏复用功能模式(此时GPIO受STM32片上外设所控制)一共八种模式4种输入模式:1.浮空输入:浮空输入,就是I/O口在输入模式时,红框中的上/下拉电阻都是断开连接的情况下,stm32外部输入的信号进行读取。经过的路径:外部输入信号------》I/O口 --..................

2022-05-30 19:52:12 8839

原创 数据结构06 ------栈和链栈

栈是线性表的一种特殊的存储结构。它是以先进后出(FILO: first int last out)的方式来存储数据。top为栈顶指针,栈顶指针实际上不是指针,它是用来记录栈顶位置 。但是我们在这里用程序来实现栈,就用一个int类型的变量来记录栈顶位置。实际上,内存中的运行时栈,也有栈指针,只不过这个栈指针是用一个寄存器来记录栈顶位置的。顺序栈的实现/* 栈 入栈 出栈 */#include <stdio.h>#define...

2022-05-23 17:06:42 329

原创 数据结构05 ------线性表(内核链表)

内核链表实际上就是双向循环链表的升级版,因为双向循环链表的数据域与指针域是在同一个结构体中的,数据域与指针域始终是捆绑在一块的。由于不同的项目,数据域的结构可能是不同的,这样的话,由于数据域的不同,所以之前写好的链表操作就不能直接拿来使用,这样就不具备通用性。所以,大佬们就将数据域与指针域给分离出来,然后底层都实现封装好了。不管数据域是什么,我们只对指针域进行操作。这样的话,不管是什么项目,关于链表操作,我们拿内核链表直接用就行了,灰常的方便、通用。双向链表的结构体是这样的:str......

2022-05-23 15:37:58 247

原创 多路复用——select并发服务器

#include <stdio.h>#include <string.h>#include <sys/select.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h> #include <sys/socket.h>#include <arpa/inet.h>#...

2022-05-18 20:51:05 178

原创 网络编程——TCP客户端(发送消息)(线程实现)

#include <stdio.h>#include <sys/types.h> #include <sys/socket.h>#include <stdlib.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>#include <pthread.h>void *readMsg(void *arg);in...

2022-05-18 17:32:46 485

原创 网络编程——TCP并发服务器(线程实现)

#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <pthread.h>#include <stdlib.h>#include <arpa/inet.h>#define PORT 10086 //定义端口号为多少...

2022-05-18 17:05:37 485

原创 Linux 一些查询操作的总结

man手册的使用:如:man scanfman 1 scanfman 2 scanfman 3 scanf如何查看类型的定义?我们可以使用ctags来查询:ctags的安装与使用:(联网条件下)1》安装ctags: sudo apt-get install ctags 2》生成tags cd /usr/include或者 cd /usr/src/linux-hwe-5.4-headers-5.4.0-109/include/ ...

2022-05-16 20:28:35 777

原创 数据结构04 ------线性表(双向链表)

为了弥补单向链表的缺陷:发明出了双向链表双向链表:它有两个指针域,一个指向其前面的节点,另外一个指向其后面的节点双向链表: struct link{ datatype data; //数据域 struct link *prev; //指针域 前面那个节点的地址 struct link *next; //指针域 后面那个节点的地址 };双向链表的实现:实现增 删 改 查...

2022-05-15 22:39:38 195

原创 数据结构03 ------线性表(单向链表)

链表: 只有一个前驱和一个后继,每一个节点通过指针链接 每一个链表都有一个头结点。头结点: 链表的第一个结点,数据域无效。(大家都默认,第一个结点的数据域我们不去使用它,头节点只是代表整个链表的开端)单向链表: 结构体: struct link{ datatype data; //数据域 struct link *next; //指...

2022-05-15 18:09:07 213

原创 数据结构02 ------线性表(顺序表)

线性表:按照顺序存储: 顺序表 按照链式存储: 链表 (单向链表 双向链表 内核链表 )首先,我们来看 顺序表:顺序表:数据只有一个前驱和一个后继,数据紧挨保存。 具体实现: 数组:int arr[100]; 弊端:100个元素,我只初始化了50个,但是遍历的时候,100个...

2022-05-14 22:46:08 257

原创 数据结构01-------数据结构的介绍

什么是数据结构? 在1968年,美国的高纳德教授写了一本名字叫《计算机程序设计艺术》的书,该书较为系统的阐述了数据的逻辑结构和存储结构及其操作,同时也开创了数据结构的课程体系。 随着时代的发展,软件程序越来越复杂,越来越大型。人们越来越重视数据结构,并认为程序 = 数据结构 + 算法 数据结构 = 数据 + 结构,首先,我们来看数据是什么?数据是什么? 数据是将现实中实在的事物,抽象出来的一种东西。如:1个苹果 + 1个苹果 =...

2022-05-14 22:28:50 90

原创 C语言总结1

指针的组合和函数的使用

2022-04-11 19:47:58 493

环境搭建day1.md

环境搭建day1.md

2022-09-19

空空如也

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

TA关注的人

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