首页 > 版块 > STM32 > 帖子正文

单片机学习之基础篇

蔡琰 发布于 2021-10-12 11:26
收藏 0 回复 0 浏览 199 原创

①寄存器

寄存器,是集成电路中非常重要的一种存储单元,在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU中的寄存器就是其中一种,作为软硬件的接口,为广泛的通用编程用户所熟知。

我们举例STM32的一个寄存器:

1.jpg 

1. 关于学习资料

对于学习一款单片机而言,资料不需要很多,最主要的还是芯片的手册,手册里面会体现出你想要的,有的人忽视手册,想要通过某种捷径直接去跳过这一步,在这里我想说,除非你有一定的了解,有信心前面的过程不会出现问题,否则还是老老实实的去啃手册,下面我们来介绍下学习STM32F373CCT6这款单片机我们用到的文档:

1.《STM32F373_Reference_Manual》是 ST 出的官方资料,有 STM32F3的详细介绍,包括了STM32F3 的各种寄存器定义以及功能等,是学习 STM32F3 的必备资料之一。

2.《STM32F373xx》也是 ST 出的官方资料,有关于芯片引脚定义,模块功能概括,以及芯片的电气属性等介绍,是学习 STM32F3 的必备资料之一。

3. 《STM32F3 与F4 系列 Cortex M4 内核编程手册》 则是对 上述资料的补充, 很多关于 CortexM4 内核的介绍(寄存器等) ,都可以在这个文档找到答案,该文档同样是 ST 的官方资料,专门针对 ST 的 Cortex M4 产品。4. 《Cortex M3 与 M4 权威指南》则针对 Cortex M4 内核进行了详细介绍,并配有简单实例,对于想深入了解 Cortex M4 内核的朋友,此文档是非常好的参考资料。


2. 关于学习方法

首先你要有个实验平台,不管资料再多这些资料的来源依据还是数据手册,一定要自己去对着数据手册仔细研读,自己独立动手配置,在平台上去做实验。只有不断的实验你才能理解。当遇到问题时不要在第一时间去网上搜索答案,再去研读数据手册,解决不了的时候,再试图去网上参考借鉴一下其他朋友的案例。


3. MDK5软件的使用

3.1 STM32  官方 标准 固件库简介

ST(意法半导体)为了方便用户开发, 提供了一套丰富的 STM32 固件库。 到底什么是固件库?它与操作寄存器有什么区别?这一节,我们将讲解 STM32 固件库相关的基础知识, 希望能够让大家对 STM32固件库有一个初步的了解。

3.1.1  库开发与寄存器开发的关系

固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API) ,最终操作的还是寄存器。

在 51 的开发中我们常常的做法是直接操作寄存器,比如要控制某些 IO 口的状态,我们直接操作寄存器:

2.jpg 

我们写成十六进表示:P0 = 0xAA;

而在 STM32 的开发中,我们同样可以操作寄存器:

GPIOA->BSRR=0x0001;

为了省却麻烦, ST(意法半导体)推出了官方固件库, 固件库将这些寄存器底层操作都封装起来, 提供一整套接口 (API)。

比如上面的控制 BSRR 寄存器实现对某一引脚的电平控制,官方库封装了一个函数:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

GPIOx->BSRR = GPIO_Pin;

}


②位操作

C 语言位操作相信学过 C 语言的人都不陌生了,简而言之, 就是对基本类型变量可以在位级别进行操作。这里简单再复习一下。我们讲解几种位操作符,然后讲解位操作使用技巧。

运算符

含义

运算符

含义

&

按位与

~

取反

|

按位或

<<

左移

^

按位异或

>>

右移

 

1. 不改变其他位的值的情况下,对某几个位进行清0

GPIOA-> BSRR = GPIOA-> BSRR & 0XFF0F;  //将第 4-7 位清 0

不改变其他位的值的状况下,对某几个位进行置1

GPIOA-> BSRRL = GPIOA-> BSRRL | 0X0040; //设置相应位第6位的值,不改变其他位的


2. 移位操作

GPIOx->ODR = 1 << 2; //1<<2 = 4 相当于把4赋给了ODR寄存器

GPIOx->ODR = 4 >> 2; //4<<2 = 1 相当于把1赋给了ODR寄存器

~取反操作  //用来对一个二进制数按位取反,即0变1,1变0。

GPIOx->ODR  = ~GPIOx->ODR;


3. ^按位异或 //若参加运算的两个二进制位值相同则为0,否则为1.

GPIOx->ODR  = 0x05^GPIOx->ODR;

以上就是做单片机控制的基础知识,踏实学了可以节省时间和精力去做应用模块的逻辑和算法了。基础扎实了会让产品更稳定,不能模棱两可的设计,否则故障会意想不到的出现。


0 0
发表评论 侵权投诉
评论 (0)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。

文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。