新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2016-3-24
- 在线时间
- 8 小时
|
5金钱
[mw_shl_code=c,true]#include "timer.h"
#include "delay.h"
#include "usart.h"
extern u8 flog;
void TIM2_IRQHandler(void)
{
u16 ADD;
if(TIM2->SR&0X0001)//òç3öÖD¶Ï
{
ADD++;
SCLK=!SCLK;
}
TIM2->SR&=~(1<<0);//Çå3yÖD¶Ï±ê־λ
if(ADD>50000)
{
flog=~flog;
}
}
void TIM2_Int_Init(u16 arr,u16 psc)
{
// printf("time_set \r\n");
RCC->APB1ENR|=1<<0; //TIM2ê±Öóê1Äü
RCC->APB2ENR|=1<<4;
GPIOC->CRL&=0XF0FFFFFF;//PC6Çåáã
GPIOC->CRL|=0X03000000;// êä3öÄ£ê½ 50Mhz
TIM2->ARR=arr; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
TIM2->PSC=psc; //Ô¤·ÖÆμÆ÷éèÖÃ
TIM2->DIER|=1<<0; //ÔêDí¸üDÂÖD¶Ï
TIM2->CR1|=0x01; //ê1Äü¶¨ê±Æ÷2
MY_NVIC_Init(1,3,TIM2_IRQn,2);//ÇàÕ¼1£¬×óóÅÏè¼¶3£¬×é2
}
void TIM3_PWM_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3ê±Öóê1Äü
RCC->APB2ENR|=1<<2; //ê1ÄüPORTAê±Öó
RCC->APB2ENR|=1<<3; //ê1ÄüPORTBê±Öó
RCC->APB2ENR|=1<<4; //ê1ÄüPORTCê±Öó
GPIOC->CRH&=0XFFFFFFF0;//PC8Çåáã
GPIOC->CRH|=0X0000000B;// ¸′λ1|Äüêä3ö
RCC->APB2ENR|=1<<0; //
AFIO->MAPR&=0XFFFFF3FF; //
AFIO->MAPR|=3<<10;
TIM3->ARR=arr; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
TIM3->PSC=psc; //Ô¤·ÖÆμÆ÷2»·ÖÆμ
TIM3->CCMR2|=7<<4; //CH3 PWM2Ä£ê½
TIM3->CCMR2|=1<<3; //CH3Ô¤×°ÔØê1Äü
TIM3->CCER|=1<<8; //OC3 êä3öê1Äü
TIM3->CCR3=1028; //OC3 êä3öê1Äü
TIM3->CR1|=1<<7; //ARPEê1Äü
TIM3->CR1|=0x01; //ê1Äü¶¨ê±Æ÷3
MY_NVIC_Init(1,2,TIM3_IRQn,2);
}
void TIM4_PWM_Init(u16 arr,u16 psc)
{
//′Ë2¿·ÖDèêÖ¶ˉDT¸ÄIO¿úéèÖÃ
RCC->APB1ENR|=1<<2; //TIM4ê±Öóê1Äü
RCC->APB2ENR|=1<<2; //ê1ÄüPORTAê±Öó
GPIOA->CRH&=0XFFFFFFF0; //PA8Çå3y֮ǰμÄéèÖÃ
GPIOA->CRH|=0X0000000B; //¸′óÃ1|Äüêä3ö
TIM1->ARR=arr; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
TIM1->PSC=psc; //Ô¤·ÖÆμÆ÷éèÖÃ
TIM1->CCMR1|=7<<4; //CH1 PWM2Ä£ê½
TIM1->CCMR1|=1<<3; //CH1Ô¤×°ÔØê1Äü
TIM1->CCER|=1<<0; //OC1 êä3öê1Äü
TIM1->BDTR|=1<<15; //MOE Ö÷êä3öê1Äü
TIM1->CR1=0x0080; //ARPEê1Äü
TIM1->CR1|=0x01; //ê1Äü¶¨ê±Æ÷1
MY_NVIC_Init(1,1,TIM4_IRQn,2);
}
[/mw_shl_code]
[mw_shl_code=c,true]#include "sys.h"
#include "delay.h"
#include "timer.h"
#include "usart.h"
u8 flog;
int main(void)
{
Stm32_Clock_Init(9); //Ïμí3ê±ÖóéèÖÃ
delay_init(72); //Ñóê±3õê¼»ˉ
uart_init(72,9600); //′®¿ú3õê¼»ˉ
TIM2_Int_Init(100,71);//í¨óö¨ê±Æ÷ÖD¶Ï3õê¼»ˉ
if(flog){
TIM3_PWM_Init(3199,0); //5KHz
}
else{
TIM4_PWM_Init(2285,0);//7KHz
}
while(1);
}
[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
想起来了是中断优先级没有设置好 设置好了就可以了 提示和我一样的新手们 要设置
MY_NVIC_Init(1,1,TIM4_IRQn,2);
括号内 第一位 主优先级 第二位是 次优先级 第三个是 准备设置的中断服务名称 第四位是 分组 组二 是两位抢占位 两位响应位(通俗来说就是 你括号内的第一位和第二位的范围(例如组二就是 主0~3 次0~3))再补充一句就是一个程序只能是同一个组!
|