对stm32寄存器的理解(个人理解,大神轻喷)
学习了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寄存器的理解(个人理解,大神轻喷)的更多相关文章
- [OC笔记]@property之个人理解,大神轻拍
/** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...
- 关于Java8 Stream流的利与弊 Java初学者,大神勿喷
题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...
- javascript深入理解js闭包(个人理解,大神勿喷)
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...
- 学习Swift--枚举的初步认识 --个人备忘 大神勿喷
枚举定义了一个通用类型的一组相关值,使你可以在你的代码中以一种安全的方式来使用这些值. // 定义枚举的语法 enum Chips { // 定义了薯片的枚举,包含了3种口味的成员 case Toma ...
- ComboBox,三级联动菜单,新入门点小白,有些代码有待优化,大神勿喷
//当前窗体的Load事件 private void provinceANDCity_Load(object sender, EventArgs e) { //连接字符串 string strConn ...
- 使用原生ajax访问后台数据并将其展现在前端页面中(小菜鸟自己整理玩的,大神勿喷)
首先你要有php的环境,关于php环境的搭建,php本地站点的搭建,此处不再重复请看这里:http://www.cnblogs.com/Gabriel-Wei/p/5950465.html我们把wam ...
- 二级联动banner【墨芈原创,大神勿喷】
这个banner效果在几个月前都做了,不过因为代码添乱,而且不宜调用就没发布,经过2周时间间间断断的编写,插件终于搞定了,除框架外其它都开源发布,至于框架没给源码是因为还没做好,后期做好了也会发布出来 ...
- C语言简单实现链栈基本几个功能(适合新手看,大神可指正)
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
- 理解z-index和css中的层叠顺序问题(大神技术博的读后感?)
一直对 z-index不太理解,今天看到了大神的博客...http://www.zhangxinxu.com/wordpress/tag/z-index/ 1.层叠上下文:是一个名词!是一个性质!此时 ...
随机推荐
- 如何关闭windows server2012 80端口
Windows Server禁用本地端口的两种方法 这篇文章主要介绍了Windows Server 2008 禁用本地端口的两种方法,本文讲解了通过Windows防火墙禁用端口.通过IP安全策略禁用端 ...
- JVM:Java常见内存溢出异常分析
转载自:http://www.importnew.com/14604.html Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等,而Hotspot jvm的实现中,将堆 ...
- KL divergence
Kullback-Leibler divergence 形式: 性质: 非负 P=Q时,D[P||Q]=0 不对称性:D(P||Q)≠D(Q||P) 自信息:符合分布 P 的某一事件 x 出现,传达这 ...
- SAP Brazil J1BTAX 为税收例外创建税收组(翻译)
很多人对如何维持巴西的税收仍有疑问.前段时间,一家有几个税务问题的公司联系我帮助他们,我发现多年来,由于他们的税务计算系统缺少配置,他们正在进行手动调整. 维持税收的第一条规则是: TAXBRJ = ...
- Http url MVC Request Query Form 传参专贴
一.工具区 [参考]postman中 form-data.x-www-form-urlencoded.raw.binary的区别--转 二..net MVC 三..net WebForm 四.Java ...
- 如何建立nfs网络文件系统
建立网络文件系统的前提:windows与linux虚拟机及开发板三者之间能够互相ping 通. 三者互ping通IP设置举例: 1. 首先,关闭windows的防火墙,然后通过:ufw disab ...
- python @staticmethod和@classmethod的作用
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ...
- Spring框架介绍及使用
Spring框架—控制反转(IOC)1 Spring框架概述1.1 什么是Spring1.2 Spring的优点1.3 Spring的体系结构2 入门案例:(IoC)2.1导入jar包2.2目标类2. ...
- 【奇淫技巧】API接口字段table文档转代码工具
今天做一个视频接口对接,发现对方提供的文档没有json格式,无法自动生成请求和响应对象 json自动生成C#类的工具 http://tool.sufeinet.com/Creater/JsonClas ...
- Spark Streaming之dataset实例
Spark Streaming是核心Spark API的扩展,可实现实时数据流的可扩展,高吞吐量,容错流处理. bin/spark-submit --class Streaming /home/wx/ ...