新手上路
- 积分
- 35
- 金钱
- 35
- 注册时间
- 2013-10-8
- 在线时间
- 0 小时
|
原子哥你好 期待您的解答 谢谢
这是在开发板例程定时器中断基础上改的
程序如下:
#include "sys.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
//ALIENTEK战舰STM32开发板实验8
//定时器中断实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
int n=0,j=0;
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
// delay_init(72); //延时初始化
LED_Init(); //初始化与LED连接的硬件接口
TIM2_Int_Init(35999,59999);//
while(1)
{
}
}
#include "timer.h"
#include "led.h"
extern int n,j;
//定时器2中断服务程序(主要在这里做了修改)
void TIM2_IRQHandler(void)
{
if(TIM2->SR&0X0001)//溢出中断
{ n++;
if(n==2)
{
n=0;
LED0=!LED0;
}
TIM2->SR&=~(1<<0);//清除中断标志位
}
}
//通用定时器2中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器2!
void TIM2_Int_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<0; //TIM2时钟使能
TIM2->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM2-> SC=psc; //预分频器7200,得到10Khz的计数时钟
TIM2->DIER|=1<<0; //允许更新中断
MY_NVIC_Init(1,3,TIM2_IRQChannel,2);//抢占1,子优先级3,组2
TIM2->CR1|=0x01; //使能定时器2
} |
|