自从看到有stm32f4的活动后,看了好几天的资料,今天就说说我个人入门的一些经验。对于一个新的芯片,我想首先应该考虑的是从哪些开始....换一句话,就是怎么才算正式入门了,为此我说一下我自己的看法。我个人觉得对于一个芯片只有熟悉了时钟系统,GPIO口和定时器(包含中断),才算正式对于这个芯片入门,至于其他的一些可以在需要的使用的时候,可以再去仔细的了解。当然,这里肯定有一个基础的要求了,就是要会使用这个芯片的IDE软件了。为了详细的讲解我个人的看法,我把这篇文章分为3章,第一,学习一个芯片需要哪些东西;第二,stm32f4的时钟系统,GPIO口和定时器的使用;第三,总结。最后在开始前,先ps一下,自从高考后,语文就已经交给语文老师了,请不要过度关注语法和错别字,只要东西讲解清楚就好了 |
【stm32F429开发日志】STM32F429上 NES 模拟器 移植 试玩
【小“福”蝶赏灯展+Nucleo-STM32F410】
读书感悟--STM32库开发实战指南——基于STM32F4(有空更新)
【STM32F429心得\疑问】+STM32学习心得(新手必看)
【我要为STM32站台】+基于STM32F4的视觉追踪系统
【我要SHOW】我的STM32F411
【我要show】+STM32F407+我爱ST
【我与STM32共成长】+脚踏STM32F1和STM32F4两条船
[线下活动] STM32F4与STM32L4系列功耗对比分析与测试
[STM32粉丝狂欢节开箱]STM32F410和L432
RE:【STM32F429心得\疑问+STM32F429入门
那么在找这些芯片资料,或许说了在学习芯片的时候,会遇到一些最简单的问题,那就是专业词汇的意思。本来想把这章用来介绍stm32f4里面的一些专业词汇讲解的。但是考虑,专业词汇是在一边学习芯片的时候,才会遇到。那么,我就在讲解过程中在一一提及。
一个芯片的开始,肯定是编译器的开始,stm32f4有很多,我用的是keil,如何去使用一个没有接触过的软件,百度直接就可以找到....但是一般的软件教程都会有些缺陷,换一句话说就是,只会告诉你如何使用,但是一些芯片的设置,和一些具体东西却没有怎么说。为此,这里可以有一个非常简单的办法,那就是直接到官网下载一个这个芯片的例子,然后打开它的设置,就可以很清楚的看到自己需要设置哪些东西。
在keil软件里面,很多人都在初次编译的时候,遇到两个问题,就是一个定义和路径的问题。如下图:
上面的图,有两个设置,第一个是定义问题。但是,我刚开始和大家一样,只知道必须这样去设置,但是却不知道为啥。不过任何问题都要了解的非常清楚,才可以好好的开始自己的项目。
USE_STDPERIPH_DRIVER-》这个就是一个定义,那么它有什么用呢,这个是用来使用库文件的,如果需要使用库文件,就需要加这句话,如果不使用,就不需要。如下图:
这句话是包含在stm32f4xx.h头文件里面的,从里面很简单的就知道,定义了这个,就可以使用官方提供的库,否则就没法使用。
STM32F4XX-》这个也是定义,也是从stm32f4xx.h头文件可以找到。不过,貌似有点问题,这个怎么说呢,算是一个选择芯片的型号的吧,就是与自己选择芯片型号有关系的。
第二个设置,很简单了,就是路径的问题,就是你这个项目需要使用的头文件的路径了。比如你需要使用到库、自己定义的头文件等等,那么加入这些库的头文件,就可以了。
最后,这章算是讲解完了,不知道讲解清楚了没有...总的来说,就是去网上找一切资源。从网络上获取自己需要的资源.....
RE:【STM32F429心得\疑问+STM32F429入门
那么,很多人就说,是从库开始,还是从寄存器开始呢。我是这样子的,从寄存器开始,但是库也不要去不管,比如我需要设置某个东西,我可以把库直接打开,看里面怎么设置的,然后自己去设置,或者说直接使用库。这样可使自己非常了解芯片。不过这就需要非常好的耐心,去看人家写的库,有时候非常难去找自己想要的东西,最简单的一个办法是,如果要找这个函数的实现,可以用keil的搜索这个函数的名字,这样就可以非常容易的找到啦。
最先了解芯片的,肯定要从时钟系统开始,时钟相当于动力,了解它,就可以了解真个过程。由于我的代码都是用寄存器在做,所以我会讲的非常仔细。时钟的大致走向,可以用从寄存器手册上找到,如下图:
从上图一眼就可以看,整个时钟的分布,以及走向,那么在程序在使用的时候,最新开始的就是时钟的设置了。设置过程如下:
1、复位寄存器CR、CFGR和CIR。
2、打开HSE,并等其就绪。
3、设置APB1、2不超过45MHz、90MHz。
4、设置PLL的倍频系数和时钟源。
5、打开PLL,并等PLL锁定。
6、设置PLL为系统时钟。
在这里,大家会发现,stmf4的时钟与其他系列的stm32有些不一样,因为这里的设置PLL是独立的寄存器RCC->LLCFGR。不过在整个设置过程中大家一定要注意设置APB1和APB2,因为这两个有要求,就是不许超过45M和90M。至于这个过程的实现代码,如果谁需要,大家可以去群里面找我要,我在这里就不拿出来了。因为,我觉得东西尽量自己实现会比较好。当然还有一个原因就是因为我自己写也不知道对不对因为木有板子,虽然在stm32f0上成功了的,不过设置是不一样的,过程我想都应该差不多的吧。
然后就是定时器了,涉及到定时器,首先肯定是中断和中断的优先级。stm32中断的有很多个,优先级必须要要设置。两个优先级的概念——抢占式优先级和响应优先级,怎么来说这两个优先级呢,两个中断同时来了,首先考虑的是抢占式优先级,谁高处理谁,一样就考虑响应优先级,也是谁高处理谁,如果也一样咋办,就按照优先级的顺序来,这个顺序在寄存器手册上有,当然,在startup_stm32f429_439xx.s文件里面也有。如下图:
这里面的代码是用汇编写的,从里面可以获取两个信息,除了顺序外,还可以获取每个中断的名字,那么在使用中断函数的时候void XX(void),其中的xx就是用上面直接替代就可以了。
我使用的time7定时器具体的设置过程如下:
SCB->AIRCR= 0xFA050000 | 0X400; //设置分组
NVIC->IP[55] = 0x80; //设置 NVIC->ISER[1] |= (1PSC = 0X0059; //89+1->1Mhz
TIM7->CCR1 |= 1; //Open Cnt
这个是设置定时器7,每1ms中断一次,时钟的频率是90MHz,注意是定时器时钟,和整个程序的180MHz时钟不一样。这里的定时器时钟也就是APB2的设置,从第一个图也可以看的出来。在这里大家肯定注意到了,SCB、NVIC这两个寄存器,这是ARM手册的,在寄存器手册看不到,可以从M4内核手册上找到这两个寄存器。关于抢占式优先级和响应优先级,就是靠的这两个寄存器设置的。具体的可以百度,因为讲解的话,需要非常多的篇幅了
最后就是GPIO口了,这个是所有中最简单的一个了,但是STM的芯片比什么51,PIC的GPIO设置都要复杂,因为这里面涉及到输出速度,还有各种IO口的类型,什么模拟输入,浮空输入等等,具体啥,大家百度下,资料讲解非常详细。设置过程如下:
1、使能GPIO的时钟(RCC)
2、设置相应的IO为输入还是输出(如果是输出需要设置速度,速度大于50MHZ,需要开启补偿单元SYSCFG),输入输出类型,上拉还是下拉。
3、最后就是设置复位寄存器,还有输入输出的数据寄存器了。
到这里,总算是讲解完了,不知道有没有讲明白。
RE:【STM32F429心得\疑问+STM32F429入门
再次,最后说一下,对于一个初次接触的人来说,最好是多使用百度,上面有你想要的一切资料。多看看官方的库,或许有点枯燥,但是总会有些收获的。。。。。。
RE:【STM32F429心得\疑问+STM32F429入门
RE:【STM32F429心得\疑问】+STM32F429入门
回复:【STM32F429心得\疑问】+STM32F429入门
谢谢分享