stm32学习笔记①

来源:互联网 发布:java.util.calendar 编辑:程序博客网 时间:2024/06/09 18:59

中断和时钟树

       第一次的博客,在学习stm32的过程中做些记录,以便日后参考和纠正。这篇的主题在中断和时钟树,学习到现在,大概加起来不到一周的时间,了解了一些基础的功能和外设。到现在为止的话,印象最深刻的部分,可以说是stm32的中断和时钟树。在阐述概念的部分不想赘述,花几分钟查一下技术手册或者随便百度一下,这些都是及其容易获取到的部分。

中断部分

     先说中断,这几天一直在研究中断,关于中断嵌套的问题,还是花了不少时间捋顺的,尤其是系统中断和外设中断之间的关系,废话不再多说进入正题。

     首先,关于中断优先级,最重要的部分,一定要搞清楚中断优先级寄存器,这一部分其实是在CM3的部分。CM3内核采用8bit来存放中断优先级(【7:0】),而在stm32中,并没有完全用到这8bit,以stm32f103zet6为例,这个芯片的每个中断优先级中,只用到5bit来表示中断优先级,而这5bit在不同的中断组中分配了不同的bit(位数)分别给抢占式优先级(pre-emption priority)和响应式优先级(subpriority),所以说,事实上在是stm32f103zet6中,只使用了5bit,即CM3中原有的【7:0】中的【7:3】,而剩下的【3:0】是并没有使用的部分。而这个寄存器中储存的数据,就是判断中断优先级的标准。

      举例来说,假设我选择的中断组是group 2,那么这个时候,我有2bit的抢占优先级(0-3),2bit的应答优先级(0-3)。那么我如果给我的一个外设1这样分配中断优先级

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

     给我的外设2这样分配

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

      那么这个时候,外设1的优先级低于外设2

      还有一点要注意的就是,抢占优先级相同时是无法进行中断嵌套的。

      可以回过头来看core_m3.h这个文件,关于中断优先级的所有基础配置都在这个文件里,我们调用的只是他的顶层的一些东西,所以说,学库函数开发的时候其实是从根本一起学,带着寄存器一起学。

      时钟树部分

       所谓时钟树,一张图解决


      时钟树是什么?这就是时钟树,重点在哪?红框的部分,哪个外设挂载在哪个时钟上,一目了然。弄懂而不是死记硬背,各种分频倍频很烦,用的时候来查就好了。


原创粉丝点击