
STM32学习心得
自接触STM32以来,就一直在学习STM32F103VE这块芯片的内部资源,对其中的部分做了比较深入的了解。其中,对于时钟,GPIO和串口,定时器的使用和代码的编写一直是我主要做的事情。
STM32的时钟来源有很多,诸如HSE,LSI等,这些时钟是晶振或者是RC电路提供的,作为不同的代码,不同的需求,那么对于时钟的选择也会不同。我的代码中最常用的是外部高速晶振,系统的主频由选择的时钟进行倍频等产生,然后再根据不同的外设的需求进行分频提供给外设。STM32F103VE主频为72MHz,不同的开发板上面的外部高速晶振的频率不同,在进行倍频的时候的参数就会不同,其基本原理是通过内部的一些机构进行倍频,例如锁相环等。同时,不同的晶振或者电路,所产生的时钟是不尽相同的,也就是说,时钟的精度是不同的,在对于实时性要求较高的系统中,要对时钟进行较为苛刻的选择和配置。
STM32的串口有比较丰富的功能,这主要体现在和其他资源的配合上面。我做过的串口和DMA结合的方式传输数据,经过测试,是可以较好的实现数据的大量传输和接收的,对于这种方式的数据传输而言,其基本的思路就是提高串口传输数据的效率,让CPU暂时把总线控制权交出来。具体操作中,牵涉到一些DMA和串口的中断的配置等,利用三个中断来实现一种高效的传输机制。
STM32的定时器较为复杂,功能非常多,对于一个系统,如果要实现一种较为高效和实时性的准确的控制,那么就需要启用定时器。对于定时器而言,可以根据外设的不同的要求来启用它的不同的功能,例如捕获,计数,溢出或者是比较匹配,产生PWM波等等。这方面我用到的最多的就是定时一段时间,和产生PWM波以及测频。我做过测频的一个例子,用到内部的两个定时器,这让我对定时器的理解又加深了一步。
在代码的编写方面,我在慢慢的规范自己的代码,一是要规范,二就是要修改以前的一些算法和不合理的地方,逐渐完善自己的代码。
对于STM32F103VE的学习,不止这些,我还在继续学习一些诸如AD准换,LCD显示,SPI,I2C等内容,对于这块芯片的了解也在逐步深入,总之,这块芯片的资源和功能是比较强大的,而对于其内部的一些具体的配置,诸如中断的一些配置等还需要我进一步去了解和掌握。