自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DTH11温湿度传感器

DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。DHT11 是一款温湿度复合传感器,常用于单片机系统中进行环境温湿度的测量。

2024-09-25 21:43:08 781

原创 LCD1602

D:控制整体显示的开与关,高电平表示开显示,低电平表示关显 示. C:控制光标的开与关,高电平表示有光标,低电平表示无光标. B:控制光 标是否闪烁,高电平闪烁,低电平不闪烁。第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度 过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。BF:为忙标志位,高电平表示忙,此时模块不能接收命令或 者数据,如果为低电平表示不忙。

2024-09-24 19:38:41 824

原创 单片机寄存器相关知识及应用(51单片机)

如果同一优先级的多个中断源同时请求中断,CPU 将按照自然优先级顺序进行响应,其顺序为外部中断 0、定时器 / 计数器 0 溢出中断、外部中断 1、定时器 / 计数器 1 溢出中断、串行口中断。综上所述,这个定时器初始化函数的作用是配置定时器 0 为 16 位定时器模式,设置初始计数值,允许中断并启动定时器,同时将定时器 0 的中断设置为高优先级。2.在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式。

2024-09-12 22:54:05 844

原创 STM32f10x手册的略读

STM32F10xxx 参考手册》是意法半导体(ST)公司推出的 STM32F10xxx 微控制器的技术参考手册,主要介绍了该系列微控制器的存储器和总线架构、CRC 计算单元、电源控制、备份寄存器、复位和时钟控制、通用和复用功能 I/O、中断和事件等内容。高级控制定时器(TIM1 和 TIM8)基本定时器(TIM6 和 TIM7)USB 全速设备接口(USB)SDIO 接口(SDIO)控制器局域网(bxCAN)DMA 控制器(DMA)通用定时器(TIMx)串行外设接口(SPI)9.4 中断请求映像。

2024-09-04 21:13:07 1665

原创 超声波的应用

配置 TIM4 的时钟分割、计数模式、周期和预分频值,并使能 TIM4 的更新中断。然后根据距离判断条件,调整电机的 PWM 值。调用 HC_SR04Config 函数配置超声波传感器,usart_init 函数初始化串口通信,motor_config 函数配置电机。主函数部分: 首先定义了一个用于调整电机 PWM 值的变量 pwmval 和用于存储超声波测量距离的变量 length。TIM4_IRQHandler 是 TIM4 的中断服务函数,当 TIM4 发生更新中断时,清除中断标志并增加毫秒计数。

2024-09-02 16:09:38 700

原创 超声波模块

HCSR04超声波模块是一种常用的测距模块,它通过检测超声波发射后遇到障碍物所反射的回波,从而测量出与障碍物之间的距离。

2024-09-01 21:05:00 808

原创 STM32系统定时器Systick

SysTick 控制和状态寄存器(CTRL):用于配置SysTick定时器的工作模式、使能定时器和中断,并提供定时器当前状态的查询功能。SysTick 重装载值寄存器(LOAD):用于设置SysTick定时器的重装载值,即定时器计数器的初始值。SysTick 当前值寄存器(VAL):用于读取或写入当前SysTick定时器的计数器值。在读取时返回当前计数器的剩余值,在写入时清零计数器的值。SysTick 校准值寄存器(CALIB)

2024-08-27 15:16:20 1739

原创 STM32定时器PWM输出

STM32定时器PWM(脉冲宽度调制)输出原理,在使用固件库时,主要涉及定时器的配置以及PWM信号的生成。

2024-08-25 17:08:43 2185

原创 STM32通用定时器,端口复用和重映射

STM32的每个端口引脚通常具有多种功能,例如GPIO(通用输入输出)、USART(通用同步异步收发传输器)、TIM(定时器)等。端口复用是指将一个引脚从默认的GPIO功能切换到其他功能,如USART的TX(发送)或RX(接收)等。

2024-08-22 15:56:45 996

原创 STM32串口通信

STM32串口通信是一种在STM32微控制器中常用的数据传输方式,它允许设备之间通过串行接口进行数据交换。

2024-08-21 17:07:05 995

原创 STM32外部中断EXIT和NVIC

STM32微控制器(MCU)系列中的外部中断/事件控制器(EXTI)和嵌套向量中断控制器(NVIC)是两个关键的硬件组件,它们协同工作以处理外部事件和中断。下面将分别介绍这两个组件及其在STM32中的作用。

2024-08-20 15:23:35 721

原创 STM32之继电器与震动传感器的使用,实现震动灯

综上所述,继电器在STM32外设中扮演着重要的角色,通过其独特的电气特性和控制方式,为STM32提供了强大的电路控制能力和安全保护功能。在实际应用中,我们可以根据具体需求选择合适的继电器类型和连接方式,以实现所需的电路控制功能。继电器作为一种电控制器件,其主要作用是通过小电流控制大电流的通断,实现电路的自动控制和保护。在这里我用GPIO C13 作为震动传感器的引脚,GPIO A3 作为LED灯的控制引脚,当受到震动时,DO返回信号单片机,单片机执行并向发出低电平使灯亮(闪烁一秒)。

2024-08-19 22:30:08 709

原创 STM32按键输入

函数读取GPIOA的第0号引脚(SW2)和GPIOC的第13号引脚(SW3)的状态。如果检测到引脚为低电平(即按键被按下),则执行相应的LED控制操作。语句是独立的,LED的状态可能会变得不确定,因为两个条件都可能为真,并且它们的执行顺序是未定义的。编写(配置)按键相关函数,在这里我们可以同时初始化两个时钟GPIOA,GPIOC(都在APB2总线下)。这四个函数的主要区别在于它们访问的GPIO端口数据的上下文(输入或输出)和粒度(单个位或整个端口)。实现按下SW2,LED灯亮,按下SW3,LED灯灭。

2024-08-19 15:10:41 707

原创 STM32的蜂鸣器

无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变。(可改变 频率来改变音色)。有源蜂鸣器:内部有震荡源,只要通电即可自动发出固定频率的声音。(频率固定无 法控制音色)。当然,我们也可以增加延迟函数隔一段时间响一次,并且加入LED灯实现同步。因为我的蜂鸣器出厂设置为低电平触发,所以设置GPIO A3输出低电平。从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有黑胶密封。无源蜂鸣器底部可以看到电路板,两种蜂鸣器都标注有正负极。蜂鸣器分为有源蜂鸣器和无源蜂鸣器。下面通过GPIO控制蜂鸣器。

2024-08-18 16:06:56 417

原创 STM32之点亮LED灯

因为我们是使用GPIO进行输出所以先打开stm32f103x_gpio.h的库文件,里面有许多的定义的函数所需的结构体,再打开一些时钟所需的库函数stm32f10x_rcc.h,stm32f10x_rcc.c,stm32f10x.h。如下图,上面一行是输出高电平,下面一行是输出低电平,我们要使LED灯熄灭,可以在PA1输出高电平,使两端无法流通,就可以实现熄灭。led_initstruct是我们自己定义的结构体名称,通过这个就可以配置相关的引脚,输出速度,输出模式。初始化GPIO外设时钟(被调用的函数)

2024-08-17 21:52:51 829

原创 STM32的GPIO

STM32的GPIO(General Purpose Input/Output,通用输入输出)引脚支持多种工作模式,这些模式通过配置GPIOx_MODER(模式寄存器)、GPIOx_OTYPER(输出类型寄存器)、GPIOx_OSPEEDR(输出速度寄存器)、GPIOx_PUPDR(上下拉/复用功能选择寄存器)、以及GPIOx_AFRx(复用功能选择寄存器,对于复用功能而言)等寄存器来实现。请注意,不是所有的STM32系列都严格遵循上述八种模式分类,但大多数STM32的GPIO都支持类似的功能。

2024-08-17 13:56:52 1141

原创 STM32初识

如果出现ST-LINK USB communication error可使用下面链接的方法解决。创建工程方式有两种:使用Keil创建工程模板、 使用STM32CubeMX。这边软件使用的是Keil5,主要介绍一下使用的一些注意事项。start_up启动文件。CMSIS 内核配置相关文件。START_UP 启动文件。Libraries固件库。FWLIB 外设相关配置。Project工程文件。在文件管理器中查看,如下图即为安装成功。我们可以使用Flymcu进行串口烧录。

2024-08-16 15:48:46 616

原创 LinuxAPI数据库实现增删改查

注:回调函数是一种编程模式,在这种模式中,一个函数(我们称之为“回调函数”)作为参数传递给另一个函数(通常是库函数或系统函数)。当后者(接收函数)在某个特定的时刻(比如完成某个任务、遇到某个条件、或者需要外部数据输入时)需要执行一些操作时,它会调用这个回调函数。这种机制允许用户自定义处理逻辑,并将其无缝地集成到现有的系统或库中,而无需修改这些系统或库的源代码。f_name:包含每个字段名称的指针数组 返回值,成功返回0,失败返回-1。para:传递给回调函数的参数。nrow:满足条件的记录的数目。

2024-08-14 13:32:08 635

原创 基于嵌入式Linux的数据库

数据库是在数据库管理系统和控制之下,存放在存储 介质上的数据集合。

2024-08-13 21:43:47 1195

原创 使用Linux实现FTP云盘项目2

lls———查看客户端自己的文件。lcd———切换客户端自己的目录。ls———查看服务端文件。cd———切换服务端目录。put———上传文件。get———下载文件。

2024-08-10 15:24:58 794

原创 使用Linux实现FTP云盘1

FTP(文件传输协议)服务器是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。FTP是File Transfer Protocol(文件传输协议)。程序运行,服务端不断接收客户端指令,服务 端可同时处理多个客户端接入并对指令作出解析,并把执行结果返回给客户端,客户端根据服务端对指令的 解析并把由服务端传递过来的处理信息通过客户端呈现给客户,实现文件的各种操作。

2024-08-09 22:52:27 793

原创 Linux网络编程5

三次握手确保了通信双方都能准备好接收数据,是建立TCP连接的关键过程。四次挥手确保了通信双方都能正常地释放资源,是断开TCP连接的过程。这两个过程共同保证了TCP连接的可靠性和资源的有效利用。

2024-08-08 23:30:54 1065

原创 Linux中的网络编程4

在UDP网络编程中,主要通过UDP套接字(Socket)来实现数据的发送和接收。socketbindsendtorecvfromrecvfrom所需知识:bind:绑定服务器:TCP地址和端口号receivefrom():阻塞等待客户端数据sendto():指定服务器的IP地址和端口号,要发送的数据用途:无连接尽力传输,UDP:是不可靠传输实时的音视频传输,DNS域名解析包。

2024-08-07 15:19:04 677

原创 Linux网络编程3

服务器端:客户端:服务器端:客户机端:需要学习的函数还有 函数用于在套接字上发送数据。它是网络编程中发送数据到对端的主要函数之一。函数原型:返回值:成功时返回发送的字节数(可能小于请求发送的字节数),出错时返回-1并设置errno。 函数用于从套接字接收数据。它是网络编程中接收对端发送数据的主要函数之一。函数原型:返回值:成功时返回接收到的字节数(可能小于请求接收的字节数,例如,当对方发送的数据量小于请求量时),连接被对方正常关闭时返回0,出错时返回-1并设置errno。 函数是UNIX/Linux系统调用

2024-08-06 18:02:36 816

原创 Linux网络编程2

顺序图。

2024-08-05 22:54:32 1067

原创 Linux网络通信

网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层 提供的服务。网络体系结构即指网络的层次结构和每层所使用的协议的集合。两类非常重要的体系结构:OSI和 TCP/IP。OSI模型相关的协议已经很少使用,但模型本身非常通用OSI模型是一个理想化的模型,尚未有完整的实现OSI模型共有七层 二层交换机,三层交换机。

2024-08-04 16:34:00 1473

原创 Linux中的线程3

在Linux操作系统中,死锁(Deadlock)是指两个或多个进程(或线程)在执行过程中,因互相持有对方所需的资源而又都在等待对方释放资源,导致它们都无法继续执行下去的一种状态。这种僵局会浪费系统资源,甚至可能导致系统崩溃。

2024-08-03 23:28:16 1359

原创 Linux线程2

互斥锁实现了“互相排斥”(mutual exclusion)的同步机制,禁止多个进程或线程同时进入受保护的代码区域,即“临界区”(critical section)。在任何时刻,只有一个进程或线程被允许进入这样的保护区。互斥锁相对于信号量来说,语义更加简单轻便,执行速度更快,可扩展性更好,并且其数据结构定义也比信号量小。

2024-08-02 22:18:55 1015

原创 Linux线程1

1.守护进程的特点后台服务进程独立于控制终端周期性执行某任务不受用户登录注销影响 一般采用以d结尾的名字(服务)2 . 进 程 组进程的组长组里边的第 一 进程进 程 组 的ID = = 进 程 中 的 组 长 的ID进 程 中 组 长 的 选 择进 程 中 的 第 一 个 进 程进 程 组ID 的 设 定进 程 组 的ID 就 是 组 长 的 进 程ID3 . 会 话创 建 一 个 会 话 注 意 事 项不能是进程组长创建会话的进程成为新进程组的组长。

2024-08-01 22:37:35 1092

原创 Linux中进程通信之信号

信号通信,其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。关于信号指令的查看:kill -l例如我们之前使用的kill -9 pid用于杀死一个进程使用一个死循环成功发送kill -9指令,杀死该进程。

2024-07-30 23:46:40 935

原创 Linux中的通信2

msgflg可以与IPC_CREAT做或 操作,表示当key所命名的消息队列不存在时创建一个消息队列,如果key所命名的消息队列存在时,IPC_CREAT标志会被 忽略,而只返回一个标识符。我们写入的消息ID是8,但是会发现我们再次查看这个消息的时候,内容的字节数变成了0,这是因为,我们写入了12个字节,然后又读取了12个字节,里面的内容被完全取走了,所以在查看的时候变为0(只是说那个8的节点还存在)type<0 返回队列中消息类型值小于或等于type绝对值的消息,如果有多个,则取类型值最小的消息。

2024-07-29 23:53:25 1119

原创 Linux中进程之间的通信

当我们分两个终端执行的时候,我们先执行read命令,但是管道文件里面没有,会等待管道里面写入东西,我们在另外一个终端执行write命令时,会把数据写入到管道文件中,同时read命令也会读取到这个数据并显示。函数时,它会在系统中分配两个新的文件描述符用于管道的读端和写端,这两个是连续的,当前可用的最小文件描述符。值得注意的是,在调用dup2之前,若newfd已经打开,系统会先关闭newfd指向的文件,以确保不会出现悬挂指针的情况。当dup2成功执行时,它会返回新的文件描述符编号,即newfd的值;

2024-07-28 22:34:04 1347

原创 Linux中的进程2

使用fork函数之后,生成的父进程和子进程两个地址空间区完全相同,后续可以进行不同操作各个进程的地址空间中的数据是完全独立的对于同一个变量,我们是有一个物理地址存放的,在的时候数据是子进程和父进程共享的,在的时候分别在物理地址上拷贝一份变量进行单独读写父子进程之间通过全局变量进行通信通过代码验证,可知父子进程之间不能通过全局变量进行通信。

2024-07-27 20:32:06 1225

原创 Linux中的进程1

程序:二进制文件进程:启动的程序所有的数据都在内存中需要占据更多的系统资源cpu,物理内存(RAM)

2024-07-26 16:07:39 775

原创 Linux的静态库和动态库的制作

Linux操作系统支持的函数库分为:静态库,libxxx.a,在编译时就将库编译进可执行程序中。优点:程序的运行环境中动态库,又称共享库,libxxx.so,在运行时将优点:可执行程序小。查看函数库目录:/lib /usr/lib。下面是内置的一些库函数,以结尾的就是静态库,以结尾的就是动态库。

2024-07-25 22:47:18 784

原创 Linux中的三类读写函数

Linux标准文件描述符我们使用printf和write都可以输出正常的字符串当我们给程序加上一条死循环的程序,就会发现用printf()不能继续执行,而用write可以继续执行。这个原因就是因为缓存问题,见下文缓存的概念1.我们的程序中的缓存,就是你想从内核读写的缓存(数组)----用户空间的缓存2.每打开一个文件,内核在内核空间中也会开辟一块缓存,这个叫内核空间的缓存文件IO中的即是将用户空间中的缓存到内核空间的缓存中。文件IO中的即是将内核空间的缓存到用户空间中的缓存中。

2024-07-25 16:15:22 1262

原创 Linux中的fopen,fclose,fread,fwrite,fseek相关函数的知识点

这几个函数都是标准的c库函数,在man 2中查找不到,所以我们可以利用man 手册直接查找对应的open,close,write,fread都是Linux系统内核调用可移植性:fopen 强过于 open ...fopen 在用户态是缓存的open 在用户态是没有缓存的。

2024-07-24 14:13:58 1068

原创 Linux文件与相关函数的知识点3

这里边主要避免了内存被浪费只用了128,增加了数组的更新次数(每次读完数组里面的值之后立刻清空)(memeset(通过优化的方式快速填充内存块)),增加了文件打开判断的提醒,如果没有满足128字节跳出后继续写入。C语言规定了main函数的参数只能有两个,一个是argc,一个是argv并且,argc只能是整数,第二个必须是指向字符 串的指针数组。argc: 参数表示命令行中参数的个数(注意 文本名本身也是一个参数),rgc的值是在输入命令行时由系统按 实际参数的个数自动赋予的。编译代码,传入两个文件的数据。

2024-07-23 23:58:15 637

原创 Linux文件与相关函数的知识点2

count: 读入数据的个数 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read。每次执行之后都会再次把光标移到最后面重新写入,导致偏移量相对应的变化,从-1到9移动了11个单位。write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。(当我们进入到一个文件时,系统会自动将光标放在第一行第一列,所以才运用到偏移量)当使用SEEK_END和SEEK_CUR时,offset的值允许负值的出现。*buf: 写入的数据的首地址。

2024-07-23 15:38:51 568

原创 Linux文件与相关函数的知识点1

如上图,从左往右看,从第二位起,每三个分成一类,第一类表示此电脑用户,第二类表示组用户,第三类表示其他用户,每三个里面都表示着各种权限,r是可读w是可写x是可执行,所以能够轻易地得到此文件不同用户对他的权限,如第一行的文件就是此电脑用户可读可写可执行,组用户可读不可写可执行,以此类推。0x00002000 O_CREAT 表示如果指定文件不存在,则创建这个文件 0x0000 0100 O_EXCL 表示如果要创建的文件已存在,则出错,同时返回-1,并且修改errno 的值。

2024-07-22 22:46:35 1299

超声波传感器判断距离操作舵机(智能垃圾桶原理)

超声波传感器判断距离操作舵机(智能垃圾桶原理)

2024-09-02

空空如也

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

TA关注的人

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