对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.层叠上下文:是一个名词!是一个性质!此时 ...
随机推荐
- Android Studio添加原生库并自动构建
[时间:2017-09] [状态:Open] [关键词:Android,Android Studio,gradle,native,c,c++,cmake,原生开发,ndk-build] 0 引言 最近 ...
- TensorFlow 图片resize方法
参见这篇博客 tensorflow里面用于改变图像大小的函数是tf.image.resize_images(image, (w, h), method):image表示需要改变此存的图像,第二个参数改 ...
- MYSQL数据库高可用方案探究
MySQL作为最关键的应用数据存储中心,如何保证MySQL服务的可靠性和持续性,是我们不得不细致考虑的一个问题.当master宕机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master ...
- html button 点击 显示倒计时秒数
如下: <html> <body> <input type="button" value="click" id="cli ...
- vs2017离线安装且安装包不占用C盘空间
[参考]vs2017离线安装且安装包不占用C盘空间 第一步:下载离线安装包 https://www.visualstudio.com/zh-hans/downloads/ 在官方地址下载vs_prof ...
- javassist实例
我们常用到的动态特性主要是反射,在运行时查找对象属性.方法,修改作用域,通过方法名称调用方法等.在线的应用不会频繁使用反射,因为反射的性能开销较大.其实还有一种和反射一样强大的特性,但是开销却很低,它 ...
- Vim文档编辑
>##一.vim重复命令 ###1.重复执行上次命令 在普通模式下`.`(小数点)表示重复上一次的命令操作 拷贝测试文件到本地目录 ``` $ ...
- 2. ansible-playbook 条件语句-内部变量使用
内部变量指的是把变量定义在playbook里面或者是执行结果作为变量 循环语句-标准Loops [root@LeoDevops playb]# cat p_loop.yaml - hosts: u12 ...
- A股滚动净利润增速最高排名
最近2年(共8个季度)的滚动净利润都在增长,且平均增速超过10%. 计算举例:滚动净利润增速 = ((2018Q1 到 2018Q4的净利润之和) / (2017Q4 到 2018Q3的净利润之和) ...
- Ext JS 6 入门学习资料大全(2018-03-07)
现在 sencha touch已经升级为 Ext JS 6 了重新整理下资料 官方网站:https://www.sencha.com/ 在线文档:http://docs.sencha.com/extj ...