貌似比较笨啊。用了一个多星期的时间,终于第一次点亮了自己的LED灯,虽然第一次是参考原子哥的程序,用SysTick 定时器产生定时时钟,这块后来自己用了软件延时的方法,得到相同的结果,就是我的LED灯开始闪烁了!
STM32看起来还是很强大的,寄存器太多太多,之前玩51的时候,没有这么多得寄存器,现在仅仅是时钟和复位寄存器就好多个。RCC手册上就有12个相关的寄存器,但是总得来说,可以分块。对应不同的功能,不同场所的运用,这个RCC的作用才体现出来,不然像我这样的菜鸟,他的作用是发挥不出来的。这里主要就是时钟配置的很多种组合。
HIS,HSE什么时候打开,什么时候切换,怎样保护,在安全系统中保持正常的运行,慢慢理解吧!总之这个HIS存在就好好利用,用到再说。
STM32一上来别的不做,所有的功能,连接之间都可以看成一个开关,都有一个寄存器去控制,这样达到了灵活配置。
先说说RCC吧。我们手册上有系统时钟图,我用的时候就是外接8Mhz振荡器,选择HSE作为时钟驱动源,PLL倍频到72Mhz作为System Clock 也就是AHB。之后到这里我们就配置好了我们的系统时钟。高速总线上得时钟。后面的问题也就来了。后面有很多得外设,每种外设都有自己的对应的时候控制开关,必须打开这个开关才能驱动该片山的资源。这里不同时候开启不同的时钟,不用外设可以随时关闭时钟,节能啊。不过也好繁琐啊,慢慢适应吧。
我在配置LED输出的时候,时钟都配置好了,结果忘记了开启PA,PD端口的时钟,导致的是结果和预期的不一致。最后比较了原子哥的程序,才发现问题。修改了,尝试了,才知道问题的所在。
还有GPIO端口我也看了好久,总之呢,在没有自己亲手写好一个程序控制我的STM32单片机工作,我就觉得我写的东西差点东西,但是等到我点亮了我的LED灯,心里就知道了我可以征服它的。
中间有好多的疑问,还好,网上的关于STM32 的学习资料比较多,慢慢研究,自己开始解决问题了。期间好多不懂得,我还研究了一下库包含中相关寄存器之间的关联。后来发现库就是为了识别的,库里写了好多的参数,现在就感觉地址映射和结构体包含的控制寄存器把相关的基础亲弄一块去了,学习学习,以前51的时候,自己从来没有注意过这个问题。很方便啊。体会到了,还有其他的那些个官方的库函数,以后灯寄存器熟悉了慢慢研究吧!我还是比较热衷于寄存器操作,中感觉和底层的硬件打交道有助于自己的分析。一切尽在掌握中得感觉。也便于对硬件的熟悉。
用了一个多星期,白天上完班,晚上回来学习,这个过程是艰辛的,不过好像慢慢习惯了这种生活。看到自己的灯点亮了,我也就知道了STM32整个的工作工程。相信以后的学习会更加的兴奋的,因为可以看到自己的进步了。STM32的学习之路还有很长,慢慢来吧!
加油!加油! |