使用c语言编写基于STM32F103ZET6芯片PE2和PE3按键控制TIM2定时器的周期值增大和减小(500)
时间: 2023-06-25 08:04:35 浏览: 138
定时控制器C语言程序
首先需要在STM32F103ZET6芯片上连接PE2和PE3按键,然后初始化TIM2定时器,最后编写控制按键的代码。
以下是代码示例:
```c
#include "stm32f10x.h"
void TIM2_Configuration(void);
void GPIO_Configuration(void);
void Delay(__IO uint32_t nCount);
int main(void)
{
GPIO_Configuration();
TIM2_Configuration();
while(1)
{
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
{
TIM_SetAutoreload(TIM2, TIM_GetAutoreload(TIM2) + 500); // 周期值增加500
Delay(100);
}
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == 0)
{
TIM_SetAutoreload(TIM2, TIM_GetAutoreload(TIM2) - 500); // 周期值减小500
Delay(100);
}
}
}
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 5000; // 初始周期值为5000
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 定时器分频,时钟为72MHz,分频后为10kHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_Cmd(TIM2, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
void Delay(__IO uint32_t nCount)
{
while(nCount--)
{
}
}
```
在上述代码中,我们使用`TIM2`定时器,并在`TIM2_Configuration`函数中进行初始化。定时器的初始周期值为5000,即10kHz时钟下计数到5000后会产生一个定时器中断。
在`main`函数中,我们不断检测PE2和PE3按键是否被按下,如果按下PE2按键,则增加定时器周期值500,如果按下PE3按键,则减小定时器周期值500。
注:由于按键可能存在抖动,我们需要在按键检测后延时一段时间再进行下一次检测,以避免误触发。在上述代码中,我们使用了`Delay`函数进行简单的延时操作。
阅读全文