博客首页 | 排行榜 |

bjtuxiaolong的博客

从0开始学STM32

个人档案
博文分类
中断...  2009-01-24 16:19

中断当初觉得有点麻烦···

不过受够了例程里面那样的延时方法,纯靠经验了,尝试了一下SysTick设置,允许了系统时间中断,这样就就可以准确的设置延迟时间了...

不过对CPU利用率就不好说了,毕竟中断的处理还是很麻烦的一件事情,尽管STM32对中断进行了优化。

Cortex-M3的内核中包含一个SysTick时钟。SysTick 为一个24位递减计数器,每经过1个系统时钟周期,计数值就减1。计数到0时,SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断。

在处理中利用Delay(nTime)延时函数,同时用SysTick作为定时时钟,设定每1ms产生一次中断,在中断处理函数里对nTime--,在函数中循环检测nTime是否为0,不为0则进行循环等待;若为0则关闭SysTick时钟,退出函数。

这样就可以精确实现延时了。

这里还得说STM32的库函数强大....所有的中断处理函数都包含在stm32f10x_it.c文件里,只要配置好中断类型,然后在中断处理函数里相应的函数里面写处理函数就好了。

/*******************************************************

* Function Name  : Delay

* Description    : 插入延时时间

* Input          : nTime: 延时时间以ms为单位

* Output         : None

* Return         : None

********************************************************/

void Delay(u32 nTime)

{/* 允许SysTick计数 */

  SysTick_CounterCmd(SysTick_Counter_Enable); 

  TimingDelay = nTime;

  while(TimingDelay != 0);

  /*禁止SysTick计数 */

  SysTick_CounterCmd(SysTick_Counter_Disable);

  /* SysTick计数清零*/

  SysTick_CounterCmd(SysTick_Counter_Clear);

/***************************************************

* Function Name  : SysTickHandler

* Description    : 中断处理

* Input          : None

* Output         : None

* Return         : None

***************************************************/

void SysTickHandler(void)

{TimingDelay--;

}

期末的时候做微机原理实验那会,时间比较少,把选作的的那个中断实验没有做...
这两天把中断搞了好久,不过STM32的NVIC在库函数的处理下变简单了点,不过现在只把systick和exti中断搞明白了,其他的还有好多,不过应该差不多吧。
中断的优先级也是个麻烦事
|
上一篇:【转】万利的STM32学习板上的LCD驱动原理及编程实现 | 下一篇:简单的流水灯
以下网友评论只代表其个人观点,不代表本网站的观点或立场