自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IIC(I2C)通讯协议及其时序详述

IIC(Inter-Integrated Circuit)集成电路总线是飞利浦公司开发的一种两线式、串行、半双工同步通信二线,可以挂载多个参与通信的器件,每个器件都有自己的地址,常用于板内通信,比如单片机与外围芯片之间短距离、低速的信号传输。IIC协议一般使用2条信号线通信 分别为数据线SDA、时钟线SCL,发送一个字节是以高位先发送原则(MSB),看之前我们先始终记得SCL为高电平时的SDA数据才是有效的。我们这里以主机的视角来阐述过程。

2024-07-29 17:04:14 562

原创 EEPROM的最小擦除单元居然不是字节,而是页!

如果需要写入的数据都在同个页面,那么只需发起一次IIC通讯即可,若超过页范围,则超出的数据将覆盖至页首;而需要写入的数据在两个连续的页面,则需发起两次IIC通讯,写完第一个页的数据再写第二个页的数据。在EEPROM内部,逻辑单元会从EEPROM中读取该页的数据复制至数据缓冲区(一般与页大小相同),然后与待写入的数据合并,擦除整页后将完整的页面数据写回到EEPROM中。

2024-07-29 17:02:48 298

原创 C语言易错题(隐式数据类型转换)

原因为(uint8_t)0xFF在进行按位取反前已强制转换为32位的数据,故取反后的值为0xFFFFFF00,按位与0x12345678得到0x12345600。误以为num计算结果为0x00000000;实则num值为0x12345600;

2024-05-08 18:51:50 207

原创 C语言CRC通用模块代码

【代码】C语言CRC通用模块代码(crc4、crc8、crc16、crc16-Modbus,crc16-xmodem等)

2024-04-08 11:59:27 275 2

原创 C语言预处理

注:两个下划线和英文间无空格,此处为了能显示双下划线而空格。__ DATE __: 当前日期,一个以 “MMM DD YYYY” 格式表示的字符串常量。__ TIME __: 当前时间,一个以 “HH:MM:SS” 格式表示的字符串常量。__ FILE __: 当前文件名,一个字符串常量。__ LINE __ :当前所在行号,一个十进制常量。

2023-03-12 19:37:25 262

原创 C语言宏定义几个问题

因为CAT(STR1,STR2)中含##,所以执行替换中不会被#define STR1 "aa"与#define STR2 “bb"影响,在执行完替换后,即STR1STR2,其为一整体,更不会被"aa"和“bb”替换,只会将整体的STR1STR2给替换成"welcome”。A(S)宏定义中含##,故替换过程中不会被其他宏定义替换,即不会被#define S SIZE替换,所以替换成了X_S,而X_S这个整体没有关于他的宏定义,所以结果为A(S)会被X_S替换;

2023-03-12 19:05:35 455

原创 C语言笔试题(1)

类型赋值给了形参p,strcpy函数将字符串常量“hello world”复制给了p所指向的字符串(区别于p=“hello world”,如果用这个替代strcpy这行代码则原理是“hello world”的首地址赋值给了p)。但是,在getmemory函数里动态分配的内存未释放掉,将会导致内存泄漏,又没办法把这段内存找回来,虽然形参p里存储这段内存的首地址,但他是形参,是函数里定义的变量,存放于栈中,在函数执行完就被释放掉了,所以没有人知道动态分配的这段内存在哪儿,唯一与这段内存有关系的p不存在了。

2023-03-11 01:54:16 592 5

原创 单片机FLASH和RAM内存分布

STM32内置有Flash和RAM(而RAM分为SRAM和DRAM,STM32内为SRAM),硬件上他们是不同的设备存储器、属于两个器件,但这两个存储器的寄存器输入输出端口被组织在同一个虚拟线性地址空间内。MDK预处理、编译、汇编、链接后编译窗口会显示如下一段关于程序和数据大小的信息:Code:是程序中代码所占字节大小;RO-data(Read Only-Data):程序只读的变量,也就是带const的,和已初始化的字符串等;RW-data(Read Write-Data):已初始化的可读写全局/

2023-03-03 16:08:04 3810

原创 2.4G模块及SPI通讯

SPI(Serial Peripheral Interface)串行外围设备接口,是一种高速、全双工、同步通信总线,常用于单片机和E2PROM、FLASH、实时时钟、数字信号处理器等器件的通信,它主要是主从方式通信,通常只有一个主机和数个从机。

2023-02-24 02:40:11 1779

原创 IIC(I2C)通讯

IIC是飞利浦公司开发的一种两线式、串行、半双工同步通信二线,可以挂载多个参与通信的器件,每个器件都有自己的地址,常用于板内通信,比如单片机与外围芯片之间短距离、低速的信号传输。

2023-02-24 02:37:01 354

原创 UART通用异步通信(串口通信)

我们一般常说的串口通讯即是UART通讯,用处非常广泛,几乎两个单片机间的通讯、USB-TTL、RS-232都是使用UART协议。

2023-02-24 02:36:02 554

原创 stm32一上电就进入中断函数

在用到STM32定时器的更新中断时,发现有些情形下只要开启定时器就立即进入一次中断。准确说,只要使能更新中断允许位就立即响应一次更新中断【当然前提是相关NVIC也已经配置好】。换言之,只要使能了相关定时器更新中断,不管你定时间隔多长甚至不在乎你是否启动了相关定时器,它都会立即进入一次定时器更新中断服务程序。以STM32芯片为例,做了几种不同顺序的组合测试。根据测试发现,的确有些情况下一运行TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); 【即使能更新中断】就立即进入更新

2021-04-04 13:23:24 1824 5

原创 linux学习之常用终端指令(1)

ls(List):查看目录信息命令查看当前目录的文件有什么 当然不包括隐藏文件ls -a:查看当前目录所有文件 包括以.开头的隐藏文件ls -l:查看当前目录的文件的详细信息,ls -l亦可缩写为llls -al:也就是两个指令的叠加使用cd(Change directory):目录切换命令cd /代表进入根目录,也就是计算机目录,cd ~表示切换到 home 目录的意思,相当于cd /home/用户名,cd .则是表示切换到目前所在的目录,cd ..则表示切换到目前目录位置的上一层目录.

2021-03-04 21:06:36 384 1

原创 linux学习笔记(2)

Ubuntu终端(terminal)连接文件Linux有两种连接文件:符号连接(软连接)和硬链接符号连接类似Windows 系统里的快捷方式,如果删除了原有的文件,软连接出来的文件也就是快捷方式就会打不开硬连接通过文件系统的inode连接来产生新的文件名,相当于备份了一个一模一样的文件唯一的区别只是名字不一样而已,连文件的ID都是一模一样的inode相当于文件的ID,硬连接出来的文件的inode跟原文件的inode是一样的我们可以通过键入ll -i来显示当前目录下的文件的索引编号(inode 号

2021-03-04 21:04:36 102 1

原创 linux学习之文件权限管理(7)

文件权限管理Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)从上图我们可以看到用户对main.c文件的权限为-rw-rw-rw-,r代表可读,w代表可写,x代表可执行,而-代表不具有此权限,所以这里的main.c是可以给文件所有者、用户组里的其他用户、其他用户读和写,但都不能执行main.cchmod(Change mode):控制用户对文件的权限的命令Q:哪些用户可以修改文件权限?A:只有文件所有者和超级

2021-03-04 21:03:21 971 1

原创 linux学习之用户与用户组(6)

用户与用户组Linux系统存储用户记录是在/etc/passwd这个文件内Linux系统用户的密码记录在/etc/shadow这个文件内Linux系统用户组的信息记录在/etc/group这个文件内每个用户都有一个用户ID,叫做UID(User Identification)每个用户组都有一个用户组ID,叫做GID(Group Identification)用户和用户组的存在就是为了控制文件的访问权限adduser:新增使用者帐号或更新预设的使用者资料的命令deluser:移除使用者帐号或

2021-03-04 21:02:10 122 1

原创 linux学习之压缩与打包(5)

压缩与打包gzip:将文件压缩后生成扩展名为.gz文件的命令,并且会删除原来文件,只有压缩功能不具有打包功能gzip -d或gzip --decompress或gzip ----uncompress:解开压缩文件gzip -v或gzip --verbose:显示指令执行过程gzip -r或gzip --recursive:递归处理,将指定目录下的所有文件及子目录的文件都进行处理,无论是压缩还是解压操作bzip2:将文件压缩后生成扩展名为.bz2文件的命令,并且会删除原来文件,只有压缩功能不具

2021-03-04 21:00:50 530 1

原创 linux学习之磁盘管理(4)

磁盘管理mount:挂载Linux系统外文件的命令在根目录下的dev目录里以sd开头的就是硬盘的各个分区,sda是整个硬盘,而sdax则是这个硬盘里的各个分区对应的分区名字。我们可以使用mount这个挂载命令把U盘挂载到一个新建的目录下,在这里我的U盘是sdb,U盘的分区1是sdb1,分区2是sdb3。假如我在桌面下mkdir了一个Udisk文件,我就可以把sdb1分区挂载在Udisk目录下,即sudo mount /dev/sdb1 ~/桌面/Udisk不过在此之前先要把U盘解除在其他目录下

2021-03-04 21:00:19 153 1

原创 linxu学习之软件包管理(3)

管理软件包dpkg(Debian package):用来安装、创建和管理软件包的实用命令sudo dpkg -i: 安装包sudo dpkg -r:删除包sudo dpkg --unpack:解开 deb 包的内容sudo dpkg -l:显示系统中所有已经安装的 deb 包当安装deb格式的软件包时,就需使用dpkg指令进行安装等步骤当自己下载源码进行程序编译安装时,先把压缩包解压,然后在其解压出的文件夹的目录下,在终端使用make编译指令,make完后,输入make install指令

2021-03-04 20:59:43 143 1

原创 linux学习之自动下载软件包(2)

自动下载软件包apt-get(Advanced Package Tool):运行apt-get工具指令适用于 deb 包管理式的 Linux 操作系统(Debian、Ubuntu等),主要用于自动从互联网软件仓库中搜索、下载、安装、升级、卸载软件或操作系统sudo apt-get install “软件包名字”从互联网中自动搜索该软件包的名字并且下载安装所以是一键安装软件包,与源码安装不同的是,这个指令会自动检测并安装依赖,而且用apt-get安装的包都是成熟的软件包,基本不存在安装包有严重

2021-03-04 20:59:10 187 1

原创 TTL转USB电路(CH340G)

该电路无需拨动BOOT跳线帽,具有一键下载功能

2021-01-29 11:58:42 7462

原创 STM32F4最小系统板的设计(转载)

本文摘自:https://www.cnblogs.com/cjyc/p/10198936.html1.VBAT引脚在主流的设计中,VBAT与0欧的电阻串联,接至3.3V。2.OSC32_IN 与 OSC32_OUT32.768k的rtc时钟用于精确定时,待机唤醒时钟。根据您的需要判断是否添加。如果您不需要待机状态的定时功能的话,可以不用外接晶振。3.XTAL_IN 与 XTAL_OUT 。外部时钟晶振不是必须要接8M,官方数据写的是4-16MHz,然后经过pll倍频后给其它外设提供时钟信

2021-01-28 21:19:28 4418

原创 linux学习笔记(1)

终端使用Shell命令:ls(List):目录信息查看命令查看当前目录的文件有什么 当然不包括隐藏文件ls -a :查看当前目录所有文件 包括以.开头的隐藏文件ls -l:查看当前目录的文件的详细信息ls -al:也就是两个指令的叠加使用更多如下图:cd(Change directory):目录切换命令cd /代表进入根目录,也就是计算机目录,cd ~表示切换到 home 目录的意思,cd .则是表示切换到目前所在的目录,cd …则表示切换到目前目录位置的上一层目录。当进入终端后其默认在

2021-01-19 01:11:41 343 1

原创 stm32命名规则

G这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash,G代表1M字节Flash。F4表示的是STM32使用的M4内核(所谓的M4内核指的是Cortex-M4,这对应的内核其实是表示的是采用了对应的一种架构),但并不是说明F1就是用Cortex-M1,F1是采用Cortex-M3内核架构,407代表这个是高性能。32表示的是这个微控制器是32位的。

2020-12-05 13:36:34 13156 1

原创 Mbps、MB、Mb和Mb/s的含义与区别

Mbps: 它是一种传输速率单位,在装宽带的时候听到的多,我们在日常生活中就能看到谁家宽带升到200m或者300m了,这里的m指的是Mbps(Million bits per second),不是说电脑里的文件大小几十兆的那个兆,宽带的这个兆描述的是速度,中文名叫兆比特每秒,而大家都知道一个字节里有八位也就是1Byte=8bits,所以兆比特(Mb)和兆字节(MB)的关系也就很明显了。MBps: 呃呃呃,这个单位好像没见过,不过理论来说1MBps=8Mbps,因为通常来说1Byte(字节)=8bit

2020-09-15 22:29:07 31106 1

转载 STM32 ----小谈FSMC RS选择

STM32 FMSC LCD难点解析:以下是网上和一博主整理的:感觉应该可以把STM32 ----FSMC LCD中的关键RS说清楚~原博客链接:http://blog.sina.com.cn/s/blog_66ffe2770100wabh.html(这里只转载了两个角度,原博客共有三个角度看待问题)> 第一个角度理解STM32有FSMC(其实其他芯片基本都有类似的总线功能),FSMC的好处就是你一旦设置好之后,WR(写)、RD(读)、DB0-DB15这些控制线和数据线,都是FSMC自动控

2020-08-20 19:24:39 557

原创 机器字长、存储字长等的区别

字:用于表示其自然的数据单位的术语。在这个特定计算机中,字是其用来一次性处理事务的一个固定长度的位组。一个字的位数(即字长)是计算机系统结构中的一个重要特性。而字长在不同环境又分很多种类型,比如:指令字长:机器指令中二进制代码的总位数。机器字长:计算机进行一次整数运算所能处理的二进制数据的位数;比如32位处理器,一次能处理32位数据。存储字长:存储单元中的二进制代码(存储字)位数;一个存储单元都有一个属于自己的地址,32位存储器是指一个地址里有32位二进制数据,也就是一个地址能存4个字节的数据。这些

2020-08-12 02:31:44 4840

空空如也

空空如也

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

TA关注的人

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