自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于单片机的ELF可执行文件加载以及Bootloader程序实现程序切换

BootLoader就是单片机启动时候运行的一段小程序,这段程序负责单片机固件的更新,也就是单片机选择性的自己给自己下程序。可以更新,也可以不更新,更新的话,BootLoader更新完程序后,跳转到新程序运行;不更新的话,BootLoader直接跳转到原来的程序去运行。2.BootLoader更新完程序后并不擦除自己,下次启动后依然先运行BootLoader程序,又可以选择性的更新或者不更新程序,所以BootLoader就是用来管理单片机程序的更新。

2024-08-02 10:43:18 970

原创 在单片机上实现Ymodem协议接收文件的实现

Y-Modem 是一种串行文件传输协议,用于通过串口进行文件传输。它是由 Chuck Forsberg 开发的,继承了 X-Modem 协议的特性,并在此基础上进行了改进。以下是对 Y-Modem 协议的基本介绍以及其相对于其他协议(如 X-Modem)的优势:(1)块大小更大:Y-Modem 的默认块大小为 1024 字节,是 X-Modem 128 字节块大小的八倍。这意味着在相同的条件下,Y-Modem 可以比 X-Modem 更快地传输数据,尤其是对于大文件而言,效率优势更加明显;(2)

2024-08-02 10:06:52 1280

原创 如何在单片机外部Flash存储器上部署高效文件系统:从原理到实现

LittleFS 由ARM官方发布,ARM mbedOS的官方推荐文件系统,具有轻量级,掉电安全的特性。掉电恢复,在写入时即使复位或者掉电也可以恢复到上一个正确的状态。擦写均衡,有效延长flash的使用寿命。例如W25QXX系列的spi接口的flash,擦写次数大概在10万次,如果是操作flash比较频繁那么这10万次很快就会到达上限从而导致芯片废掉。有限的RAM/ROM,相对于FATFS节省ROM和RAM空间缺点:不兼容windows。

2024-07-15 15:50:47 1005 1

原创 SPI协议——对外部SPI操作(跨页读写)

这样设计代码可以随意选择自己是否忽略发送/接受的数据。

2024-07-09 09:17:32 158

原创 SPI协议——对外部SPI Flash操作

一扇区是4KB,划分成16份每份256字节这就是页,而且擦除数据也只能按照扇区或者块来擦除,下图的00FF00H-00FFFFH刚好256字节,000000h-0000ff之间也是256字节。2. 每个数据只能由1改写为0,不能由0改写为1是因为FLASH芯片自身的限制决定,它没有完全任意修改的能力,所以芯片内部无数据的时候默认为0XFF,表示为空。进行读操作时,直接调用读取操作时序,无需使能,但是别忘了拉低电平,没有页的限制,读取之后也不会进入到忙状态,但是不能在忙状态时读取数据;

2024-06-20 20:41:51 674

原创 SPI协议——读取外部SPI Flash ID

读取SPI Flash的芯片ID

2024-06-19 21:10:32 1457

原创 SPI协议硬件回环测试

在单片机上对SPI协议进行回环通信

2024-06-18 11:29:29 370

原创 单片机通信协议——SPI协议

SPI(Serial Peripheral Interface)协议,顾名思义,就是外围设备接口。是Motorola公司1979年推出的一种高速全双工同步串行通信协议,他在芯片上只占有四根线,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

2024-06-14 17:26:04 1165

原创 Linux学习——进程间通信(IPC)(二)

同步和互斥:在多任务的操作系统下,多个进程会同时运行,并且一些进程间可能会存在一定的关联。多个进程可能为了完成同一个任务相互协作,这就形成了进程间的同步关系;在不同进程间为了争夺有限的系统资源(硬件或软件资源)会进入竞争状态,这就是进程间的互斥关系。进程间的互斥、同步关系存在的根源在于临界资源。临界资源是在同一时刻只允许有限个(通常一个)进程可以访问(读)或修改(写)的资源,通常包括硬件资源(处理器、内存、存储器以及其他外围设备等)和软件资源(共享代码段、共享结构和变量等)。

2024-03-17 13:41:36 642 1

原创 Linux学习——进程间通信(IPC)(一)

回顾之前提到的话题,fork()函数被调用一次,都有两个返回值。两次返回值的区别是子进程的返回值是0,父进程的返回值是子进程的进程id。之所以将子进程的进程id返回给父进程是因为:一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id;对于子进程来说,之所以fork()返回0给他,是因为他可以随时调用getpid()来获取自己的进程号,也可以通过getppid()来获得父进程的进程号。

2024-03-17 10:32:30 1891 1

原创 Linux学习——多路复用

这样做用户线程再发起IO请求后可以立即返回,如果该次读操作并未读取到任何数据,用户线程需要不断的发起IO请求,直到数据到达后,才真正读取到数据,继续执行,整个过程中,虽然用户线程每次发起IO请求都可以立即返回,但是为了等到数据仍然需要不断轮询、重复请求,消耗大部分CPU资源。poll()与select()同样的缺点是包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就位,她的开销随着文件描述符数量的增加而线性增大。但是,这里fd、不能作为普通文件或目录的文件描述符;

2024-03-13 09:19:30 2206

原创 LInux学习——函数指针与指针函数

pfun代表的是函数的类型,通过pfun来代表“void (*)(int)”函数类型,即pfun是函数指针的别名,“pfun p”相当于定义了一个“void (*p)(int)”的函数指针。具体实现流程:定义一个返回值为void的函数指针——>把函数指针赋值给myfun,也就是myfun的首地址——>pfun获得myfun首地址,pfun地址==myfun地址——>最终调用pfun等于调用myfun。可以存储不同的函数,并且通过该结构体中的函数指针成员来调用相应的函数。//函数指针指向执行函数的地址。

2024-03-12 10:38:17 697 1

原创 多线程编程——互斥锁

在多线程编程中,互斥锁提供了一种方式,使得一段关键代码(临界区)在同一时刻只能被一个线程执行。

2024-03-06 19:19:20 945

原创 多线程编程

线程的分离状态决定一个线程以什么样的方式来终止自己,在默认情况下线程是非分离状态的,在这种情况下,原有的线程等待创建的线程结束,只有当pthread_join函数返回时,创建的线程才算终止,释放自己占用的系统资源,而分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。在这种情况下,子线程一旦进入到终止状态,有时让主线程等待子线程结束或者让主线程安排每个子线程结束的等待顺序,是很困难或不可能的,所以在并发子线程比较多的情况下,这种方式也会经常使用。

2024-03-06 14:01:37 790

原创 多进程编程

服务器按处理方式可分为:迭代服务器和并发服务器两类。迭代服务器每次只能处理一个用户的请求,实现简单但是效率低;并发服务器可以同时处理多个用户的请求,虽然实现较为复杂但是效率很高,在实际应用中最为广泛。Linux中有3种实现并发服务器的方式:多进程并发服务器,多线程并发服务器,IO复用。接下来主要记录多进程并发服务器的实现方式。

2024-03-01 19:31:34 865 1

原创 socket网络通信(二)

接上篇文章socket网络通信(一),为了更好地理解网络socket通信,接下来将会提供socket服务器和客户端示例代码。

2024-02-29 14:52:35 381

原创 网络socket编程(一)

socket是应用层与TCP/IP协议族通信的中间软件通信层。具体如下:socket网络通信的原理类似于打电话。例如:A要给B打电话,A拨号后B听到电话后接听电话后A和B建立起连接,A和B就可以开始讲话了,挂掉电话断开连接。

2023-12-23 12:51:05 928 1

原创 文件IO系统调用

系统调用出错的原因是以整形值的形式保存在errno中,整形值的形式不友好,所以通常将errno的值转成字符串的形式。经常用到的函数:perror()和strerror()perror():后面只需要跟一个字符串参数s即可,它会将字符串打印在标准输出上,内容是:字符串s后面紧跟着冒号和字符串形式错误的原因;缺点:错误只能打印在标准输出上,对于要进行格式化控制的输出或想写入到日志文件中时就不能处理;strerror():用来将整形值错误errno换装成为字符串形式;

2023-11-25 22:15:44 822

原创 树莓派DS18B20探测温度

DS18B20是一款数字温度传感器,广泛应用于各种嵌入式系统和电子项目中。DS18B20是一种数字传感器,通过1-Wire总线协议与主控制器通信。这意味着可以使用单一的引脚(数据引脚)连接多个DS18B20传感器。DS18B20提供高精度的温度测量,通常在±0.5°C的范围内。DS18B20适用于广泛的温度范围,通常在-55°C到+125°C之间,使其在许多环境中都能正常工作。DS18B20允许用户通过配置寄存器来选择不同的温度分辨率,以平衡精度和测量速度。DS18B20可以使用3V到5V的电源供应。

2023-11-24 17:10:48 1881 1

原创 蜂鸣器驱动

由图可知,蜂鸣器所连接的管脚PA11可以做为TIM1_CH4使用,要让蜂鸣器工作只需要配置使能TIM1定时器的CH4通道输出PWM即可;在tim.c文件中添加蜂鸣器操作函数,其中times为蜂鸣器响几次,interval为蜂鸣器响、停的时间。配置使能TIM1,让Channel4输出PWM,PA11管脚就被设置成TIM1_CH4功能模式了;(2)占空比:是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比。PWM(脉冲宽度调制)是通过对一系列脉冲的宽度进行调制,输出所要的波形(包含形状以及幅值)。

2023-10-05 21:45:41 120

原创 STM32延时

Systick是Cortex M3/M4内核的一个外设,使得软件在M3/M4单片机中很容易被移植;Systick是一个24位的向下递计数器,。通常将Systick设为系统时钟HCLK(72MHz),也就是说每过1/72M秒Systick里面的计数器就会减1,当重装载数值寄存器里的值递减为0时,系统定时器就会产生一次中断,这样便会产生时间,如此CPU自动重装计数器循环往复。

2023-10-05 10:43:52 719

原创 STM32系列单片机按键中断

stm32系列单片机 按键中断服务程序

2023-10-03 20:05:25 257 1

原创 stm32单片机基础操作使用

1.在图形化界面对led的每个GPIO管脚重新命名:这样RedLed、GreenLed、BlueLed均有了意义。4.头文件gpio.h添加led控制函数turn_led()和blink_led()的声明及相关枚举、宏定义;1.在单片机原理图找到led灯相应引脚(红灯:PC9;2.设置管脚模式:管脚PC9、PC6、PB2均设为GPIO_Output模式。3.配置led连接的相应cpu管脚,默认是高电平(灯灭)5.修改main.c中while循环代码,实现跑马灯功能。2.生成代码,可在gpio.c中查看。

2023-10-03 15:36:34 636 2

空空如也

空空如也

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

TA关注的人

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