C语言结构体与共用体
C 语言中结构体与共用体
结构体(struct)
结构体是一种用户自定义的数据类型,它可以将不同类型的数据组合在一起形成一个新的数据类型,方便程序的编写和管理。
定义结构体
在 C 语言中,定义结构体需要使用 struct
关键字,格式如下:
12345cCopy codestruct 结构体名称 { 数据类型1 成员名称1; 数据类型2 成员名称2; ...};
其中,结构体名称 是结构体的名称,成员名称
是结构体中每个数据成员的名称,可以根据需要自定义。例如,定义一个表示学生信息的结构体:
12345cCopy codestruct student { int id; char name[20]; int age;};
上面的代码定义了一个名为 student
的结构体,其中包含三个成员:id(学号,整型)、name(姓名,字符型数组)和
age(年龄,整型)。
访问结构体成员
结构体成员可以使用 . 运算符访问,格式如下:
12cCopy code结构体变量.成员名称
例如 ...
数据结构
线性结构
数据结构
那么,我们来看看,什么是数据结构呢?
数据结构(data
structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系。
比如现在我们需要保存100个学生的数据,那么你首先想到的肯定是使用数组吧!没错,没有什么比数组更适合存放这100个学生的数据了,但是如果我们现在有了新的需求呢?我们不仅仅是存放这些数据,我们还希望能够将这些数据按顺序存放,支持在某个位置插入一条数据、删除一条数据、修改一条数据等,这时候,数组就显得有些乏力了。
image-20220710103307583
我们需要一种更好的数据表示和组织方式,才能做到类似于增删改查这样的操作,而完成这些操作所用到的方法,我们称其为“算法”,所以数据结构和算法,一般是放在一起进行讲解的。
算法
比如现在我们希望你求出1-100所有数字的和,请通过程序来实现:
12345int main() { int sum = 0; for (int i = 1; i <= 100; ++i) sum += ...
STM32学习笔记五
STM32 DMA
简介
DMA的概念
直接存储器访问 (DMA)
:用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。
DMA数据传输的四个要素:
传输源 :DMA数据传输的来源
传输目标:DMA数据传输的目的
传输数量:DMA传输数据的数量
触发信号:启动一次DMA数据传输的动作
DMA在很多情况下都能够帮助提高系统的性能,尤其是在处理大量数据传输时。它可以用来传输数据到/从外设,例如ADC、DAC、SPI和UART等,也可以用来进行内存间的数据传输。
DMA传输方式
外设到内存
内存到外设
内存到内存
外设到外设
DMA的循环模式和正常模式
BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。
这两种模式各有用途。
Normal正常模式
适合用于单次传输,比 ...
STM32学习笔记四
STM32 学习笔记 串口
简介
计算机通信的概念
将计算机技术和通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。按照数据传输方式的不同,可以分为串行通信和并行通信两类
串行通信:数据逐位传输
并行通信:多位数据同时传输
并行通信的特点
多位数据同时传输,传输控制简单,传输速度快,但是在长距离传输时硬件成本较高。
image-20230107185616094
串行通信的特点
数据逐位传输,传输线少,长距离传输时成本低,但数据的传输控制较复杂。按照实现数据同步的方式,可以分为同步串行和异步串行两种。
image-20230107185701153
同步串行通信的特点
数据传输以数据块(一组字符)为单位,在一个数据块内,字符与字符间无间隔,收发双方依靠独立的时钟线进行信号的同步.适用于大批量的数据传输。
image-20230107190042897
异步串行通信的特点
数据传输以单个字符为单位,字符和字符之间的间隙任意,字符内部每一位持续的时间相同。收发双方 ...
STM32学习笔记三
STM32定时器
简介
STM32的定时器可用于不同的目的,包括生成PWM信号、测量时间间隔、生成中断和控制外设等。它有几种不同类型的定时器,包括通用定时器、高级控制定时器、低功耗定时器和系统滴答定时器。
定时器是对周期固定的脉冲信号进行计数,如MCU内部的外设时钟(APB)。
计数器是对周期不确定的脉冲信号进行计数,如MCU的I/O引脚所引入的外部脉冲信号。
结论:定时器和计数器本质上都是计数器,定时器是计数器的一种特例。
定时器分类
种类
功能
基本定时器
几乎没有任何输入/输出通道,常用作时基,实现基本的定时/计数功能
通用定时器
具备多路独立的捕获和比较通道,可以完成定时计数、输入捕获、输出比较等功能
高级定时器
除具备通用定时器的功能外,还具备带死区控制的互补信号输出、紧急刹车关断输入等功能,可用于电机控制和数字电源设计
定时器的时钟频率
外设总线挂在TIM外设
外设总线时钟APB1-AHB1
外设总线时钟APB2-AH ...
STM32学习笔记二
STM32 中断
上节补充:
头文件、数据类型及函数声明的添加位置
image-20221225122205578
变量及函数的命名规则
见名知意:利用英文单词或者其缩写形式定义变量或函数,名称要体现变量的作用或函数的功能,切记不要使用拼音来命名。
2.
变量一般采用名词形式命名,多个单词间利用大小写字母作为间隔。全局变量的首字母大写,如KeyFlag;局部变量的首字母小写,如keyFlag,便于区分全局变量和局部变量。
3.
函数一般采用动宾结构命名,首字母大写,也是利用大小写字母作为间隔,如GetValue等。
4.
宏定义和用户自定义数据类型全部采用大写字母,利用下划线作为间隔,如KEY_STATE等。
简介
什么是中断
STM32中断是一种电子设备中的功能,它允许设备在执行主程序时暂停执行,以便处理来自外部设备或系统事件的信息。中断是通过向设备发送特殊的信号(称为中断请求)来触发的,该信号会使设备暂停当前的执行流程,转而执行一段特定的代码,称为中断服务程序(ISR)。在中断服务程序执行完毕后,设备会返回到原来的执行流程。
...
STM32学习笔记一
Stm32 单片机学习笔记
简介
使用芯片型号
开发环境
开发方式
STM32H750VBT6
CubaMX+CLion
HAL库
CubaMX的开发环境配置 可以参考这篇文章
Clion-STM32cubeMX-搭建舒适的STM32开发环境
大家最好要有一些单片机的基础知识比如说51单片机,C语言以及一些数电模电的知识,这样学起来会舒服很多哦!
在这里说一下,为什么不讲标准库:
首先的话,目前STM32开发方式有以下几种,我整理了一张表格
开发方式
优点
缺点
建议
寄存器
代码效率高
学习难度大,移植性最低
了解
标准库
开发流程便简单,开发周期缩短
代码执行效率稍低,移植性较低
熟悉
HAL库
上手简单,移植方便
执行效率稍低
掌握
STM32已经应用的非常广泛了,并且在工业开发也具有挺高的地位了,所以我们只需要
学会HAL库就可以完成绝大多数的开发了,并且标准库,早在几年前就不 ...
Clion + STM32cubeMX 搭建舒适的STM32开发环境
Clion+STM32cubeMX搭建stm32开发环境
本篇介绍的内容也是以基于HAL库开发为准的
环境及所需工具
软件环境:
Windows 10
STM32CubeMX
Clion-2019
MinGW
OpenOCD
arm-none-eabi-gcc
硬件环境:
STM32F103C6T6 或其他 STM32 开发板
ST-Link V2 下载器
微信图片_20220825154215
工具安装
STM32CubeMX
这个正常去官网下载的安装就行了
该软件用于配置时钟频率 gpio初始化等
版本号 <= 6.3.0 版本过高无法生成 后续文件
STM32CubeMX
- STM32Cube initialization code generator - STMicroelectronics
OpenOCD
OpenOCD
OpenOCD是用于对STM32进行下载仿真的工具,是一个开源软件包,Windows版本下从这里下载,下载好解压到一个目录就行,后面会在Clion中链接这个目录 ...
C51单片机学习笔记九
IIC协议
IIC协议概述
IIC全称Inter-Integrated Circuit (集成电路总线)
是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双
工同步通信方式
特点
简单性和有效性。
由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件
构成
IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。
image-20220815150649916
IIC协议
IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。
//起始位,停止位,数据位,速度
这些信号中,起始信号是必需的,结束信号和应答信号
起始信号
...
C51单片机学习笔记八
4G模块的使用
概述
产品介绍
EC03-DNC是亿佰特推出的LTECAT1数传模块产品,该产品软件功能完善,覆盖绝大多数常规应用场景,EC03-DNC是为实现串口设备与网络服务器,通过网络相互传输数据而开发的产品,该产品是一款带分集接收功能的LTE-FDD/LTE-TDD无线通信数传模块,支持LTE-FDD,LTE-TDD网络数据连接,用户只需通过简单的设置,即可实现串口到网络服务器的双向数据透明传输。模块使用2.0mm排针方便客户设备集成,使用5V~18V宽电压供电。支持移动、联通、电信4G卡,通信与LED指示采用兼容电平,默认3.3V可适用5V电平,具有抗干扰能力,能适应使用在一些电磁干扰强的环境当中,比如一些电力行业当中。
功能特点
采用最新4GCAT1方案;
支持数据透明传输,支持TCP、UDP网络协议,支持心跳包、注册包功能最大支持60个字节数;
支持MQTT协议,支持接入OneNet平台、百度云平台、阿里云平台的MQTT服务;
支持两路Socket链路同时收发;
支持ModbusRTU与ModbusTCP自动相互转换;
支持网络AT指令,可以通过网 ...