利用已经建立的工程模板,在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
|