STM32
直播中

那年我十七_

12年用户 532经验值
私信 关注
[问答]

如何去配置STM32的定时器使数码管循环显示从0~9的数字呢

怎样在Keil for ARM V5中去编写代码呢?
如何去配置STM32的定时器使数码管循环显示从0~9的数字呢?



回帖(1)

李丹丹

2021-12-2 11:23:56
利用已经建立的工程模板,在Keil for ARM V5中编写代码,实现如下功能:配置相应的GPIO口为通用输出口,配置STM32的定时器3,使数码管循环显示从0~9的数字,每1秒钟数字加1。


  

  

  main.c:

#include
#include
#include
#include


int main()
{
        delay_init();
       
        TIM_SetCompare1(TIM1, 2000);
        TIM3_Int_Init(4999,7199);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );//??GPIOB??
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;//????8,9??
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        while(1)
        {
               
               
        }
}


timer.c:


#include "timer.h"
#include "sys.h"


uint16_t table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u16 i=0;
u16 temp;


void TIM3_Int_Init(u16 arr,u16 psc)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler = psc;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);


TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);


NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


TIM_Cmd(TIM3,ENABLE); //
}


void TIM3_IRQnHandler(void)
{
  if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)
        {
          i++;
                temp=table[i%10];
                GPIO_Write(GPIOB,temp);
        }
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
timer.h:


#ifndef __TIMER_H
#define __TIMER_H


#include "sys.h"


void TIM3_Int_Init(u16 arr,u16 psc);


#endif
举报

更多回帖

发帖
×
20
完善资料,
赚取积分