自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IIC仲裁总结

IIC协议支持多个主设备与多个从设备在一条总线上, 如果不用开漏输出, 而用推挽输出, 会出现主设备之间短路的情况。开漏输出还能实现线与,用于切换不同主设备。需要上拉电阻是因为开漏输出只有低电平与高阻态两种状态,而IIC需要有输出高电平的能力。现在,我们已经知道了 I2C 为什么要漏极开路和添加上拉电阻的目的了,那么又为什么要线与?I2C 支持多个主设备与多个从设备连接在同一根总线上,如果多个设备同时占用总线,怎么判断谁先占用总线呢?所以就需要一种仲裁机制。

2023-04-10 15:14:02 1847

原创 堆、栈、flash、ROM、RAM、bss段、data段、text段、Code、Ro-data ZI-data、RW-data的区别

堆栈是指在stm32启动文件中定义的那一段head和stack,是跟在data段和bss段后面的一块空间,要区别于操作系统里的线程栈。详情可查看.map文件在stm32中,通常堆向高地址增长(向上增长),栈向低地址增长(向下增长);以下存储在RAM以下存储在flash(text段)Total RO Size (Code + RO Data) 66092 ( 64.54kB)Total RW Size (RW Data + ZI Data) 9256 ( 9.04kB)Total ROM Size (C

2022-07-07 09:47:04 2523

转载 DMA双缓冲区(也称乒乓缓冲)

一.乒乓缓冲原理 一般情况下,串口数据 DMA 传输到 BUF1(内存上的一片连续的缓冲区)的过程中,是不 建议对 BUF1 进行操作的。但由于串口数据是一个连续传输的过程,比如接收 GPS 数据,不 能等待 BUF1 满了才处理数据,你 CPU 在处理数据的同时,串口源源不断接收数据,此时会 造成串口数据丢失,而乒乓缓冲就完美地解决了这个问题。 具体过程是:当串口 BUF1 满了时,DMA 的目标地址迅速切换到 BUF2,此时...

2022-01-10 15:28:45 11424 4

原创 SD卡移植FatFs

平台:KW38(开发板)+ SD卡 + USB串口线在移植的过程中,发现网上对于FatFs R0.14版本的资料并不是很多,用最新版做的时候,一些函数原型发生了变化,虽然变化不大,也给我造成了一定的阻碍,故记录一下首先,从FatFs官网FatFs - Generic FAT Filesystem Module,下载了最新版FatFs R0.14,官网上还有很多函数的使用说明,也是很不错的学习资料。不同版本的FatFs实现功能大抵相同,实现方式略有差异,如函数入口参数不同等。移植的第一步...

2021-12-15 17:50:45 1547

转载 FreeRTOS时间片进行任务调度​

注意:①任务切换会存在时间片开销;FreeRTOS支持时间片,每个优先级可以支持无限多个任务,这些任务的调度就是时间片调度;在FreeRTOS中允许一个任务运行一个时间片(一个时钟节拍的长度)后让出CPU的使用权,让拥有同优先级的下一个任务运行, 至于下一个要运行哪个任务? 由时间片来调度,时间片调度发生在滴答定时器的中断服务函数中 。下面三个任务优先级相同,为N(1)任务3正在运行。(2)这时一个时钟节拍中断(滴答定时器中断)发生,任务3的时间...

2021-11-12 18:40:36 909

原创 C双向链表代码实现

基于单向链表做了一些修改,实现双向链表,记录一下#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node* next; struct node* prev;};struct node* creatlist(){ struct node* headnode = (struct node*)malloc(sizeof(struct node)); headnode-&gt.

2021-11-08 18:22:03 516

原创 C单向链表实现

最近在学习单向链表的实现,自己手敲了一段实现代码,记录一下#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node* next;};struct node* creatlist(){ struct node* headnode = (struct node*)malloc(sizeof(struct node)); headnode->next = NULL; .

2021-11-08 16:29:41 91

原创 stm32串口接收中断过于频繁导致资源占用过高

在正常情况下,使用普通的串口中断,可以实现正常的串口收发,但如果收发频率过高,则会导致CPU频繁进入中断,导致资源占用过高 这种情况下可以用DMA:DMA在硬件ROM和IO设备间开辟直接传输数据的通道,不需要CPU主控芯片控制,也不需要类似中断处理那种保留现场&恢复现场的操作。这大大减小了CPU的负担。使用场景DMA用在只需要传输数据,不需要处理数据的地方,有三种传输方式:外设→存储器(例:从串口RDR寄存器写入某数据buf) 存储器→外设(例:从某数...

2021-11-08 00:09:23 4410

原创 sizeof的实现

最近用sizeof时,对其实现原理有些好奇,查找资料后记录一下其实sizeof用在数组时,可以理解成下面这个宏定义#define array_sizeof(T) ( (size_t)(&T+1) - (size_t)(&T) )假设现在有一个数组a;事实上a和 &a结果都是数组的首地址。但他们的类型是不一样。a表示&a[0],也即对数组首元素取地址。a+1表示首地址+sizeof(元素类型)。&a尽管值为数组首元素地址。但类型为:类...

2021-11-07 23:49:27 860 1

原创 FLASH的读写

最近在学习关于flash的知识,记录一下flash的特性是,写数据只能将1写为0,0不能写为1。擦除数据是将所有数据都写为1。因此如果想在已经数据的flash上写入新的数据,则必须先擦除。一、FLASH的块/扇区/页关系每块 每扇区 每页 16扇区 16页 256 Byte(2048 bit) 二、常用FLASH型号大小型号 W25Q80 W25Q16 W25Q32 块 16 32 64 扇区...

2021-11-07 23:26:19 9181 2

空空如也

空空如也

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

TA关注的人

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