所用开发板型号:STM32PZ6806L
数码管所连接口:PC0~PC7
所用定时器:TIM3
注意:定时器的选择需要结合电路原理图和寄存器手册来确定!
实现功能:每秒加一
STM32-PZ6806L开发板原理图:
实现代码:
#include "stm32f10x.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_gpio.h"
uint8_t sum,i;
//共阳极数码管0~9编码
uint16_t table[]={0x00c0,0x00f9,0x00a4,0x00b0,0x0099,0x0092,0x0082,0x00f8,0x0080,0x0090};
//定时器TIM3及其中断向量配置
void TIM3_Confin(){
TIM_TimeBaseInitTypeDef a;
NVIC_InitTypeDef b;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
a.TIM_ClockDivision=TIM_CKD_DIV1;//一分频,频率:72MHZ
a.TIM_CounterMode=TIM_CounterMode_Down;//下降计数模式
//定时1S
a.TIM_Period=9000-1;
a.TIM_Prescaler=8000-1;
TIM_TimeBaseInit(TIM3,&a);
//中断向量配置
b.NVIC_IRQChannel=TIM3_IRQn;
b.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&b);
TIM_Cmd(TIM3,ENABLE);//启动定时器
TIM_ITConfig(TIM3,TIM3_IRQn,ENABLE);//调用函数配置中断
}
//中断服务函数
void TIM3_IRQHandler(){
sum++;
i=sum%10;
//清除中断标志位
TIM_ClearFlag(TIM3,TIM3_IRQn);
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
//数码管接口配置PC0~PC7
void GPIO_Config(){
GPIO_InitTypeDef a;//定义结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//挂接外设时钟桥APB2
//结构体初始化
a.GPIO_Mode=GPIO_Mode_Out_OD;
a.GPIO_Pin=GPIO_Pin_All;
a.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&a);//调用函数完成结构体初始化
}
int main(void)
{
TIM3_Confin();
GPIO_Config();
sum=0;
i=0;
while(1){
GPIO_Write(GPIOC,table[i]);//控制数码管显示数值
}
}