- 博客(169)
- 收藏
- 关注
原创 【定时器】寄存器代码示例
学习使用的寄存器:在“GPIO外设”这一章中,我们学习到片上外设的寄存器基本地址都是定义在的文件中。而CPU的内核硬件的寄存器基本地址都是定义在的文件中。如下图所示:创建一个文件夹名10SysTick_Interrupt将寄存器开发模板赋值粘贴到里面。然后在Src文件夹中创建文件,在Inc文件夹中创建文件然后双击Project.uvprojx文件打开工程。①SysTickTimer.c文件的代码如下:②SysTickTimer.h文件的代码如下:③main.c文件的代码如下:1.1.2、系统定时器
2025-04-30 21:37:26
1004
原创 14【模块学习】74HC595:使用学习
在51单片机中IO引脚资源十分的紧缺,所以常常需要使用75HC595芯片进行驱动那些需要占用多个IO引脚的芯片。那么75HC595是是什么喃?74H595是一款串转并移位控制的芯片,通过移位的方式将串行输入的数据变为并行输出的数据。引脚功能VCC供电正极(2v~6v)GND供电负极DS串行数据输入引脚(8位)Q7~Q0并行数据输出引脚(Q7对应数据高位)SHCP移位寄存器时钟输入STCP输出寄存器时钟输入Q7S8位数据串行输出引脚(常用于级联)OE输出使能引脚。
2025-04-27 10:29:53
1128
原创 02、GPIO外设(一):基础知识
下面使用C8T6的引脚来类比ZET6的引脚,ZET6中的特殊功能引脚和C8T6的特殊功能引脚是一样。芯片供电引脚(需要8个引脚),接入外部晶振(需要2个引脚),芯片复位(需要1个引脚),备份区域供电(需要1个引脚),启动BOOT0选择(需要1个引脚)。由于硬件性能有限,让IO引脚输出高电平,则IO引脚并不会立即输出高电平,会有一个缓冲时间(下图是上升时间/下降时间),而输出低电平也是同理。则综上可得:GPIOA管理16个IO引脚,GPIOB管理16个IO引脚,GPIOC管理3个引脚。
2025-04-17 23:21:59
963
原创 01、单片机简介
我叫编程ID单片机(Single-Chip Microcomputer)是一种微型计算机,是一种集成电路芯片。把具有数据处理能力的中央处理器CPU、随机存储器RAM、闪存flash、多种片上外设等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。如下图为STM32F103系列单片机的系统结构图:对F103系列单片机内部结构的简要介绍😀CPU:单片机的核心,用于代码的执行,数据的处理和计算等。
2025-04-17 22:58:50
945
原创 13【模块学习】AT24C02:使用学习
I2C协议是一种同步半双工总线结构通信协议,通常用来在主设备和从设备之间进行通信。所有连接到总线的设备共用这两根线。主设备通过发送从设备的地址来与特定的从设备通信,设备通过各自的唯一地址进行识别。所以I2C可以实现一主多从。I2C总线结构如下图所示:I2C在硬件上的接法如上图所示:主控芯片引出两条线SCL(时钟线)和SDA(数据线),在一条I2C总线上可以接很多I2C设备,我们还在总线上连接一个上拉电阻。为什么需要连接上拉电阻后面讲解。
2025-04-17 17:29:49
859
原创 12【模块学习】DS18B20(二):高级使用
如图:将采样分辨率变为0.5摄氏度时,温度变化0.25℃时就采样不出来。需要改变采样的分辨率,则需要向暂存器的配置寄存器中写入配置参数。向暂存器中写入数据时,是从byte2开始向下写入,
2025-04-15 21:37:56
1024
原创 11【模块学习】DS18B20(一):使用学习
单总线采用单根信号线传输。 这种协议由一个总线主节点、一个或多个从节点组成系统,通过根信号线进行数据的传输。每一个符合单总线协议的从机设备都有一个唯一的地址:8位的家族代码 + 48位的序列号 + 8位的CRC代码。主节点通过64位寻址对各个芯片进行双向通信单总线结构如下图所示:DS18B20 需要严格的单总线协议以确保数据的完整性。协议包括集中单总线信号类型:复位脉冲、存在脉冲、写 0、写 1、读 0 和读 1。除了应答脉冲以外,都由主机发出。并且发送所有的命令和数据都是字节的低位在前。由于单总线是主
2025-04-15 18:21:03
1567
原创 09【模块学习】LCD1602(一):使用学习
LCD1602是一种工业字符型液晶显示屏幕,能够同时显示16×2即32字符(16列2行)。每个字符是由5X8的点阵组成。如下图所示:😀VSS:电源接地引脚😀VDD:电源正极引脚,接+5V😀VO:对比度调节电压😀RS:数据/指令选择引脚。0表示指令,1表示数据😀RW:读/写选择引脚。0表示写,1表示读😀E:模块使能引脚😀D0~D7:数据传输引脚LCD1602将固定的字模数据保存再CGROM中,而LCD1602的CGRAM用于保存用户自定义字模的数据。
2025-04-15 09:48:44
1051
原创 08【基础学习】串口通信(三):收发数据包+数据校验
异或校验:将接收到的数据全部相异或后,取结果的最后一个字节的数据。和校验:将接收到的数据全部相加后,取结果的最后一个字节的数据。
2025-04-14 20:58:38
647
原创 06:高级命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同,如linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。组里面的用户拥有超级用户的权限,只有安装系统时创建的第一个用户添加到了。综上:创建用户的同时,也会自动创建与用户名相同的组和主目录文件夹,组里面,所以后面的用户都没有获取超级用户的权限。组里面,其他后面创建的用户都没有添加到。
2025-02-18 21:48:28
344
原创 02:Linux的网络配置
【注意】桥接模式下:虚拟机会占用同网段的主机号,所以在相同的网段下,除了那几个特殊的主机地址,只能创建252个虚拟机。所以会存在ip不足的情况。由于桥接模式中ip地址比较稀缺,所以一般使用NAT模式。NAT模式就是在真机中虚拟出一个路由器,虚拟机连接着这个虚拟路由器。,桥接模式下,虚拟机的网关和DNS都需要和真机一样才能访问互联网。综上:NAT模式下:虚拟机构成了同一网段,不在和真机同一网段。虚拟机的网络ip和真机的网络ip连接在。阉割版的NAT模式:不能进行上网。
2025-02-17 16:07:58
509
原创 04:Linux文件命令
Linux系统的思想是“一切皆文件”,所以Linux系统把文件分为七类:规则文件(-)、目录文件(d)、管道文件( p)、链接文件(l)、套接字文件(s)、字符设备文件©、块设备文件(b)【注意】软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求),否则软链接文件会报错。
2025-02-15 22:33:49
100
原创 03:Linux文件系统
文件系统的最顶层是由根目录开始的,系统使用“/”来表示根目录,在根目录之下的既可以是目录(目录就相当于 Windows 中的文件夹),也可以是文件,而每一个目录中又可以包含(子)目录或文件。在Linux的系统开发中,一般都是使用的终端Terminal进行控制,也被称为shell终端。该程序能够接收用户输入的shell命令,内核对命令进行解析和处理,处理完毕后内核将结果反馈给用户,所以需要用户掌握对应的shell命令才能控制。如果遇到不会使用的命令,可以通过man手册来获取命令帮助。命令来查看命令的类型。
2025-02-15 10:47:03
224
原创 07【基础学习】串口通信(二):收发数据包
我们使用上位机个单片机发送数据包时,规定包头和包尾,将我们需要发送的数据放在中间,数据的长度我们也可以自己规定。一般情况下HEX数据包我们使用固定长度数据包。而文本数据包使用是可变长度数据包。
2025-02-14 22:59:17
994
2
原创 05【基础学习】定时器生成PWM波
例如:一个脉冲周期为10ms的pwm波形图,第一个周期高电平为7ms(占空比70%);频率为50Hz,则周期T = 20ms,而占空比为70%,则信号的高电平持续时间t = 14ms,信号的低电平持续时间t = 6ms。综上:需要产生700Hz的电平信号,即每隔0.71ms电平翻转一次即可。在700Hz的电平信号下,蜂鸣器发出叮的声响,在500Hz的电平信号下,蜂鸣器发出咚的声响。700Hz的电平信号的周期T ≈ 1.42ms,500Hz的电平信号周期T = 2ms。综上:定时周期越小,误差就越大。
2025-02-11 21:11:01
1051
原创 04【基础学习】定时器
综上:若12T下需要定时1ms(即定时器启动,1ms后定时器溢出标志位置位),那么定时器T0的计数器的初值应该设置为多少喃?1ms = 1000us,即65536 - 1000 = 64536。定时计数器T0的初值应该设置为64536,即定时计时器从64536开始计数。定时器溢出后,计数器从0开始向65535计数。
2025-02-10 23:03:36
1010
1
原创 03【基础学习】按键
STC89C5X 系列单片机提供了 8 个中断请求源,它们分别是:外部中断 0 (INT0)、外部中断 1 (INT1)、外部中断 2 (INT2)、外部中断 3(INT3)、定时器 0 中断、定时器 1 中断、定时器 2 中断、串口(UART)中断。注意:51 系列单片机一定有基本的 5 个中断,但不全有 8 个中断,需要查看芯片手册,通常我们使用的都是基本的 5 个中断:INT0、INT1、定时器 0/1,串口中断。相同一行的矩阵按键的一段连接到相同的一个IO引脚,即2个IO引脚控制一个按键KEY。
2025-02-09 15:23:55
585
原创 02【基础学习】数码管
使用单片机的IO口来控制公共引脚的极性,进而来选择哪一个数码管进行显示数值。如图:数码管分为共阳极数码管和共阴极数码管。通过控制LED来控制数码管的显示。如图:图中由4个静态数码管构成的动态数码管,他们的LED中的小棍都是连接在一起,然后通过引脚引出来的。如图为数码管,数码管是显示器件,用来显示数字或字母的。动态数码管是将多个静态数码管相同的引脚连接在一起,然后引出来。综上:代码验证了他们的LED中的小棍都是连接在一起,然后通过引脚引出来的。编辑应用层代码,使用4位的共阳极的数码管显示整数,小数,负数。
2025-02-07 15:15:51
769
原创 01【基础学习】点亮发光二极管
使用模块化编程,将LED的显示封装为文件函数。使用Proteus搭建一个如下C51的最小系统。只是粗略的延时,下面的代码使用模块化编程。颜色分类:白色、蓝色、绿色、红色、橙色、黄色。导通电压:正向导通电压:1.8V-2.2V。来进行对位操作,可以操作单个引脚。驱动方式:电压正向偏置,电流驱动。
2025-02-07 15:14:50
930
原创 10:预处理
C语言编译器在编译程序之前,会先使用预处理器(预处理器)处理代码,代码经过预处理之后再送入编译器进行编译。预处理器的主要任务包括宏替换、文件包含、条件编译等预处理过程中会执行预处理指令,预处理指令以号开头。
2025-02-01 21:38:22
552
原创 12:Heap代码的分析
若不对齐存储数据,当CPU读取char数据和int数据时,第一次读取:从0x00~0x03,读取到12,20,30,40。第三次读取:从0x04 ~ 0x07,读取到50,然后加上第二次读取的数据,最后作为int类型的数据。若对齐存储数据,当CPU读取char数据和int数据时,第一次读取:从0x00~0x03,读取到12。结构体Node是以4个字节对齐,则m与Node间隔中间添加3个空白字节,Number 也是以4个字节对齐,则n后面添加3个空白字节。计算机读取内存中的数据时是一组一组的读取的。
2025-01-27 21:30:23
1013
原创 04:FreeRTOS链表代码分析
【注意】,若状态链表中存在了3个TCB_t的数据节点,而此时正在管理节点的pxIndex正指向第2个数据节点中的通用节点(即正在执行第2个TASK),则想要插入一个新的数据节点,那在哪里插入喃?综上:状态链表如下图所示:任务控制块为链表中的数据节点,通过通用节点前后连接在一起。,通用节点中的pvOwner保存的数据节点的地址,pxContainer保存的管理节点的地址。综上:由TCB_t的源代码所得:TCB_t的结构体是数据节点,数据节点中存在2个通用节点,在链表的连接中通用节点连接在一起。
2025-01-25 20:49:47
346
原创 02:链表
综上:上面的代码进行了2种类型的链表的创建,添加,删除。可以按照如下的定义数据节点,这样通用节点的地址和数据节点的地址相等。当多定义几个相同类型的节点,然后将他们的地址赋予前面的节点的指针变量,这样就构成一条链表。注意,上面中存在这下面的这一段代码,这段代码是通过通用节点的地址得出数据节点的地址。【注意】:上面的代码中存在这下面的一段代码,这段代码是节点添加到链表的关键。表示需要被删除节点的地址,那怎样表示被删除节点的前面节点的地址喃?表示为地址为0的数据节点中通用节点的地址,也就是通用接地的偏移地址。
2025-01-24 16:28:42
641
原创 28:CAN总线入门一:CAN的基本介绍
CAN总线是一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域。两根通信线(CAN_H、CAN_L),线路少差分信号通信,抗干扰能力强高速CAN(ISO11898):125k~1Mbps,
2025-01-17 19:51:44
1361
原创 09:事件标志组+任务通知
而任务通知是在创建任务的同时就创建好了,位于任务的TCB。当使用直接任务通知时,顾名思义,发送任务直接向接收任务发送通知,而无需中间对象。每个 RTOS 任务都有一个任务通知组,每条通知均独立运行,都有“挂起”或“非挂起”的通知状态,以及一个 32 位通知值。因为按键按下后,发送通知值后将Task2唤醒,由于Task2唤醒后优先级比Task1高,所以会立马抢占Task1的执行。因为按键按下后,发送通知后将Task2唤醒,由于Task2唤醒后优先级比Task1高,所以会立马抢占Task1的执行。
2025-01-16 16:57:57
891
原创 11:中断ISR+任务相关API函数使用
1套是在Task中调用执行,一般在Task中调用执行的API函数参数中都有等待Tick,即若API没有执行成功返回值pdTRUE,则执行API的Task会进行等待(Task变为阻塞态),具体等待多久个Tick与传入的参数有关。而在中断服务函数中调用的API函数末尾带有FromISR。而这些API函数参数里面并未有等待Tick,即不论这些API函数的执行结果是否为pdTRUE,则中断服务函数都不会进行等待。因此,需要更精准的计算出Task的运行时间,则需要一个定时器,且精度至少要大于SysTick的10倍。
2025-01-16 14:25:52
417
原创 10:软件定时器+中断管理
综上:创建出Task1,和软件定时器服务任务后,虽然软件定时器的服务任务优先级大于Task1,但是由于还没有启动定时器服务任务,所以一直执行Task1。当启动后,定时设置的是500Tick,则启动后先将服务任务阻塞500Tick,然后500Tick后恢复,然后去抢占Tick1,执行软件定时器服务任务。比如: BASEPRI设置为0x50(只看高四位,也就是5),代表中断优先级在5 ~ 15内的均可被屏蔽,0~4的中断优先级正常执行。两个定时器每1s,打印一段字符串,当关中断时,停止打印,开中断时持续打印。
2025-01-15 22:44:52
1085
原创 08:互斥量
然后继续执行TaskB,然后被TaskC抢占了,直到TaskC执行完后,再去执行TaskB,直到释放二值信号量,才去执行优先级最高的TaskA。Task3看竞争不过Task2,那么就把优先级给Task1,让Task1的优先级变为3。总的来说:就是由于二值信号量的存在,更高优先级的TaskA和TaskC去竞争抢占时,既然没有竞争过比自己优先级小的TaskC,这种情况就是优先级反转。Task1继承了Task3的优先级,并未被Task2抢占,而是完整的执行到释放信号量,然后去执行Task3,在去执行Task2。
2025-01-14 11:55:55
622
原创 07:信号量
综上:通过二值信号量来表示UART1的使用钥匙,当二值信号量为1时表示UART1使用钥匙还在信号量里面,然后Task将钥匙拿出来去使用UART1(二值信号量为0,其他Task不能使用UART1),然后UART1被使用完后,钥匙返回信号量里面,以便其他Task的使用。综上:二值信号量本质是一个长度为1的队列,但是此队列不能作为Task之间的数据传递。获取信号量,若信号量值为0,则阻塞等待,每调用一次函数,计数值-1。获取信号量,若信号量为0,则阻塞等待,获取成功后写入0。使用二值信号量需要添加如下2个代码;
2025-01-13 16:29:16
568
原创 06:同步与互斥
即Task2的执行是依赖Task1的执行情况的,Task2必须等待Task1执行完毕,才能去执行,这种情况被称为同步。当Task1将数据放入队列里面,队列里面不为空时,将Task2进行唤醒。但是,上面的同步方法存在着一个很大的问题,就是依然会去执行Task2任务,Task2会去和Task1竞争CPU资源,造成了CPU资源的浪费。综上:2个任务都需要使用UART1进行打印输出,当Task1还没有打印完,Task2使用串口打印,最终造成打印出来的数据是混乱的,所以Task1和Task2存在互斥的现象。
2025-01-12 21:02:24
1052
原创 05:任务状态与调度
pxReadyTasksLists[x],其中x = configMAX_PRIORITIES代表任务优先级级数,如果在32位的硬件中,x的取值范围1-32。如图:若任务的优先级为0,则后面链接着空闲任务,若先将任务全部创建好后在启动调度器,则先执行的是Task1;当所有的任务进入阻塞态时,CPU就执行空闲任务函数即,在5ms的阻塞时间,CPU就执行空闲任务,空闲任务的优先级最低。那遍历的周期是多少喃?task3:判断按键按下逻辑,KEY1按下,挂起task1,按下KEY2在任务中恢复task1。
2025-01-11 15:33:01
682
原创 03:FreeRTOS的第一个程序
RTOS学习链接:链接: link①FreeRTOS的官方网站:链接: link,将FreeRTOS源文件下载下来,并解压。②找到如下FreeRTOS开发所需要的文件。③创建一个文件夹名为FreeRTOS,然后在FreeRTOS文件中分别创建source,include,portable三个文件夹④向创建的新文件中添加文件。1、将配置文件FreeRTOSConfig.h添加到include文件夹中2、将核心文件添加到source文件夹中3、将核心文件的头文件添加到include文件夹中
2025-01-08 16:14:11
995
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人