#include "stm32f10x.h"
#include"led.h"
#include "sys.h"
#define LED13 PCout(13)
#define LED14 PCout(14)
void delay_ms(u32 i)
{
u32 temp;
SysTick->LOAD=9000*i; //設置重裝數值, 72MHZ時
SysTick->CTRL=0X01; //使能,減到零是無動作,采用外部時鐘源
SysTick->VAL=0; //清零計數器
do
{
temp=SysTick->CTRL; //讀取當前倒計數值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //等待時間到達
SysTick->CTRL=0; //關閉計數器
SysTick->VAL=0; //清空計數器
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);//使能PB,PE端口時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //根據設定參數初始化GPIOB.5
GPIO_SetBits(GPIOC,GPIO_Pin_14|GPIO_Pin_13); //PB.5 輸出高
}
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時鐘使能
//定時器TIM3初始化
TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據指定的參數初始化TIMx的時間基數單位
TIM_SelectOnePulseMode(TIM3, TIM_OPMode_Single);//單脈沖模式,只閃爍一次
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中斷,允許更新中斷
//中斷優先級NVIC設置
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占優先級0級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //從優先級3級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIMx
}
//定時器3中斷服務程序
void TIM3_IRQHandler(u8 t) //TIM3中斷
{
t=0;t++;
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中斷標志
LED13=~LED13;
}
int main(void)
{
LED_Init(); //LED端口初始化
TIM3_Int_Init(9999,7199);//10Khz的計數頻率,計數到5000為500ms
while(1)
{
LED14=0;
}
}
|