自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GPIO输入和输出

输出:通过写0或者写1,控制引脚输出低电压或高电压。输入:通过读取引脚是0还是1,判断引脚输入的是高电压还是低电压。

2024-10-18 09:41:33 2563

原创 SPI通信

W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景存储介质:Nor Flash(闪存)时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz(Quad SPI)存储容量(24位地址):W25Q40W25Q80W25Q16W25Q32W25Q64W25Q128W25Q256硬件电路。

2024-10-14 11:23:43 1025

原创 USART串口数据包

大量字符可以作为包头包尾,有效地避免了包头包尾和载荷数据重复的问题。如果载荷数据和包头包尾会出现重复的情况,就选择固定包长。包头为0xFF,包尾为0xFE。

2024-10-09 17:32:03 561

原创 USART串口协议

也是类似的,数据从RX引脚通向接收移位寄存器,在接收器控制的驱动下,一位一位地读取RX电平,先放在最高位,然后向右移,移位八次之后,就能接收一个字节了。然后接收部分也是类似的,RX引脚的波形,通过GPIO输入,在接收控制器的控制下,一位一位地移入接收移位寄存器,移完一帧数据后,数据就会统一转运到接收数据寄存器,在转移的同时,置一个RXNE标志位,检查这个标志位就可以知道是不是收到数据了,同时这个标志位也可以去申请中断,这样就可以在收到数据时,直接进入中断函数,然后快速地读取和保存数据。为低电平,低位先行。

2024-10-07 22:40:45 1217

原创 DMA直接存储器存取

DMA)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源12个独立可配置的通道:DMA1(7个通道),DMA2(5个通道)每个通道都支持软件触发和特定的硬件触发存储器到存储器的转运:一般使用软件触发外设到存储器的数据转运:一般使用硬件触发STM32F103C8T6 DMA资源:DMA1(7个通道)

2024-10-06 10:00:36 1127

原创 ADC模数转换器

模拟数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3V,转换结果范围:0~409518个输入通道,可测量16个外部和2个内部信号源规则组和注入组两个转换单元模拟看门狗自动监测输入电压范围STM32F103C8T6 ADC资源:ADC1、ADC2、10个外部输入通道。

2024-10-03 12:06:52 2695

原创 输入捕获模式测频率&PWMI模式测频率占空比

【代码】输入捕获模式测频率&PWMI模式测频率占空比。

2024-10-02 23:27:29 502

原创 TIM输入捕获

IC(Input Capture) 输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。一旦有边沿,比如上升沿,那输入滤波和边沿检测电路就会检测到这个上升沿,让输入捕获产生动作,让CNT的值锁存到CCR中。(这一块的作用和外部中断差不多,都是检测电平跳变,然后执行动作,只是中断的动作是向CPU申请中断)每个高级定时器和通用定时器都拥有4个输入捕获通道。可配置为PWMI模式,同时测量频率和占空比。

2024-10-01 23:40:32 2224

原创 PWM驱动LED呼吸灯

配置PA0引脚,对于普通的开漏/推挽输出,引脚的控制权是来自于输出数据寄存器的,如果想让定时器控制引脚,就需要使用复用开漏/推挽输出的模式。复用开漏/推挽输出,这里输出数据寄存器将被断开,输出控制权转移给片上外设。TIM2的通道1引脚复用在了PA0引脚。

2024-10-01 16:27:22 392

原创 TIM输出比较

PWM脉冲宽度调制在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。PWM参数:频率=1/Ts 占空比=Ton/Ts 分辨率=占空比变化步距。

2024-10-01 09:37:24 713

原创 定时器定时中断&定时器外部中断

在每次复位时,发现值都是从1开始的,我们发现在TIM_TimeBaseInit()函数内部,最后会生成一个更新事件,来重装装载预分频器和重复计数器的值。因为预分频器是有个缓冲寄存器的,写入的值只有在更新事件时才会真正起作用,所以为了让值立刻起作用,就在这最后,手动生成了一个更新事件。但是由于更新事件和更新中断是同时发生的,更新中断会置更新中断标志位,当我们之后一旦初始化完了,更新中断就会立刻进入。解决的方法:在TIM_TimeBaseInit()函数的后面,手动调用一下TIM_ClearFlag()函数。

2024-09-30 19:34:06 856

原创 TIM定时中断

基本定时器(APB1):TIM6、TIM7拥有定时中断、主模式触发DAC的功能。通用定时器(APB1):TIM2、TIM3、TIM4、TIM5拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能。高级定时器(APB2):TIM1、TIM8拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能。STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4。

2024-09-28 07:56:07 752

原创 EXTI外部中断

中断函数的地址是由编译器分配的,不固定的,中断跳转由于硬件的限制,只能跳到固定的地址执行程序。所以为了让硬件跳转到一个不固定的中断函数里,这就需要在内存中定义一个地址的列表。列表地址是固定的,中断发生后,就跳转到这个固定位置,在这个固定位置由编译器,再加上一条跳转到中断函数的代码,这样中断跳转就可以跳到任意位置了。中断地址的列表就叫中断向量表。比如中断发生时,会跳转到固定的位置A,在这个位置由编译器,再加上跳转到中断函数的代码,就可以跳转到中断函数那里。

2024-09-27 08:31:42 951

原创 LED闪烁

参数为GPIOA,GPIOB等等,调用函数,所指定的GPIO外设就会被复位。AFIO外设,可以复位AFIO。:用第二个结构体参数来初始化第一个参数GPIO口。把结构体变量赋一个默认值。:GPIO的4个读取的函数。:GPIO的4个写入的函数。

2024-09-24 23:47:14 466

原创 UNIX体系结构

广义上来说,操作系统包括了内核和一些其他软件(包括系统实用程序、应用程序、shell以及公用函数库等),这些软件使得计算机能够发挥作用,并使计算机具有自己的特性。从严格意义上来说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。通常将这种软件称为内核,因为它相对较小,而且位于环境的核心。例如Linux是GNU操作系统使用的内核,一般该操作系统称为GNU/Linux操作系统,简称为Linux。shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口。内核的接口被称为系统调用。

2024-09-20 22:03:54 345

原创 Linux系统编程-UFS文件系统解析

一个磁盘下面有若干个分区,一个分区下面有若干个柱面组(块组)。假设块中一个小格为1k,通常在实际生产中一个小格子为4k起。几乎所有的信息都存放在一个inode中,inode中的一个小格子存放的是结构体。在inode的小格子中,有stat、亚数据、无关、数据块指针组。数据块指针组有15个指针,前12个是直接的数据块指针,有一级、二级、三级间接块指针。在前面12个数据块指针,每个都指向块中的一个小格子,所以前面12个指针都用上的话,就可以保存一个12k大小的文件。

2024-08-20 11:31:24 687

原创 Linux系统编程-文件属性和FAT文件系统

将big.c的权限修改为666。a是all,是将所有加上可执行的权限。也可以u+x,g+x,o+x。

2024-08-18 11:16:08 385

原创 Linux系统编程-文件属性

2到4是user的权限,5到7是group的权限,8到10是other的权限,所以基本位有9位。u+s位,g+s位,o+t位。文件类型有7种,用位图来表示的话,3个二进制位就足够了。没有15位的位图,所以一定是16位。第一位为0,表示是八进制数,有5位,3*5再加上最高位的1,一共16位。st_mode是一个16位的位图。st_mode是一个16位的位图,用于表示文件类型,文件访问权限,及特殊权限位。这个红色框中的信息都存放在stat结构体的st_mode中。运行,flen.c是常规文件,所以结果为-。

2024-08-17 13:51:11 369

原创 Linux系统编程-stat函数

第一个参数是获取的文件属性的名字,第二个参数是结构体指针。将pathname指针指向的文件属性信息,填到statbuf中。

2024-08-13 23:38:54 659

原创 Linux系统编程-ls

类ls的实现,如myls-a和--all是等价的。

2024-08-12 23:19:01 496

原创 Linux系统编程-fcntl和ioctl

fcntl():文件描述符所变的魔术几乎都来源于该函数。

2024-08-12 21:53:18 365

原创 Linux系统编程-dup,dup2,原子操作

原子操作:不可分割的操作。原子:不可分割的最小单位。原子操作的作用:解决竞争和冲突。如tmpnam,其操作不原子。程序中的重定向:dup,dup2。

2024-08-07 21:45:39 428

原创 Linux系统编程-文件共享

文件共享:多个任务共同操作一个文件或者协同完成任务。写程序删除一个文件的第10行。类似于删除数组的某一个元素,要做的是将后面的元素都往前移,覆盖要删除的那个元素。找到第10行的行首和第11行的行首,从第11行开始一个一个往前覆盖。

2024-08-05 06:07:15 359

原创 Linux系统编程-系统IO和标准IO的区别

有特殊情况,比如还未达到信的上限,但是有人比较急,这时就直接去送,有点类似与刷新缓冲区fflush。标准IO具有缓冲的机制,看着已经写进去了,实际上是放到了输出的缓冲区中。系统调用IO每一次都是从user态切换到kernel态,实时性高。标准IO吞吐量大,系统调用IO响应速度快。从用户的角度,用户体验感觉到程序变快是指吞吐量。所以在相同情况下,标准IO和系统调用IO都能解决问题的情况下,尽量使用标准IO。

2024-08-04 08:01:01 727

原创 Linux系统编程-read,write,lseek

从fd这个文件描述符里面读,读到buf去,读count个。

2024-08-03 14:16:14 176

原创 Linux系统编程-open,close,重载和变参

第一个参数是待打开的文件名,第二个参数是位图。flags(位图)必须包含以下三项:只读,只写,读写。0个或多个文件的创建选项和文件的状态选项,可以以按位或的方式放到文件中去。第一个为只读。第二个为读写。第三个为只写,并且文件不存在的话要创建,而且文件存在的话要截断。第四个为读写,而且有则清空,无则创建。

2024-08-02 18:27:23 674

原创 Linux系统编程-文件描述符

文件描述符(fd)是在文件IO中贯穿始终的类型,实际上是整形数、数组下标。文件描述符优先使用当前可用范围内最小的一个,如果0,1,2,3,4,5,6都已被占用,但此时3关闭了,那么此时打开文件会占用3,而不是7。

2024-08-02 10:44:49 596

原创 Linux系统编程-临时文件

临时文件:1、如何不冲突 2、及时销毁创建临时文件有两种方法:1、 tmpnam 2、tmpfile。

2024-08-02 08:57:29 330

原创 Linux系统编程-getline函数

getline函数实际是由malloc和realloc函数共同封装而成的,一开始用malloc分配一块空间,不够之后再用realloc函数扩充。

2024-08-01 17:17:48 464

原创 Linux系统编程-文件位置函数和缓冲区刷新函数

因为printf函数将数据写入标准输出缓冲区,标准输出缓冲区时行缓冲,换行时刷新,所以这里什么都不输出。whence可以为SEEK_SET文件首,SEEK_CUR文件当前位置,SEEK_END文件尾。rewind是将文件位置指针seek到文件开始处,是用fseek函数封装的。offset是偏移量大小(可正可负),whence是偏移的相对位置。在printf最后增加换行符,刷新缓冲区。反映文件位置指针当前所在的位置。操作成功返回0,否则返回1。当参数为空时,所有流都被刷新。使用fflush刷新缓冲区。

2024-08-01 08:18:55 185

原创 Linux系统编程-atoi函数

将字符串转为整形数字。

2024-08-01 07:23:36 394

原创 Linux环境高级编程----IO操作

使用fgetc和fputc,fgets和fputs,fread和fwrite实现文件复制。

2024-08-01 06:42:40 400

空空如也

空空如也

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

TA关注的人

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