?? timer.c
字號(hào):
#include "timer.h"
#include "led.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
//Mini STM32開發(fā)板
//通用定時(shí)器 驅(qū)動(dòng)代碼
//正點(diǎn)原子@ALIENTEK
//技術(shù)論壇:www.openedv.com
//修改日期:2010/12/03
//版本:V1.0
//版權(quán)所有,盜版必究。
//Copyright(C) 正點(diǎn)原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//定時(shí)器3中斷服務(wù)程序
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中斷
{
LED1=!LED1;
}
TIM3->SR&=~(1<<0);//清除中斷標(biāo)志位
}
//通用定時(shí)器中斷初始化
//這里時(shí)鐘選擇為APB1的2倍,而APB1為36M
//arr:自動(dòng)重裝值。
//psc:時(shí)鐘預(yù)分頻數(shù)
//這里使用的是定時(shí)器3!
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3時(shí)鐘使能
TIM3->ARR=arr; //設(shè)定計(jì)數(shù)器自動(dòng)重裝值//剛好1ms
TIM3->PSC=psc; //預(yù)分頻器7200,得到10Khz的計(jì)數(shù)時(shí)鐘
//這兩個(gè)東東要同時(shí)設(shè)置才可以使用中斷
TIM3->DIER|=1<<0; //允許更新中斷
TIM3->DIER|=1<<6; //允許觸發(fā)中斷
TIM3->CR1|=0x01; //使能定時(shí)器3
MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//搶占1,子優(yōu)先級(jí)3,組2
}
//TIM3 PWM部分
//正點(diǎn)原子@ALIENTEK
//2010/6/2
//PWM輸出初始化
//arr:自動(dòng)重裝值
//psc:時(shí)鐘預(yù)分頻數(shù)
void PWM_Init(u16 arr,u16 psc)
{
//此部分需手動(dòng)修改IO口設(shè)置
RCC->APB1ENR|=1<<1; //TIM3時(shí)鐘使能
GPIOA->CRH&=0XFFFFFFF0;//PA8輸出
GPIOA->CRH|=0X00000004;//浮空輸入
GPIOA->CRL&=0X0FFFFFFF;//PA7輸出
GPIOA->CRL|=0XB0000000;//復(fù)用功能輸出
GPIOA->ODR|=1<<7;//PA7上拉
TIM3->ARR=arr;//設(shè)定計(jì)數(shù)器自動(dòng)重裝值
TIM3->PSC=psc;//預(yù)分頻器不分頻
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2預(yù)裝載使能
TIM3->CCER|=1<<4; //OC2 輸出使能
TIM3->CR1=0x8000; //ARPE使能
TIM3->CR1|=0x01; //使能定時(shí)器3
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -