学习stm32 让我们一起回顾一下C语言吧
ODR 是一个端口输出数据寄存器,也只用了低 16 位。该寄存器为可读写,从该寄存器读出来的数据可以用于判断当前 IO 口的输出状态。而向该寄存器写数据,则可以控制某个 IO 口的输出电平。该寄存器的各位描述如图 6.1.3 所示:
端口输出数据寄存器(GPIOx_ODR)
| ODR15 | ODR14 | ODR13 | ODR12 | ODR11 | ODR10 | ODR9 | ODR8 | ODR7 | ODR6 | ODR5 | ODR4 | ODR3 | ODR2 | ODR1 | ODR0 |
| 位31:16 | 保留,始终读为0。 |
| 位15:0 | ODRy[15:0]:端口输出数据(y = 0…15) (Port output data) 这些位可读可写并只能以字(16位)的形式操作。 注:对GPIOx_BSRR(x = A…E),可以分别地对各个ODR位进行独立的设置/清除。 |
c语言实用位操作
&:按位与 ~:取反 |:按位或 <<:左移 >>:右移
清零操作:&运算实现清零--------GPIOA->ODR&=0XFF0F;//将4-7位清零
置一操作:|运算实现置一---------GPIOA->ODR|=0X0040;//将第6位置一
实用移位操作可以提高代码可读性----GPIOA->ODR|=1<<5;//第五位置一
宏定义define讲解:
1:不带参数的宏定义 格式:#define 标示符 字符串
作用:在编译预处理时,将源程序中所有的标示符换成字符串
例如:
#define PI 3.148 //PI即为3.148
#define uchar unsigned char //在定义数据类型时,uchar 等效于 unsigned char
注意:编译与处理时,不做语法检查,只是简单的字符替换,只有在编译时才对已经展开宏名(比如已经将源程序中的PI替换成3.148)的源程序进行语法检查
宏定义时可以引用已经定义的宏名:
#define PI 3.148
#define X 2.0
#define ALL PI*X
2:带参数的宏定义 一般格式:#define 标示符(参数表) 字符串
作用:在编译预处理时,将源程序中所有标示符替换成字符串,并且将字符串中的参数用实际用的参数替换
例如:#define s(a,b) (a*b)/2
若程序中使用了s(3,4),在编译预处理时,将替换为(3*4)/2
extern:
C语言中extern可以置于变量和函数之前,用以表示变量或则函数定义在别的文件中,提示编译器遇到此变量和函数时在其他模块寻找定义。
注意:extern声明变量可以多次,但是定义只有一次
变量存储类型:
auto型:在动态存储区中 register型:在寄存器中 satic型和extern型;在静态存储器中
局部变量默认存储类型:auto 全局变量默认存储类型:extern
auto和register型只用于定义局部变量
satic型即可定义局部变量(值将被保留,而且只第一次进入此函数时初始化该变量,也就是只操作一次),也可定义全局变量,定义全局变量时它的有效范围
为它所在的源文件,其他源文件不能使用
注意:auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期间都不释放
函数:
若函数存储类型为satic型,则为内部函数或静态函数,他表示由多个源文件组成的一个程序,该函数只能在其所在的文件中使用,在其他文件终不能使用
若函数的存储类型为extern型,则为外部函数,他表示该函数能被其他源文件调用。
函数默认存储类型:extern
结构体:
1,在程序中使用结构体,必须对结构体的组成进行描述,这个描述过程为结构体类型定义。
形式: struct person
{
long no;
char name[12];
};
在上面的例子中,struct为关键字,person为结构体名,no,name为成员。
注意:与其他变量不同,定义结构体类型,并不意味着系统将分配一段内存单元来存放各个数据成员,这只是定义类型而不是结构体变量。他告诉系统该结构有哪些成员构成,并把它们当做一个整体来处理。
2.结构体变量定义:一旦定义了结构体,就可以定义结构体变量,可以采用不同方式定义结构体变量。
A- struct person stu,worker;
上面定义了两个结构体变量(stu,worker),它们是结构体 struct person(此如同int一样,代表类型名) 的变量。
B-
struct person
{
long no;
char name[12];
}teacher,doctor;
上面定义了两个结构体变量(teacher,doctor)。
C-
struct
{
long no;
char name[12];
}teacher,doctor;
上面只是定义了teacher和doctor两个变量为结构体类型,但没有定义该结构体类型的名字,所以不能再用来定义其他变量,struct stu 是不合法的。
3,结构体变量初始化:
struct person
{
long no;
char name[12];
};
***********************************************************************************
A: struct person teacher ={"4300","LI MING"};
B:
struct person
{
long no;
char name[12];
} teacher ={"4300","LI MING"};
注意:不能直接对结构体变量赋予一组常量:teacher ={"4300","LI MING"};
4,结构体变量引用:
struct
{
long no;
char name[12];
}teacher,doctor,*w;(指针w指向结构体变量doctor)
A:doctor.no B:(*w).no C:doctor->no 是对结构体变量doctor的no成员的正确引用。
补充:
指针变量的定义:[存储类型] 数据类型 *指针变量名[=初值];
指针变量使用:
赋值:(1) int i,*p;
p=&i;
(2) int i,*p=&i;
将指针p指向变量i的地址。
引用:
(1)*p-------代表所指变量的值
(2)p--------代表所指变量的地址
typedef:类型别名
typedef用于为现有的类型创建一个新的名字,或称为类型别名。这样可以简化变量的定义,一般用在结构体上。
例如:
typedef struct
{
long no;
char name[12];
}GPIO_TYPEDEF;
typedef 为结构体定义了一个别名叫GPIO_TYPEDEF,这样就可以通过GPIO_TYPEDEF来定义结构体了。
例如;GPIO_TYPEDEF teacher,doctor;
这里GPIO_TYPEDEF与struct person是等同的作用。
学习stm32 让我们一起回顾一下C语言吧的更多相关文章
- 学习STM32单片机,从菜鸟到牛人就是这样简单(配视频资料)
我想说,为了学习单片机而去学习单片机的思路不对. 你问,如何系统地入门学习stm32? 本身就是一个错误的问题.假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习. 你要考虑的 ...
- 单片机小白应该如何学习stm32的一些实践心得!
嵌入式搬砖道路上的大三狗一枚,撑死算个初学者吧.才学有限,下面仅仅是本人对STM32学习的一点心得与建议,希望对题主有帮助吧. 心得:本人当初学习STM32的时候有一些跟风的因素,自以为学的芯片越多就 ...
- 学习STM32,你不得不了解的五大嵌入式操作系统
学习STM32,你不得不了解的五大嵌入式操作系统 原标题:学习STM32,你不得不了解的五大嵌入式操作 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- Netty学习-IO体系架构系统回顾 & 装饰模式Decorator的具体使用
Netty学习-IO体系架构系统回顾 IO和NIO的学习 NIO - 1.4 开始出的 在网络应用框架中,NIO得到了大量的使用,特别是netty里面 前提:对IO及其了解 对IO的总结和回顾 理解J ...
- MySQL学习总结:提问式回顾 undo log 相关知识
原文链接:MySQL学习总结:提问式回顾 undo log 相关知识 1.redo 日志支持恢复重做,那么如果是回滚事务中的操作呢,也会有什么日志支持么? 也回滚已有操作,那么就是想撤销,对应的有撤销 ...
- 零基础学习STM32之入门学习路线
可以说就目前的市场需求来看,stm32在单片机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝大部 ...
随机推荐
- PAT 1041 考试座位号(15)(代码)
1041 考试座位号(15 分) 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的 ...
- PAT 1043 输出PATest(20)(代码+思路)
1043 输出PATest(20)(20 分) 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按"PATestPATest...."这样的顺序输出 ...
- poj_1979(dfs)
Red and Black There is a rectangular room, covered with square tiles. Each tile is colored either re ...
- 实用SQL大全
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- uuid唯一吗
是唯一的.我在几台硬件完全相同(同一批购买的).软件也完全相同(用同一个GHOST系统安装)的电脑上试过: 不同的电脑上,wmic csproduct get uuid 获取的UUID码是不同的.另 ...
- mongoDB(Window)
1.启动命令 mongod --dbpath F:\mongo\data 注:dbpath路径不能有空格,我开始用F:\Program Files,就因为有一个空格,失败了. ...
- centos7构建python2.7常用开发环境
把下面的代码保存到一个sh文件中执行即可 yum -y install epel-release yum -y install python-pip yum -y install mysql-deve ...
- OpenSSH配置与基本使用
SSH访问远程 SSH常见分类: telnet-远程登录协议,23/TCP 明文认证.明文传输(不安全) ssh(Secure SHell)-应用层协议,22/TCP 通讯和认证过程加密.主机认证 用 ...
- ubuntu14上安装nltk
安装nltk 1)在buntu终端命令键入:wget https://bootstrap.pypa.io/ez_setup.py,下载ez_setup.py. 2)下载完成后后,键入:sudo py ...
- 20155312 2006-2007-2 《Java程序设计》第六周学习总结
20155312 2006-2007-2 <Java程序设计>第六周学习总结 课堂笔记 学习进程 周一看视频-2h 周二以代码为中心看书-3h 课后选择题-5h 教材指导 应试 Linux ...