如何学习stm32
好多人学习stm32 就是看视频,我的意思也不是看视频不对,看视频的确能够快速的让我们用上stm32的那些功能,即使我们不会懂其中的原理,但是当你学着学着你就感觉越来越恼火了,没有那些参考就不知道如何来处理,为什么呢?
不知道有没有小伙伴有没有这样的感觉,就是看人家写代码就知道怎么按某些步骤写下去,但是到了自己就不知道怎么办了,完全没有头绪…
eg:STM32f103
的 PC13
脚。
就像开启一个GPIO,来点灯
- 开启对应gpio的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
- gpio初始化,初始化前你学要定义好结构体
GPIO_InitTypeDef
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
- 然后初始化GPIO.
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_13); //这句可以不要
4.然后在主函数调用初始化函数,对其进行初始化。
5.最后是使用 GPIO_ResetBits(GPIOC,GPIO_Pin_13);
就可以点亮一颗灯了。
具体如图:(图中没有把它点亮,在主函数中加入led_on();就可以点亮灯了)
看到这里,小白觉得,哇!这么简单就点灯了!大佬觉得这么简单你也说,这么简单谁学一下也会啊!关键和标题有啥关系,标题党,死狗,想盘我!
重点来了
- 上面看着简单,但是我们不禁会想:他到底是怎么实现的?
- 为什么我们要开启时钟。
- 为什么我们要初始化GPIO。
- 结构体里的那些值怎么来的,不同值有什么不同?
- 那个
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
又是哪来的???
很多教程都教你这么干,说配置时钟,配置寄存器…但是连你自己都没有试试没个的下效果,建议你去试一试。
1.首先必要的基础你应该了解
- GPIO是什么。
- 寄存器是怎样的。
- RCC_APB2PeriphClockCmd,时钟线的来源
(有人回想为什么是APB2呢?这是你就需要查stm32Fxxxx参考手册了),那前面的那些不用初始化吗?时钟有几个?怎么了处理??其实前面的系统函数已经完成了,具体在哪看下面。
/*进入主函数前已经完成微控制器时钟设置, 这是通过从启动调用的SystemInit()函数完成的文件(startup_stm32f10x_xx.s)之前分支到应用程序main。要重新配置SystemInit()函数的默认设置,请参阅system_stm32f10x.c文件*/
可以看到,SystemInit比mian先run。
在SystemInit()函数中,设置了相关的时钟,
。。。。。。。。。。。。。。。。。。。
讲这么多,我就是想表达一个意思:
点灯要点的有意义,弄懂基本概念与原理,为什么要这个样子。一步步慢慢来,不然你永远就只有复制代码,能实现但是不懂为什么是这样子的。
2.那我们如何一步步的去弄明白呢?
-
时不时看看基础 c语言.
C语言学习网站 -
前面已经说了一个《参考手册》,必备资料。
-
库函数手册
-
还有一个最重要的那就是:stm32f10x_stdperiph_lib_um.chm(很多人都没有在意这是啥?这就是你们下载的标准库里面的说明文档,就是教你如何使用的,虽然是英语的,但是这个教你如何去使用每一个外设。)
-
百度,和论坛。
-
多看看别人的代码,多自己敲敲代码。写代码要规范
-
从创建工程开始,每一个驱动函数最好自己上下手。(创建工程也要规范弄清楚每个部分)eg:
文件夹中布局
keil中布局
- 观看视频,一定要动手撸代码。
- 干几个项目,这样才能逼着你成长。
以上代表个人的看法,可能我写的没那么好,但是请记住:
知其然,更要知其所以然。
最后
stm32是挺恼火的吗,但是我们chinese people so niubi 。在新的佩奇年里,我们会更好。为伟大中国梦而奋斗!