野火STM32
未读一、芯片里面有什么1.片上外设
内核之外的部件叫核外外设或片上外设。GPIO,USART、I2C、SPI 都叫做片上外设。
芯片内核和外设之间,有总线连接,主控总线有 8 条,被控总线有 7 条。
2、寄存器映射
给存储器分配地址的过程称为存储器映射。如果是给吹气球再分配一个地址叫存储器重映射。
3、存储器区域功能划分
(1)BLock0 功能划分
(2)Block1 功能划分
(3)Block2 功能划分
二、寄存器以功能为名给这个内存单位取一个别名,这个别名就是我们经常说的寄存器,分配好地址的特定功能的内存单元取别名的过程叫做寄存器映射
如何理解寄存器
1、名称 (GPIOx_BSRR)(x=A…I)
该寄存器名为(GPIOx_BSRR)(x=A…I),其中 x 可以为 A-I,适用于 GPIOA、GPIOB 到 GPIOU
2、偏移地址,寄存器相对这个外设的基地址的编译
寄存器的编译地址是 0x18,可以查到 GPIOA 外设的基地址是 0x4002 0000,GPIOx_BSRR 寄存器地址为,0x4002 0000+0x18
3、寄存器位表
0 ...
一、指针的概念操作系统给每个存储单元分配了一个编号,从 0x00 00 00 00 00 ~0xff ff ff ff 称之为内存
指针变量:是变量也是指针变量,这个变量用来存放一个地址编号。在 32 位系统下,有 4 个字节
注:
1、无论声明类型的地址,都有存储单元的编号,在 32 位下都是 4 个总控二。所以 任何类型的指针变量都是 4 个字节
2、对应类型的指针变量,只能存放对应类型的变量地址
比如:整形的指针变量,就是存放整型变量的地址
扩展:
字符变量 char ch; ch 占一个字节,它有一个地址编号,这个地址编号就是 ch 的地址整型变量 int a; a 占四个字节,占有四个字节的存储单位,有四个地址编号
二、指针的定义方法1、简单指针
数据类型 * 指针变量名
12int * P;//定义一个指针变量P
2、指针的运算符
& 取地址 :获取一个变量的地址
*取值:标识作用
12345678910#include <stdio.h>int main(){ int a = 100; int * p;//指针变 ...
一、C 语言编译过程预处理、编译、汇编链接
gcc -E hello.c -o hello.i 1、预处理
gcc -S hello.i –o hello.s 2、编译
gcc -c hello.s -o hello.o 3、汇编
gcc hello.o -o hello_elf 4、链接
1、预编译
将.c 的头文件、宏展开
生成.i 文件
2、编译
将预处理的.i 文件生成 .s 汇编文件
3、汇编
将.s 汇编文件生成.o 目标文件
4、链接
.o 文件链接成目标文件
二、include#include<> 用尖括号包括头文件,在系统指定的路径找到头文件
#include”” 用双引号包括头文件,先在当前目录下找到头文件,找不到再系统指定的路径下找
三、define定义 宏用 define
1、不带参数的宏123#define PI 3.14//终止宏的定义 定义#undef PI
2、带参宏#define S(a,b) a*b
注意带参宏的形参 ab 没有类名
S(2,4)在预处理代替成字符串的形参 2 * 4
123456789#includ ...
一、函数的概念函数是 c 语言的功能单位,实现一个功能可以封装一个函数来实现。
定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。
二、函数的分类1、定义角度分类1、库函数 2、自定义函数 3、系统调用
2、参数角度分类1、有参函数
函数有形参,可以是一个,也可以是多个,类型随便
例如:
123456int fun(int a.float b.double c){}int max(int x,int y){}
2、无参函数
函数没有参数,在形参列表的位置写 void 或者不写
123456int fun(void){}int fun(){}
3、返回值角度分类
(1)带返回值的函数
在定义函数的时候,必须带有返回值类型,在函数题,必须有 return,没有返回值类型,默认返回值整形
例如:
12345char fun() //定义一个返回字符数据的函数{ char b = 'a'; return b;}
123fun(){ retur ...
一、数组的概念数组是若干个相同类型的变量在内存中有序存储的集合。
概念理解:
数组用于存储一组数据
数组里面存储的数据类型必须是相同的
数组在内存中会开辟一块连续的空间
int a[10];//定义了一个整型的数组 a,a 是数组的名字,数组中有 10 个元素,每个元素的类型都是 int 类型,而且在内存中连续存储。
这十个元素分别是 a[0] a[1] …. a[9]
a[0]~a[9]在内存中连续的顺序存储
二、数组的分类1)字符数组
即若干个字符变量的集合,数组中的每个元素都是字符型的变量
char s[10]; s[0],s[1]….s[9];
2)短整型的数组
short int a[10]; a[0] ,a[9]; a[0]=4;a[9]=8;
3)整型的数组
int a[10]; a[0] a[9]; a[0]=3;a[0]=6;
4) 长整型的数组
lont int a[5];
5)浮点型的数组(单、双)
float a[6]; a[4]=3.14f;
double a[8]; a[7]=3 ...
千锋C语言
未读1.2 数据类型1.2.1 基本类型
char 、short int 、int、long int、float、double
1.2.2 构造类型
由若干个相同或不同类型数据构成的集合,这种数据类型被称为构造类型
1int a[10];
格式化输出字符:
%d 十进制有符号整数
%ld 十进制 long 有符号整数
%u 十进制无符号整数
%o 以八进制表示的整数
%x 以十六进制表示的整数
%f float 型浮点数
%lf double 型浮点数
%e 指数形式的浮点数
%c 单个字符
%s 字符串
%p 指针的值
特殊应用:
%3d 要求宽度为 3 位,如果不足 3 位,前面空格补齐;如果足够 3 位,此语句无效
%03d 要求宽度为 3 位,如果不足 3 位,前面 0 补齐;如果足够 3 位,此语句无效
%-3d 要求宽度为 3 位,如果不足 3 位,后面空格补齐;如果足够 3 位,此语句无效
%.2f 小数点后只保留 2 位
1.2.3 类型转换
自动转换:
遵循一定的规则,由编译系统自动完成.
强制类型转换:
把表达式的运算结果强制转换成所需的数据类型
自动转换的原则:
1 ...
千锋C语言
未读1.1 C 语言的特点1.#include<stdio.h> 头文件包含,一定要有
2.每一个 c 语言的程序有且只有一个 main 函数,这是整个程序的开始位置
3.C 语言中()、[]、{}、“”、’’、都必须成对出现,必须是英文符号
4.C 语言中语句要以分号结束。
5.//为注释 /* */为多行注释
1.2 关键字1、char 字符型
1char ch1 = 'zifu';
2、short 短整型 占 2 个字节
1short int a = 11; -32768 - ---32767
3、int 整形,在 32 位占 4 个字节,16 位站 2 个
1int a = 44; -20 亿---20 亿
4、long 长整型 在 32 位占 4 个字节
1long int a = 66;
5、float 单精度浮点型(实数),占 4 个字节
1float b = 3.8f;
6、 double 双精度浮点型 (实数),占 8 个字节
1double b=3.8;
7、 struct 这个关键字是 ...