新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2015-4-18
- 在线时间
- 0 小时
|
5金钱
主程序
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "timer.h"
int main(void)
{ Stm32_Clock_Init(9);
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
PWM_Init(2000,719);
LED_Init(); //初始化与LED连接的硬件接口
EXTIX_Init();//按下KEY0键,舵机回复至中间位置
Timerx_Init(1000,7199);
while(1)
{
}}
定时中断
void TIM4_IRQHandler(void)
{ u16 led0pwmval;
if(TIM4->SR&0X0001) //溢出中断
{
delay_ms(100);
led0pwmval=led0pwmval+1;
LED0_PWM_VAL=led0pwmval;
if(led0pwmval>170)
{
led0pwmval=170;
LED0_PWM_VAL=led0pwmval;
}
}
TIM4->SR&=~(1<<0); //清除中断标志位
TIM4->EGR|=1<<0; //重新初始化计数器
}
定时初始化
void Timerx_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<2; //TIM4时钟使能
TIM4->ARR=arr; //自动重装载值
TIM4-> SC=psc; //预分频值
TIM4->DIER|=1<<0;//允许更新中断
TIM4->DIER|=1<<6; //允许触发中断
TIM4->CR1|=0X01;
MY_NVIC_Init(2,3,TIM4_IRQChannel,2);
}
现在问题是红色字体部分无法执行,我将它替换成LED闪烁却又可以执行,求助~~~~
|
最佳答案
查看完整内容[请看2#楼]
别在定时器中断里搞延时, 很有可能在你延时的时候,第二次中断又来了,结果就把中断打乱了,那些延时完全可以放到main函数里
|