首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

定时器与蜂鸣器(5)

定时器与蜂鸣器(5)

步骤五
  编写中断服务程序。同样需要注意的,一进入中断服务程序,第一
  步要做的,就是清除掉中断标志位。由于我们使用的是向上溢出模式,因此使用 的函数应该是: TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);。 芯达 STM32 开发板实现的中断服务程序如下: void TIM2_IRQHandler(void) { if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET ) { TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update); switch(state){ case 0: /*====LED1-ON=======*/ GPIO_ResetBits(GPIOB , GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_9); GPIO_SetBits(GPIOE, GPIO_Pin_0); GPIO_SetBits(GPIOE, GPIO_Pin_1); break; case 1: GPIO_SetBits(GPIOB , GPIO_Pin_8); GPIO_ResetBits(GPIOB, GPIO_Pin_9); GPIO_SetBits(GPIOE, GPIO_Pin_0); GPIO_SetBits(GPIOE, GPIO_Pin_1); break; case 2:
    GPIO_SetBits(GPIOB , GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_9); GPIO_ResetBits(GPIOE, GPIO_Pin_0); GPIO_SetBits(GPIOE, GPIO_Pin_1); break; case 3: GPIO_SetBits(GPIOB , GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_9); GPIO_SetBits(GPIOE, GPIO_Pin_0); GPIO_ResetBits(GPIOE, GPIO_Pin_1); break; default: break; } if(++state >= 4){ state = 0; } } } 使用 switch(state)语句,使得芯达 STM32 开发板上的四个用户指示灯按顺序 闪烁。当然,您也可以编写其他的中断服务程序。总之,在中断服务程序里, 可 以发挥您的聪明才智,编写出自己得意的代码。 最后需要说明的是,本期教程叫做《定时器与蜂鸣器》 。有的同学可能会问, 怎么光看定时器,没有蜂鸣器呢?呵呵,实际上,蜂鸣器的控制超级简单,就相 当于一个 LED 的控制。在芯达 STM32 开发板上,我们使用 PB0(根据版本的不 同, 也有可能使用 PC5)连接蜂鸣器, 那么我们可以配置下 PB0(根据版本的不同, 也有可能使用 PC5)为输出推挽模式,然后使用如下代码: GPIO_SetBits(GPIOB, GPIO_Pin_0); OK,蜂鸣器在响啦~!就这么简单。看看电路图吧!
  这里有一个 JP3,它存在的意义是:如果在别的系统实现中,使用到 PB0(根 据版本的不同,也有可能使用 PC5)引脚,可能会使蜂鸣器意外的响起来,因此 加上一个 JP3 跳线,当进行别的实验的时候,可以拔掉短路帽。 至此, STM32 的外部中断教程编写结束。
返回列表