开发板是stm32f103 写一个定时器控制流水灯的代码
时间: 2024-02-15 08:05:17 浏览: 98
用定时器编的交通灯程序.gxw
好的,下面是一个简单的基于 STM32F103 开发板的定时器控制流水灯的代码,使用 TIM2 定时器和 GPIO 接口控制 LED 灯的闪烁:
```c
#include "stm32f10x.h"
void GPIO_Configuration(void);
void TIM_Configuration(void);
int main(void)
{
GPIO_Configuration();
TIM_Configuration();
while (1)
{
}
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 999; //设置计数器自动重装值
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //设置时钟预分频系数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_Cmd(TIM2, ENABLE); //开启定时器
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //开启定时器更新中断
NVIC_EnableIRQ(TIM2_IRQn); //开启 TIM2 中断
}
void TIM2_IRQHandler(void)
{
static uint8_t led_state = 0;
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除中断标志位
if (led_state == 0)
{
GPIO_SetBits(GPIOC, GPIO_Pin_0);
GPIO_ResetBits(GPIOC, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
led_state = 1;
}
else if (led_state == 1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_1);
GPIO_ResetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3);
led_state = 2;
}
else if (led_state == 2)
{
GPIO_SetBits(GPIOC, GPIO_Pin_2);
GPIO_ResetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3);
led_state = 3;
}
else if (led_state == 3)
{
GPIO_SetBits(GPIOC, GPIO_Pin_3);
GPIO_ResetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
led_state = 0;
}
}
}
```
以上代码中,GPIO_Configuration() 函数用于配置 GPIO 接口,将 LED 灯的控制引脚设置为输出模式;TIM_Configuration() 函数用于配置 TIM2 定时器,将定时器的时钟预分频系数设置为 7199,计数器自动重装值设置为 999,计数器向上计数模式,以 1MHz 的频率产生中断;TIM2_IRQHandler() 函数为 TIM2 的中断服务函数,在中断服务函数中实现流水灯的效果。
阅读全文