野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 716|回复: 34
打印 上一主题 下一主题

记录STM32学习过程,希望坚持下去!

[复制链接]
跳转到指定楼层
1#
发表于 2020-7-19 17:19:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
成功使用自己编写的库函数实现了点亮RBG灯,通过自己编程,清晰了每个函数具体是配置的是哪一个寄存器REG,并且学习了C语言中的宏,文件调用,枚举类型,结构体类型的语法,提高了继续学习下去的动力和决心,加油!
回复

使用道具 举报

2#
 楼主| 发表于 2020-7-19 19:26:59 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-30 22:27 编辑

  “自己写库--构建库函数雏形”成功渡过,跟着火哥step by step,从直接操作内存进行寻址,到使用register map将寄存器(REG)与内存建立起一一对应的关系,从而操作寄存器,再到将[对寄存器的操作]封装成一个[函数](系统或网络)。
这种progressive的方式让我明白了,对封装得到的函数进行操作,本质上就是对内存进行操作,所谓对内存进行操作,就是通过总线来访问内存中的数据,此处访问(access),就是指读或写。
  在9-4节中,火哥使用‘宏macro’提高了程序的可移植性,让我再一次认识到了宏定义的重要性。个人认为最重要的点是三个主要函数,GPIO_Init,GPIO_SetBits,GPIO_ResetBits,正如上文我所说,函数实现的功能说到底都是对内存进行操作。而寄存器不过就是【被开辟的】一块内存空间,拿上述的三个函数来举例,GPIO_Init函数就是对寄存器GPIOx_CRL或者GPIOx_CRH进行读写,GPIO_SetBits函数就是对寄存器GPIOx_BSRR进行读写,GPIO_ResetBits函数就是对寄存器GPIOx_BRR进行读写。
另外我想表达的一点就是,这个函数,就是能够实现一定功能的网络或系统,在这里函数的功能就是将【包含碎片化信息的入口参数】整合成为【能够写进特定specified寄存器的32bit有效的二进制序列】。如果大家观察地仔细的话,会发现我们确实通过函数来操控寄存器,在函数体中也的确可以印证这一点,但是函数的brief简介中,对寄存器的概念避而不谈,感觉这一点也印证了该代码团队的初衷,就是为了节省大家的时间save time,省去大家查找寄存器的时间。


根据CPU与I/O端口交换信息的编址方式可知,STM32的编址方式为统一编址。
最后用钱学森爷爷的话来激励自己:“不要失去信心,只要坚持不懈,就终会有成果的。”


回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2020-7-19 20:34:02 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-30 22:49 编辑

10看完了,但是懵懵懂懂,等会跑完步回来翻一翻固件库的.c和.h文件

2020.7.30更
一般来说,首先需要关注的是头文件.h,头文件中包含了该接口电路中所有的函数原型(functions prototypes),以及这些函数原型(functions prototypes)所需要结构体类型的入口参数
如果想要了解这些函数具体详细的功能,就要到.c文件中去找具体的函数brief和入口参数的介绍
回复 支持 反对

使用道具 举报

4#
 楼主| 发表于 2020-7-20 00:03:45 | 只看该作者
又把书和具体和固件库文件STM32_STPeriph_Lib看了一遍,觉得这无非就是一些相互对应的文件,关键在与libraries中的inc里面的头文件和src中的源文件,以及一些外设的缩写和命名规则
另外,遇见不懂的但是不太重要的东西应该拿得起放得下,不要让一些边边角角的东西而放慢了你学习的脚步。

野火论坛202007200001218161..png (252.74 KB, 下载次数: 2)

野火论坛202007200001218161..png

野火论坛202007200001292022..png (338.74 KB, 下载次数: 1)

野火论坛202007200001292022..png

野火论坛202007200001537588..png (90.36 KB, 下载次数: 0)

野火论坛202007200001537588..png
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2020-7-20 00:09:05 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-20 00:31 编辑

2020.7.20要开始复习六级了,所以目标就定在完成第11,12讲的视频和程序以及阅读书上的内容。
加油,奥里给干了兄弟们!
再来一句鸡汤激励自己:种一棵树最好的时间是十年前,然后就是现在!
晚安,兄弟们!
回复 支持 1 反对 0

使用道具 举报

6#
 楼主| 发表于 2020-7-20 18:29:15 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-20 18:41 编辑

渡过11讲!把11讲-新建工程-固件库版本的工程模板的configuration弄好了,就像火哥说的那样,由于用库新建工程的步骤较多,一般是使用库建立起来一个空的工程as a project template,以后直接复制一份工程模板在它之上进行开发即可。
在以前的基础之上,希望今晚能够把12-GPIO输出-使用固件库点亮RGB灯完成视频和代码并调试成功。
回复 支持 反对

使用道具 举报

7#
发表于 2020-7-20 23:11:14 | 只看该作者
加油
回复

使用道具 举报

8#
 楼主| 发表于 2020-7-21 13:11:37 | 只看该作者
效率很低地complete the Section 12,完成了RGB排列组合得到的7种颜色的流水灯,Section 12的定位应该是重温以前的知识,并且自己通过头文件的函数声明来寻找函数原型,并且会读函数原型中的入口参数,通过brief了解function的function,自己通过仔细阅读RCC_APB2PeriphClockCmd函数标注了一些知识点。

野火论坛202007211309205647..png (943.88 KB, 下载次数: 1)

野火论坛202007211309205647..png
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2020-7-21 13:15:25 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-22 10:53 编辑

通过阅读火哥的书,其中有关于GPIOx接口的位操作的知识点,于是又和微机原理中的接口电路中的知识点进行了一些联系,思考了一下GPIO的本质,并且得到了GPIO(Genral Purpose Input/Output)就是Integrated I/O Interface Circuit(将输入输出接口集成在一起的接口电路)的结论,所以我暂时理解GPIO为GPIO接口电路,至于为什么叫做接口电路而不叫端口,因为往往习惯于将多个端口(寄存器)的集合叫做接口,不过这些问题无关大局,STM32F103指南者系列有A,B,C,D,E共五个GPIO接口电路,如果以后发现自己的理解有出入,会及时进行更改。并再次回顾了引脚普适的GPIO_Pin_x宏定义的含义,总结出来一些没有什么用的东西。
另外在STM32中有一点很重要,在STM32user manual中,8.1一节【GPIO功能描述】中图片表示的仅仅是GPIOx(5个GPIO接口电路中的一个)的16位引脚中的一位引脚,该接口电路中的寄存器组{BSRR,BRR,ODR,IDR,CRL,CRH,LCKR}控制着这16位引脚,并且由于有5个GPIO接口电路,所以就有5组寄存器组{BSRR,BRR,ODR,IDR,CRL,CRH,LCKR}。这5组寄存器组分别控制着80位引脚,通过此番思考,我也理解了为什么STM32拥有着不俗的性能,这就好比如果一只章鱼有80只触手,并且都可控,则其威力不可小觑。首先,我对内存地址统一理解成为由上至下从0x0000 0000到最后的地址,依次增大,并且每一个地址都对应的存储1Byte=8bit的数据。
另外,STM32工作在小端模式Little-Endian,就是低位字节存放在内存的低位地址,高位字节存放在内存的高位地址,对于每一个数据来说,数据内部本身可以分成高位和低位,由此可以理解为对每个数据都由低位到高位进行排列的一种模式。

作为对比,还有一个大端模式Big-Endian,就是低位字节放在内存的高位地址,高位字节放在内存的低位地址。

野火论坛202007211328258895..png (210.07 KB, 下载次数: 0)

完整的I/O设备,I/O接口电路(端口或网络),CPU的关系

完整的I/O设备,I/O接口电路(端口或网络),CPU的关系

野火论坛202007211316028885..png (166.65 KB, 下载次数: 0)

引脚宏定义

引脚宏定义

野火论坛202007211316163562..png (156.26 KB, 下载次数: 0)

抽象端口网络

抽象端口网络

野火论坛202007211328172761..png (47.12 KB, 下载次数: 0)

输入输出和CPU的关系

输入输出和CPU的关系
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2020-7-21 13:17:45 | 只看该作者

感谢WishWish的鼓励,我会努力的!
回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2020-7-21 13:33:45 | 只看该作者
希望今晚之前能完成13讲按键检测和14讲GPIO输出和输入的视频和代码,并且希望我自己不要再玩游戏了,希望这个暑假硕果累累!
回复 支持 反对

使用道具 举报

12#
 楼主| 发表于 2020-7-21 17:57:29 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-21 18:58 编辑

我的朋友们,时间就是金钱,而我们快破产了!
回复 支持 反对

使用道具 举报

13#
发表于 2020-7-21 21:24:19 | 只看该作者
加油!!!
回复

使用道具 举报

14#
 楼主| 发表于 2020-7-21 23:53:57 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-22 10:54 编辑

20:00左右就已经把视频和代码写完了,但是还是在火哥的讲解下完成的,代码的前半部分是自己写的,卡了一个下午,复习了C语言中的宏定义,带参宏,条件定义等概念,又复习了函数调用,函数原型的声明等基础知识,最后也是跌跌撞撞,懵懵懂懂的完成了。
明天打算把入门篇的最后一讲启动文件的视频和代码弄完后就开始总结入门篇的所有知识点,再巩固一下库函数版本的编程思路,再熟悉熟悉怎样在头文件中找各种参数,就暂时计划这些。
另外,今天成绩排名出来了,中等稍微偏上,还有两年,希望能再努努力,积极参加一些比赛,多加强自己的科创能力以及在实践中巩固以前的基础知识,在实践种学习。
自知天分不足,希望能尽自己最大的能力逐渐逼近自己满意的目标。
兄弟们,一起加油吧!
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2020-7-21 23:54:19 | 只看该作者

谢谢兄弟的鼓励,我会继续加油的!
回复 支持 反对

使用道具 举报

16#
发表于 2020-7-22 11:29:11 | 只看该作者
cool 精华帖
回复 支持 反对

使用道具 举报

17#
 楼主| 发表于 2020-7-22 11:33:22 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-22 12:10 编辑

又看了看位带操作的章节,发现这章的基础在于对寄存器映射的正确理解,然后就只剩下,“哇,STM32也能进行位操作?”,“嗷,这不就是通过一个统一的公式来寻找在32MB的位带别名区的那个位嘛,然后改一改就可以了”。位带区(bit band)和位带别名区(bit band alias)两者的关系相当于Onedrive的云盘一样,在Ipad上修改会影响Onedrive中的文件,同样在Onedrive上修改也会影响Ipad上的文件。
就像火哥说的那样:“一切的恐惧都源于无知”。

野火论坛202007221129315616..png (583.57 KB, 下载次数: 0)

野火论坛202007221129315616..png

野火论坛202007221129443677..png (74.1 KB, 下载次数: 0)

野火论坛202007221129443677..png

野火论坛202007221129551633..png (178.27 KB, 下载次数: 0)

野火论坛202007221129551633..png

野火论坛202007221130049387..png (368.83 KB, 下载次数: 0)

火哥为了让大家好理解,说了一句很重要的话:一个地址对应一个字节,此图是寄存器在内存中的映射概念 ...

火哥为了让大家好理解,说了一句很重要的话:一个地址对应一个字节,此图是寄存器在内存中的映射概念  ...
回复 支持 反对

使用道具 举报

18#
 楼主| 发表于 2020-7-22 11:35:12 | 只看该作者

火哥!我竟被翻牌了,我太开心了!
回复 支持 反对

使用道具 举报

19#
 楼主| 发表于 2020-7-22 22:07:49 | 只看该作者
今天算是马马虎虎地完成了入门篇的所有课程,卡在启动文件那一讲浪费的时间太多了,自以为本学期基于X86的汇编语言学得不错,但是遇到基于ARM的汇编语言,有些语法是不太相同的,现打算不再深究启动文件,向中级篇进发!
以后如果用到原先学的知识,再回头查漏补缺。绝不能耽误进度!
回复 支持 1 反对 0

使用道具 举报

20#
 楼主| 发表于 2020-7-27 15:21:24 | 只看该作者
宏定义分类:
1.对象宏#define A ...          ,A是宏
2.空宏#define A                 ,A是宏
3.类函数宏#define F(a) .....,F(a)是宏

野火论坛202007271521172083..png (212.89 KB, 下载次数: 0)

野火论坛202007271521172083..png
回复 支持 反对

使用道具 举报

21#
 楼主| 发表于 2020-7-27 15:32:14 | 只看该作者
CLOCK TREE时钟树
STM32共有5个时钟源:
1.HSI;high speed internal clock高速内部时钟;在时钟树中可以发现内部时钟全部都是RC串并联正弦振荡电路,RC串并联电路为选频网络兼正反馈网络,还搭配基本放大电路【负反馈同相放大电路】
2.HSE;high speed external clock高速外部时钟;外部时钟通常使用简单便捷的晶振,实际上,只要能提供所需要的时钟,用任何的外部时钟都是可以的
3.LSI;low speed internal clock低速内部时钟;同上
4.LSE;low speed external clock低速外部时钟;同上
5.PLL;phase-locked loop锁相环,其作用仅为倍频;锁相环可以说,原理极为复杂,作用极为简单

野火论坛202007271531538073..png (1.28 MB, 下载次数: 0)

野火论坛202007271531538073..png

野火论坛202007271532019455..png (851.96 KB, 下载次数: 0)

野火论坛202007271532019455..png

野火论坛202007271532097812..png (664.25 KB, 下载次数: 0)

野火论坛202007271532097812..png
回复 支持 反对

使用道具 举报

22#
 楼主| 发表于 2020-7-27 15:35:53 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-27 15:36 编辑

在对时钟进行编程时,我们会发现,配置的都是interface(接口的时钟),我们可以理解接口是一个人,然后接口中的各种寄存器(端口)是这个人的所有器官,时钟是这个人的心脏产生的脉搏,由脉搏使得所有的器官正常运转。

野火论坛202007271535471157..png (888.74 KB, 下载次数: 1)

野火论坛202007271535471157..png

野火论坛202007271536535333..png (179.81 KB, 下载次数: 0)

野火论坛202007271536535333..png

野火论坛202007271536471302..png (465.57 KB, 下载次数: 0)

野火论坛202007271536471302..png
回复 支持 反对

使用道具 举报

23#
 楼主| 发表于 2020-7-27 15:38:04 | 只看该作者
前两天发的帖子的数据都丢失了,我很伤心,完全没有那两天的灵感了,只能将就着重新写一下
回复 支持 反对

使用道具 举报

24#
 楼主| 发表于 2020-7-27 17:06:32 | 只看该作者
今晚把EXTI代码写完,一起总结一下中断的知识
回复 支持 反对

使用道具 举报

25#
发表于 2020-7-27 17:51:48 | 只看该作者
加油 加油  ......
回复 支持 反对

使用道具 举报

26#
发表于 2020-7-28 09:17:58 | 只看该作者
加油加油
回复

使用道具 举报

27#
发表于 2020-7-28 15:33:13 | 只看该作者

加油加油
回复

使用道具 举报

28#
 楼主| 发表于 2020-7-30 22:28:43 | 只看该作者
本帖最后由 Richard_Winters 于 2020-7-30 22:29 编辑

最近学习知识遇见瓶颈了,我的确需要抓抓紧了。立flag,8.15日前完成中级篇。
不管怎么说我基础知识还是可以的,有这个信心。
回复 支持 反对

使用道具 举报

29#
 楼主| 发表于 5 天前 | 只看该作者
今晚差不多能把USART整个弄完,加油,奥里给!弄完USART就立马阶段性总结一下!总结可能会迟到但永远不会缺席!
回复 支持 反对

使用道具 举报

30#
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 Richard_Winters 于 2020-8-4 10:30 编辑

概述:NVIC(中断嵌套向量控制器),控制着关于中断请求信号的所有属性。NVIC不会对中断向量表和中断服务程序产生任何影响,因为中断向量表和中断服务程序的位置是固定的,全部都是存放在内存当中的。
了解一个外设,就要从初始化结构体NVIC_InitTypeDef开始:
1.严肃一点来说:
NVIC_IRQChannel;选定是哪个中断请求信号,类似于中断类型码,根据中断类型码就可以直接找到中断向量表中,中断向量的地址
NVIC_IRQChannelPreemptionPriority;设置选定的中断请求信号的主优先级
NVIC_IRQChannelSubPriority;设置选定的中断请求信号的子优先级
NVIC_IRQChannelCmd;设定该选定的中断请求信号是否能够触发中断服务函数
通过NVIC_Init函数实现上述设定。
另外,设置主/子优先级,就势必会涉及到优先级的范围的设定,并且必须最先设定优先级的范围
问:如何设置优先级的范围呢?
答:通过优先级分组函数NVIC_PriorityGroupConfig来设定主/子优先级的范围;
2.戏谑一点来说:
身为中断向量嵌套控制器的NVIC,是众多中断服务程序(ISR)的经纪人,每个中断向量服务程序(ISR)都是中断圈的大名人,并且这些大名人的地址都在一个叫做中断向量表的地方,
时不时的就有一些朋友来请他们开演唱会,吃饭,NVIC为了保证自己的艺人能够整齐划一,按照规律的进行一系列活动,
就会将圈外朋友们发送过来的中断请求进行分级,不仅可以分级,还可以让某些中断请求信号无法触发中断服务函数。

野火论坛202008032128161378..png (450.73 KB, 下载次数: 0)

野火论坛202008032128161378..png

野火论坛202008032129122313..png (1.32 MB, 下载次数: 0)

野火论坛202008032129122313..png
回复 支持 反对

使用道具 举报

31#
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 Richard_Winters 于 2020-8-3 21:48 编辑

说好听点,NVIC是一个控制器,控制着中断请求信号的属性
说不好听点,NVIC就是一个保安,让不让IRQ触发ISR,IRQ是第几个触发
讲完了保安,该讲讲ISR了
1.ISR的入口地址叫做中断向量,中断向量是32bit,指明了ISR在内存的具体位置,由这些中断向量组成了中断向量表,中断向量表从内存中的最低位0x0000 0000开始存储,中断向量表中的内容就是ISR的入口地址
说白了,中断向量表就是个ISR入口地址的集合
2.再具体一点,问:ISR这个服务程序的函数定义是怎样的呢?答:函数定义是自定义的
在stm32f10x_it.c文件当中,想怎么写就怎么写,唯独需要注意的就是函数名
函数名就是地址,就是ISR的入口地址,如果函数名起得不对,就会找不到这个函数,所以函数名一定要写对,这个概念可以从启动文件(汇编源文件.s)中找到

野火论坛202008032141223720..png (235.71 KB, 下载次数: 0)

野火论坛202008032141223720..png
回复 支持 反对

使用道具 举报

32#
 楼主| 发表于 4 天前 | 只看该作者
本帖最后由 Richard_Winters 于 2020-8-4 10:55 编辑

EXTI(外部中断/事件控制器),我对产生事件不熟悉,这里只谈产生中断
可以清晰地看到,EXTI中断一支直接连接NVIC控制器,所以它在中断一支,天生就是用来传输中断请求信号,他的使命,命运就是传输中断请求信号
EXTI的输入有很多,具体细节不赘述,被EXTI选中的输入,就是中断源,有可能EXTI输入源也就是中断源本来不是很想成为中断源,但是没有办法,它被我们选中了
被选中的信号的使命就是作为中断源。
问:如何产生中断请求信号?答:通过设置上升沿出发选择寄存器或下降沿触发选择寄存器,根据中断源信号的变化,可能是上升沿来临时产生中断请求信号,也可能是下降沿来临时产生中断请求信号,
也可能是上升沿,下降沿来临时都会产生中断请求信号,这些信号被送到NVIC当中进行排队。在这里分享一下使用固件库函数来编写ISR

野火论坛202008032205078803..png (277.88 KB, 下载次数: 0)

野火论坛202008032205078803..png

野火论坛202008032205285133..png (316.31 KB, 下载次数: 0)

野火论坛202008032205285133..png

野火论坛202008032208202736..png (25.81 KB, 下载次数: 0)

野火论坛202008032208202736..png

野火论坛202008041055309808..png (1.31 MB, 下载次数: 0)

野火论坛202008041055309808..png
回复 支持 反对

使用道具 举报

33#
 楼主| 发表于 4 天前 | 只看该作者
今天USART第五节完成,预计明天可以将整个USART代码和概念基本搞清,可以把总结完成,8.5要开始复习考试课程了,开学考完试会加快进度的!
燃烧吧!我的青春!
回复 支持 反对

使用道具 举报

34#
 楼主| 发表于 3 天前 | 只看该作者
理科学生最应该培养什么能力?
私以为是:1.好读书,读好书的自学能力;2.坐得住板凳
回复 支持 1 反对 0

使用道具 举报

35#
发表于 6 小时前 | 只看该作者
理科生这字写的比文科生还漂亮啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|站点地图|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 ) 大学生ARM嵌入式2群

GMT+8, 2020-8-7 17:40 , Processed in 0.188551 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表