学习了stm32有一年了,今天想来写写自己对寄存器的理解,帮助那些有志学习stm32的朋友们少走一些弯路。

---------------------------------------------------------------------------------------------------------------------------------------

问题一:stm32位寄存器是什么意思?

32指的是二进制的32位,也就是每一个寄存器是有32位二进制组成(当然部分寄存器的部分位禁止修改)。

问题二:stm32编程的实质是什么?

stm32编程实质上是修改寄存器的32位的具体的值。

问题三:操作寄存器的值的方式有哪些?

直接赋值法,可以用二进制,最大值为1111 1111 1111 1111。也可以用十六进制,最大值为0xFFFF,还可以用十进制,最大值为65535,八进制也可以。他们在给寄存器赋值的时候是等效的。

间接赋值法,就是通过运算(加减,乘除,数组,位运算,甚至是算法将最后的值赋给寄存器)。

问题四:在那个文件里进行逻辑编写?

stm32的文件分为两类,一类是配置文件,另一类是逻辑文件(我自己的定义,书上并没有这种说法)。如果需要动态修改寄存器的值,必须在逻辑文件里使用库函数修改寄存器(库函数的本质就是修改寄存器),不要再配置文件里修改。

问题五:如何快熟识别库函数?

一般来说,setxxx()就是给寄存器设定一个新的值,getxxx()就是获取寄存器的值,另外还有一些使能函数。使用的时候,根据自己的目的去找函数,然后看这个函数修改的对应的寄存器。

问题六:如何才能学好stm32编程?

学习stm32最困难的地方,就是理解功能对应的寄存器的逻辑关系,甚至一个简单的功能往往是多个寄存器的调用的结果,理解寄存器之间的关系,学会常见的调试查错方法,学会查看寄存器的值。

问题七:正确的使用中断

在stm32编程中,多个功能的互相调用的时候,基本上都要用到中断,使用到中断就需要写中断服务函数,中断服务函数的函数名是不可以自定义的。他们在启动文件里面已经定义好了的,自定义的话,CPU找不到在哪里去执行。(很多人第一次写中断服务函数都会写错,笔者第一次写的时候也写错了。)在中断服务函数里面,要先判断是不是发生了中断,一般发生了中断,就会有相对应的中断标志位,执行中断服务函数之后,要先清除中断标志位,然后返回。这虽然没有明文规定,但好像成了一种“习俗”。

--------------------------------------------------------------------------------------------------------------

 今天,想来写写stm32的进阶用法(个人认为是进阶用法,高手会觉得这是什么小儿科,哈哈),希望,刚学习的stm32的童鞋少走弯路。

  1.stm32引脚的复用。

不同的内部外设复用到不同的GPIO引脚,这些引脚有些不可以任意指定的。比如说,stm32f4xx的TIM8_CH1,它能复用到PC6,但不能复用到PB14上。其他的类似。这些Alternate function 在英文规格书的Alternate function mapping 中可以找到,不是Reference Manual。

2.多个文件的变量的调用

当配置文件的参数设置为变量的时候,这就涉及到变量的调用。可能你在main文件里面修改了变量的值,然后再TIM中需要更新,那么变量你可以直接定义在TIM.c文件中,然后在main文件里面通过 extern 关键字调用。

对stm32寄存器的理解(个人理解,大神轻喷)的更多相关文章

  1. [OC笔记]@property之个人理解,大神轻拍

    /** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...

  2. 关于Java8 Stream流的利与弊 Java初学者,大神勿喷

    题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...

  3. javascript深入理解js闭包(个人理解,大神勿喷)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  4. 学习Swift--枚举的初步认识 --个人备忘 大神勿喷

    枚举定义了一个通用类型的一组相关值,使你可以在你的代码中以一种安全的方式来使用这些值. // 定义枚举的语法 enum Chips { // 定义了薯片的枚举,包含了3种口味的成员 case Toma ...

  5. ComboBox,三级联动菜单,新入门点小白,有些代码有待优化,大神勿喷

    //当前窗体的Load事件 private void provinceANDCity_Load(object sender, EventArgs e) { //连接字符串 string strConn ...

  6. 使用原生ajax访问后台数据并将其展现在前端页面中(小菜鸟自己整理玩的,大神勿喷)

    首先你要有php的环境,关于php环境的搭建,php本地站点的搭建,此处不再重复请看这里:http://www.cnblogs.com/Gabriel-Wei/p/5950465.html我们把wam ...

  7. 二级联动banner【墨芈原创,大神勿喷】

    这个banner效果在几个月前都做了,不过因为代码添乱,而且不宜调用就没发布,经过2周时间间间断断的编写,插件终于搞定了,除框架外其它都开源发布,至于框架没给源码是因为还没做好,后期做好了也会发布出来 ...

  8. C语言简单实现链栈基本几个功能(适合新手看,大神可指正)

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

  9. 理解z-index和css中的层叠顺序问题(大神技术博的读后感?)

    一直对 z-index不太理解,今天看到了大神的博客...http://www.zhangxinxu.com/wordpress/tag/z-index/ 1.层叠上下文:是一个名词!是一个性质!此时 ...

随机推荐

  1. python 获取本机的IP

    python 获取本地的IP import socket import fcntl import struct def get_ip_address(ifname): s = socket.socke ...

  2. c++中为什么可以通过指针或引用实现多态,而不可以通过对象呢?

    引言:  在c++中司空见惯的事情就是:可以通过指针和引用可以实现多态,而对象不可以.  那为什么?让我们来解开这神秘的暗纱! 1. 类对象的存储方式: 在一个类的实例中,只会存放非静态的成员变量. ...

  3. PowerDesigner 中模型设计导出Excel表格

    今天项目做设计,客户要看数据设计,需要到处Excel表格.去网上搜索下,把使用总结如下: 已经完成设计的pd设计 打开pd,快捷键Ctrl + Shift + X或者Tools>Exectue ...

  4. tensorflow简单记录summary方法

    虽然tf官方希望用户把 train , val 程序分开写,但实际开发中,明显写在一起比较简单舒服,但在保存数据到 summary 时, val 部分和 train 部分不太一样,会有一些问题,下面讨 ...

  5. python 中 __init__方法

    注意1,__init__并不相当于C#中的构造函数,执行它的时候,实例已构造出来了. class A(object): def __init__(self,name): self.name=name ...

  6. GLSL传递数组

    static const char *microshaderFragSource = { "varying vec4 color;\n" "uniform bool te ...

  7. C#简单三层结构设计UI、BLL、DAL、Model实际项目应用例子

    C#简单三层结构设计UI.BLL.DAL .Model实际项目应用例子 在实际项目中,程序设计都有他的层次结构,比如MVC.MVP.普通的三层结构等等,不过现在用三层结构的相比可能少了,但是也有一些小 ...

  8. IOS 圆形进度条

    // // CCProgressView.h // Demo // // Created by leao on 2017/8/7. // Copyright © 2017年 zaodao. All r ...

  9. linux的基本操作(LAMP环境搭建)

    LAMP 环境搭建 经过前部分章节的学习,你已经掌握了linux的基础知识了.但是想成为一名系统管理员恐怕还有点难度,因为好多单位招聘这个职位的时候都要求有一定的工作经验.然而真正的经验一天两天是学不 ...

  10. canvas里设置width和css里设置width和js里设置width的区别

    canvas.width 和 它的style.width是不一样的: canvas是个画布,有他自己的宽和高(默认是没有单位的纯数字),就是canvas.width和canvas.height的宽和高 ...