实验二定时器的使用
一、实验目的
1.学会利用固件库函数控制IO口的输入输出;
2.学会使用STM32f1的定时器;
二、实验原理
实验原理图如上图所示,红、绿、蓝灯分别受PB5、PB0、PB1控制,按键接到PA0,PC13。
三、实验内容
1. 开机所有灯不亮;
2. 按K1,红灯闪,再按K1,绿灯闪,再按K1,蓝灯闪,如此循环,闪烁频率1HZ;
3. 按K2,所有灯灭,蜂鸣器叫三声.
四、C源程序
用到GPIO输出—蜂鸣器,32-TIM—基本定时器,18-EXTI—外部中断。
在32-TIM—基本定时器的基础上
define的基本用法Main.c
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_TiMbase.h"
#include "bsp_exti.h"
#include "./beep/bsp_beep.h"
extern int a;
volatile uint32_t time = 0;
#define SOFT_DELAY Delay(0x7FFFFF);
void Delay(__IO u32 nCount);
int main(void)
{
LED_GPIO_Config();
BEEP_GPIO_Config();
BASIC_TIM_Init();
EXTI_Key_Config();
LED1_OFF;LED2_OFF;LED3_OFF;
while(1)
{
if(a==1)
{
SOFT_DELAY;
BEEP(1);
SOFT_DELAY;
BEEP(0);
SOFT_DELAY;
BEEP(1);
SOFT_DELAY;
BEEP(0);
SOFT_DELAY;
BEEP(1);
SOFT_DELAY;
BEEP(0);
a=0;
}
}
}
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
stm32f10x.c
#include "bsp_TiMbase.h"
#include "bsp_exti.h"
#include "bsp_led.h"
int b;
int a;
void  BASIC_TIM_IRQHandler (void)
{
if ( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET )  {
if(b==1)
{
LED1_TOGGLE;
LED2_OFF;
LED3_OFF;
}
if(b==2)
{
LED2_TOGGLE;
LED1_OFF;
LED3_OFF;
}
if(b==3)
{
LED3_TOGGLE;
LED2_OFF;
LED1_OFF;
}
if(b==4)
{
b=1;
}
TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update);
}
}
void KEY1_IRQHandler(void)
{
if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET)
{
b++;
EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);
}
}
void KEY2_IRQHandler(void)
{
if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET)
{
LED_RGBOFF;
a=1;
b=0;
EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE);
}
}
五、调试过程及问题解决
1.首先看实验要求,选择合适的库原件,这里我选用了GPIO输出—蜂鸣器,
32-TIM—基本定时器,18-EXTI—外部中断。并将32-TIM—基本定时器作为基础。
2.将18-EXTI—外部中断,GPIO输出—蜂鸣器中的user中的所需的文件夹
复制在32-TIM—基本定时器中,并且加入进去。
3.根据实验要求
(1)开机所有灯不亮
LED_GPIO_Config();LED1_OFF;LED2_OFF;LED3_OFF;
(2)按K1,红灯闪,再按K1,绿灯闪,再按K1,蓝灯闪,如此循环,闪烁频1HZ;
在stm32f10x_it.c中,定义int b;int a;b表示按的次数。按到第四
次b=1,返回第一次因此循环。并在一个闪烁时其他关闭。
(3)按K2,所有灯灭,蜂鸣器叫三声.
首先在main.c定义extern int a;a=1时表示按下,a=0时表示没有按
下。当a=1时SOFT_DELAY; B EEP(1);SOFT_DELAY; BEEP(0);重复三次
鸣叫3声。
4.将头文件加入所需要的地方。
六、实验结果
1. 开机所有灯不亮;
2. 按K1,红灯闪,再按K1,绿灯闪,再按K1,蓝灯闪,如此循环,闪烁频率1HZ;
3. 按K2,所有灯灭,蜂鸣器叫三声.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。