自定义博客皮肤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)
  • 收藏
  • 关注

原创 关于volatile

这就产生了一个问题,如果通过其他渠道在两句之间改变了a的值,就需要重新去内存中读a的值,然而编译器优化掉了第二次读取的过程,就会导致c得到的a不对。针对以上问题,就需要用volatile修饰a,使编译器不对其进行优化,volatile的意思即为“易变的”,在C语言中当使用volatile修饰一个变量时即表示这个变量的值。①中断:如果某个变量在中断服务函数中可能被更改,就要加volatile防止优化,因为中断发生的时间是不确定的,以上述例子来说,如果在两句赋值语句中间进入中断,改变了a的值,就会出错。

2024-05-31 15:10:57 603 1

原创 C语言文件操作

如果要将程序中的某些数据持久化记录,就需要将其存放在文件中,使用文件可以直接将数据存放在电脑硬盘。在程序设计中,通常有两种文件:①程序文件:包括源程序文件(后缀.c),目标文件(Windows后缀.obj),可执行程序(Windows后缀.exe)。②数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。一个文件要有一个唯一的标识,以便用户识别和使用,文件名包含三部分:文件路径+文件名主干+文件后缀。例如:C:\code\test.exe。

2024-05-30 10:10:51 961

原创 C语言动态内存分配

有些情况下需要开辟的,而常规的在,并且内存大小不能改变,因此需要引入动态内存分配,动态内存分配的内存是在堆区,需要由用户手动开辟,手动释放,并且可以由用户自行改变空间的大小。

2024-05-29 11:00:02 761

原创 C语言中的位段

位段是通过结构体实现的,可以在一定程度上减小空间浪费,位段的声明和结构体类似,有以下几个不同:①位段的成员必须是(int,char,short等)。②成员后边有冒号和数字,表示该成员占几个bit位。

2024-05-28 11:51:05 601 1

原创 C语言结构体详解

int x;int y;}p1;//在声明结构体类型的同时创建变量int main()//定义结构体变量p2,此时的struct point相当于一个数据类型,和int等数据类型类似,注意struct不能省略int x;int y;//创建变量同时赋值struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化。

2024-05-25 16:22:21 871

原创 C语言常用的内存操作函数

在C语言中经常会操作内存中的数据,下面来介绍一下常用的一些内存操作函数。

2024-05-24 17:25:12 270

原创 C语言中字符串相关的函数解析

C语言中没有string类型,字符串通常放在或中,下面来介绍一些常用的字符串相关的操作函数。

2024-05-23 17:19:05 308

原创 C语言中的操作符

如果某个操作符的操作数类型不同,需要转换成相同类型再运算,如果某个操作数的类型在下面的表中排名靠下,需要转换成另一个操作数的类型,比如,int和float中的int就需要转换成float。如果&&左边的操作数为假,结果就肯定为假,右边的操作数就不算了。如果||左边的操作数为真,结果就肯定为真,右边的操作数就不算了。[]是下标引用操作符,用于引用数组下标,有两个操作数:数组名和下标索引值,两个操作数的位置可以交换。||是逻辑或,全假才为假,有一个真就是真。相除的余数,也叫取模,它的两个操作数必须都是整数。

2024-05-22 09:35:11 1202

原创 C语言中的转义字符

在使用printf打印时会经常用到\n来进行换行,这里的\n就属于转义字符,还有其他一些转义字符,下面来介绍一些常用的。

2024-05-20 10:48:16 219

原创 c语言整型存储方式

c语言中的数据类型主要分为字符型,整形和浮点型,字符在系统中存储的是,所以也是整形。

2024-05-17 11:43:22 753

原创 STM32的FLASH学习笔记

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。大容量产品的闪存模块组织如图所示:STM32 的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。​①主存储器:该部分用来存放(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是。

2024-05-15 16:25:55 853

原创 STM32IAP学习笔记

用户程序写在flash的主存储器中,对于小容量产品来说,FLASH每页1K,最多32页,也就是32K。下载完毕之后,再更改BOOT至正常状态,使得MCU运行所下载的程序。,地址应该与上0x2FF80000,就是得到bit19~bit27位,只需判断这些位,如果有1,与的结果就不等于0x20000000,就表示地址不合法,低十九位不需要判断。,地址与上0x2FFE0000,就是得到bit17~bit27位,只需判断这些位,如果有1,与的结果就不等于0x20000000,就表示地址不合法,低十七位不需要判断。

2024-05-14 17:33:40 854

原创 计算机存储器分级

从需求上讲,我们希望存储器速度快、体积小、能耗低、散热好、断电数据不丢失。但在现实中,我们往往无法把所有需求都实现。首先来了解一下RAM和ROM的区别:RAM(Random Access Memory)也叫随机存取存储器,RAM工作时可以随时从任何一个指定的地址写入或读出信息,但是,通常用来存储一些,如程序运行过程中的中间数据,局部变量。主要分为SRAM和DRAM,计算机中的,SRAM相较于DRAM成本高,读取速度快。

2024-05-14 14:58:53 957 1

原创 CAN总线和LIN总线区别总结

CAN总线和LIN总线是两种用于汽车和其他工业应用中的通信协议

2024-05-09 17:18:14 1401 1

原创 LIN总线详解

LIN 是 Local Interconnect Network 的缩写,是基于(通用异步收发器/串行通信接口)的低成本串行通信协议。可用于汽车、家电、办公设备等多种领域。本文主要针对LIN在分布式的汽车电子网络系统中的应用。LIN主要用于汽车中对的场合,如车门,车灯,空调,雨刷器等。LIN网络在汽车中一般不独立存在,经常与上层网络(CAN)相连,如下图所示:LIN的拓扑结构为,采用的概念, 总线电平为12V,传输位速率(波特率)最高为。

2024-05-09 17:04:47 2237 1

原创 CAN通信详解

CAN 是 Controller Area Network 的缩写,是ISO国际标准化的。1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后,CAN 通过 ISO11898(高速通讯标准) 及 ISO11519(低速通讯标准)进行了标准化,现在在欧洲已是汽车网络的标准协议。

2024-05-09 09:29:23 3252 1

原创 STM32的ADC详解

ADC即模拟数字转换器,通常用于将外部的模拟量信号转换为数字信号。STM32的ADC是逐次逼近型的模拟数字转换器,最大可以计数到4095,有18个通道,16个外部通道和2个内部通道。

2024-05-07 16:24:08 1752

原创 malloc和new的区别

malloc是c语言中动态内存分配的函数,new是c++中动态内存分配的函数,二者有什么区别呢

2024-04-26 16:40:48 178 2

原创 STM32的DMA详解

STM32最多有2个 DMA 控制器(DMA2仅存在大容量产品中),DMA1有7个通道。DMA2有5个通道。⑤每个通道都有3个事件标志(DMA 半传输,DMA 传输完成和 DMA 传输出错),这3个事件标志逻辑或成为一个单独的中断请求。②七个通道的优先级可以通过软件编程设置(共有四级:很高、高、中等和低),优先级相等的话通道编号小的优先级高。①每个通道都直接连接专用的硬件 DMA请求,每个通道都同样支持软件触发。,模拟打包和拆包的过程。⑥存储器和存储器间的传输,外设和存储器,存储器和外设的传输。

2024-04-26 16:19:04 756 1

原创 c语言指针详解

对指针进行了详细的介绍

2024-04-26 14:24:00 1020 4

原创 C编译到执行的各个阶段详解

在c语言中将源程序转换为可执行代码主要分为编译和链接两步,工程中的每个.c源文件经过编译器的编译分别变成.o目标文件,每个.o目标文件通过链接器捆绑在一起形成可执行程序,链接器同时也会引入程序中引用的标准c库函数。

2024-04-25 17:01:29 382 1

原创 内存四区详解

在C/C++中内存分配主要有四个部分,称为内存四区:栈区,堆区,静态区(全局区)和代码区,接下来分别介绍一下每个区域及其中存放的内容。

2024-04-25 09:43:04 730 1

原创 平衡小车PID控制

在不加外力的情况下,由于重力的作用,双轮小车不会平衡地立在地上,肯定会左右倾倒。为了使小车平衡,需要加入直立环,速度环和转向换三种PID控制。

2024-04-24 09:57:19 1872

原创 一文了解IIC

IIC(lnter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式,用于连接微控制器及其外围设备,由和构成,SCL是由主模块输入的时钟信号,是,而SDA是由主机或从机控制的数据信号,是。可发送和接收数据,在 CPU 与被控IC 之间、IC 与 IC 之间进行双向传送,高速 IC 总线一般可达 400kbps 以上,IIC属于。

2024-04-23 09:40:01 1557

原创 PID基本原理及代码实现(基于正点原子电机教程)

开环控制系统输出只受系统输入控制,没有反馈回路,控制精度和抗干扰能力差。如上图的风扇风力控制系统,如果输入目标风力为300,正常情况下控制电路会驱动电机使扇叶达到300的转速,但是实际上不可避免会有阻力,会导致风力达不到300,这就是由于没有反馈,导致精度不足。

2024-04-16 11:48:54 2399

原创 STM32编码器测速

编码器是一种能将直线位移、角位移数据转换为脉冲信号、二进制编码的设备。它本质上就是一个传感器,可以把角位移或直线位移转换成电信号,并反馈给控制器,使控制器知道当前机械运动的位置、角度等信息。编码器按照检测原理可以分为光电式和磁电式;按照编码类型可分为增量式和绝对式。在实际的应用中,这四类编码器并不是相对独立的,它们经过组合后,就变成了光电绝对式、光电增量式、磁电绝对式和磁电增量式这四种编码器。

2024-04-15 10:23:44 3227 2

原创 STM32输出PWM驱动直流电机

L298N是比较常用的电机驱动模块,可以同时驱动两个电机,控制正反转和调速,其接口说明如下:①、输出A和输出B的两个引脚直接连两个电机的GND和VCC即可。②、板载5V使能需要接高电平,驱动板才能工作,可以将其接到按键以控制电机的启停。③、供电部分:GND接单片机的GND,可以选择12V或5V供电。④、通道使能部分:两个通道使能引脚分别控制两个电机,一般接单片机的PWM输出,ENA控制输出A,ENB控制输出B,如果只是想让电机转起来,不用PWM的话,通道使能引脚直接接高电平即可。

2024-04-12 10:42:05 3261 1

原创 STM32定时器基础

STM32F10X系列最多有八个定时器,TIM1和TIM8是高级定时器,TIM2~TIM5是通用定时器,TIM6和TIM7是基本定时器。常用芯片的定时器资源数如下: 不同定时器的特点如下:STM32的通用定时器特点包括:①、位于低速的APB1总线上②、16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。③、16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意

2024-04-11 17:08:43 639 1

原创 Linux字符设备驱动开发基本流程(基于正点原子I.MX6U)

字符设备驱动是Linux中最简单的一类驱动,字符设备就是按照字节流进行读写操作的设备,读写数据是分先后顺序的,比如常用的点灯、按键、IIC、SPI等都是字符设备。Linux中一切皆文件,驱动加载到内核中后会在"/dev"目录下生成一个相应的驱动文件,应用程序通过对名为“/dev/xxx”(xxx是具体的驱动文件名)的文件进行操作就可以实现对硬件的操作。应用程序对硬件的驱动流程如下:应用程序运行在用户空间,Linux驱动运行于内核空间。

2024-03-28 16:53:05 1131 2

原创 STM32串口相关知识及实验代码

①全双工异步通讯②分数波特率发生器,发送和接收共用可编程波特率,最高可达4.5Mbits/s③可编程的数据字长度(8位或9位)④可配置的停止位(1位或2位)⑤可配置的使用DMA的多缓冲器通信⑥单独的发送器和接收器使能位⑦检测标志:接收缓冲器非空,发送缓冲器空,传输结束标志⑧10个带标志的中断源⑨校验控制和四个错误检测标志。

2024-03-26 16:32:04 756

原创 快速了解TTL、RS232和RS485

TTL、RS232和RS485都是常用的串口通讯接口。 TTL是指晶体管-晶体管逻辑电平,TTL电平信号规定,高电平(逻辑1)的电压为2.4~5V,低电平(逻辑0)的电压为0~0.4V。一般认为高电平是5V,低电平是0V。由于高低电平范围太小,一但出现静电干扰就会改变电平状态,所以TTL的通讯距离较短,TTL是最基础的串口通讯,也是全双工通讯方式。 为了提升串口通讯的距离和稳定性,美国电子工业联盟制定了RS232标准,RS232采用DB9接口,但一般还是只用RX,TX和GND三个

2024-03-25 16:15:20 713

原创 嵌入式通讯协议基础

异步通讯:不使用时钟线进行数据同步,采用在信号中插入一些同步用的位,或者将数据进行打包,以数据帧的形式传输,例如UART规定起始位,数据为,奇偶校验位、停止位等。同步通讯:通讯双方通过一根信号线表示时钟信号,在时钟信号的驱动下同步采样数据,一般会统一在时钟的上升沿或下降沿进行采样。半双工:数据支持在两个方向传输,但同一时间只能在一个方向传输,是一种可以切换方向的单工。全双工:数据可以同时在两个方向传输,全双工是两个单工的结合,两个设备都有发送和接收能力。并行通讯是利用多条数据线对数据的每一位同时传输。

2024-03-25 14:33:25 200

空空如也

空空如也

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

TA关注的人

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