自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32单片机中断概念

在中断嵌套中,高抢占优先级的中断可以打断低优先级的中断,但高相应优先级的中断不能打断低响应优先级的中断(具备相同的抢占优先级时)。中断嵌套:如果一个高优先级的中断发生,他会立即打断正在处理的中断(如果其优先级),并首先处理这个高优先级的中断,这就是所谓的中断嵌套。中断会打断CPU当前正在执行的程序,转而去执行中断服务程序,待中断服务程序执行完毕后,CPU会返回到原来的程序执行点继续执行。抢占优先级:如果一个中断的抢占优先级高于当前正在执行的中断,那么他可以打断当前中断,优先得到执行,数值越小,优先级越高。

2024-10-31 22:25:07 905

原创 STM32 HAL 点灯

这边我们的LED的一段接的是高电平,如若要是LED亮,需要使另外一段为高电平,LED 灯导通,使其点亮。在时钟库函数找到GPIO的时钟打开定义的函数,在这里我们的LED灯接在GPIOB_8上面。高低电平设置,RESET是低电平(为0),SET为高电平。最后,我们可以加上切换函数来实现LED闪烁。当然我们需要在其中加上一个延迟函数才能实现。首先明确我们的LED函数所包含的所有功能。在文件夹中创建一个我们需要的驱动文件。把驱动文件放在我们的项目当中。调用GPIO初始化函数。(可以关闭LED灯)

2024-10-26 21:45:13 544

原创 STM32 HAL库 时钟树的配置

在使用HAL库开发的过程中,必不可少的就是时钟的相关配置,通过STM32CubeMx可以看到,对于单片机来说,(至少在我看来)使用较多的为外部的高速时钟,可以让我们单片机内部的相关外设更加快速的运行。stm32f1xx.h是所有的f1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义。这些函数的配置很好理解,都是围绕着配置外部高速时钟来进行的,我们不需要去配置其他的时钟函数。下面的就是我们要编写的时钟数的函数名称(需要一个变量)上面的函数配置的是外部时钟的开始部分。

2024-10-24 23:54:21 659

原创 STM32 HAL库 工程模板的搭建

真正开发 STM32 项目,就不是简单一两个 .c 和 .h 文件那么简单了,而是有几十个甚至更多的文件构成,通过某些组织形式形成的工程文件。我们先在任意一个位置(比如桌面)创建一个文件夹,命名为 stm32f103c8t6_template ,当然你命为其它名字也可以。创建的工程模板由下面 5 个目录构成:这 5 个目录是做什么用的呢?接下来我们就具体来讲讲这 5 个目录文件到底要放一些什么文件。

2024-10-23 21:23:40 735

原创 I2C以及OLED屏幕的实际应用

仅需两根线多主多从架构7 位或 10 位地址寻址简单灵活起始和停止条件数据传输格式应答信号地址传输数据传输方向传感器连接存储器扩展显示设备控制。

2024-10-04 15:46:42 1617

原创 DTH11温湿度传感器

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

2024-09-25 21:43:08 1291

原创 LCD1602

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

2024-09-24 19:38:41 1346

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

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

2024-09-12 22:54:05 2084 1

原创 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 1953

原创 超声波的应用

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

2024-09-02 16:09:38 747

原创 超声波模块

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

2024-09-01 21:05:00 1919

原创 STM32系统定时器Systick

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

2024-08-27 15:16:20 3778

原创 STM32定时器PWM输出

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

2024-08-25 17:08:43 6515

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

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

2024-08-22 15:56:45 1758

原创 STM32串口通信

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

2024-08-21 17:07:05 1154

原创 STM32外部中断EXIT和NVIC

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

2024-08-20 15:23:35 830

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

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

2024-08-19 22:30:08 852

原创 STM32按键输入

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

2024-08-19 15:10:41 820

原创 STM32的蜂鸣器

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

2024-08-18 16:06:56 540

原创 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 1896

原创 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 1213

原创 STM32初识

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

2024-08-16 15:48:46 645

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

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

2024-08-14 13:32:08 665

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

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

2024-08-13 21:43:47 1387

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

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

2024-08-10 15:24:58 822

原创 使用Linux实现FTP云盘1

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

2024-08-09 22:52:27 829

原创 Linux网络编程5

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

2024-08-08 23:30:54 1094 1

原创 Linux中的网络编程4

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

2024-08-07 15:19:04 690

原创 Linux网络编程3

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

2024-08-06 18:02:36 856 1

原创 Linux网络编程2

顺序图。

2024-08-05 22:54:32 1089

原创 Linux网络通信

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

2024-08-04 16:34:00 1537

原创 Linux中的线程3

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

2024-08-03 23:28:16 1410

原创 Linux线程2

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

2024-08-02 22:18:55 1034

原创 Linux线程1

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

2024-08-01 22:37:35 1109

原创 Linux中进程通信之信号

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

2024-07-30 23:46:40 1111

原创 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 1190

原创 Linux中进程之间的通信

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

2024-07-28 22:34:04 1373

原创 Linux中的进程2

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

2024-07-27 20:32:06 1245

原创 Linux中的进程1

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

2024-07-26 16:07:39 808

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

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

2024-07-25 22:47:18 821

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

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

2024-09-02

空空如也

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

TA关注的人

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