欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8684|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

初學(xué)STM32瓶頸突破—中斷配置與PWM

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-21 15:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
放假之前,連續(xù)兩天調(diào)試中斷都失敗。
寒假期間發(fā)現(xiàn)程序結(jié)構(gòu)有問題,雖說stm32f103_it.h和.c文件只是官方為優(yōu)化結(jié)構(gòu)所給出的不具有特殊作用的文件,但是盡管我所寫的函數(shù)前后并無變化,如果不借用這兩個(gè)文件而在任意位置寫中斷服務(wù)函數(shù),則不能進(jìn)入中斷。我也不知道為什么會(huì)這樣,最后還是妥協(xié)了,就借用這兩個(gè)文件好了。

下面是利用TIM2產(chǎn)生PWM,然后用PWM下降沿觸發(fā)中斷的程序?qū)嵗:芎?jiǎn)單,但是對(duì)于我初學(xué)者,還是記錄一下好了。如果大家對(duì)單片機(jī)有興趣,可以互相交流,相互學(xué)習(xí),鄙人郵箱:ochrise@outlook.com或者ochrise@sina.com.

#include "stm32f10x.h"               // Device header#include "stm32f10x_gpio.h"           //Keil::Device:StdPeriph Drivers:GPIO#include "stm32f10x_rcc.h"           // Keil::Device:StdPeriph Drivers:RCC#include"stm32f10x_tim.h"            // Keil::Device:StdPeriphDrivers:T#include "stm32f10x_exti.h"           // Keil::Device:StdPeriphDrivers:EXTI#include "RTE_Device.h"              // Keil::Device:Startup#include "RCC.h"                   // Keil::Device:StdPeriphDrivers:Framework#include "timx.h"                   // Keil::Device:StdPeriphDrivers:Framework
#include "stm32f10x_tim.h"            //Keil::Device:StdPeriph Drivers:TIM


void RCC_Configuration(void);
void GPIO_Configretion(void);
void NVIC_Configuration(void);

void Tim2_Init(void);
//void Timx_Init(void);
void delay_nus(unsigned long n);
void delay_nms(unsigned long n);


u16 CCR1_val = 18000;
u16 CCR2_val = 9000;

int main()
{
GPIO_SetBits(GPIOB,GPIO_Pin_10);
RCC_Configuration();
GPIO_Configretion();
NVIC_Configuration();
//Timx_Init();
Tim2_Init();
TIM_Cmd(TIM2,ENABLE);
TIM_CtrlPWMOutputs(TIM2,ENABLE);
while(1);
}




void delay_nus(unsigned long n)
{
unsigned long i;
while(n--)
{
i=8;while(i--);
}
}
void delay_nms(unsigned long n)
{
while(n--)
delay_nus(1000);
}

void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
//RCC reset
RCC_DeInit();
//Enable HSE
RCC_HSEConfig(RCC_HSE_ON);
//Wait HSE is ready
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//If HSE start fail, wail and wail.
while(HSEStartUpStatus == ERROR);
//Set bus clock
   RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
//HSE8M PLL-> 72M
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//Select PLL as system clock source
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);

//----------------------------- CLOSE HSI---------------------------
RCC_HSICmd(DISABLE);

//--------------------------- OPEN GPIO CLK-------------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

//---------------------------- INT CONFIG---------------------------
//2-level interrupt
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
   
//---------------------------- JTAG CONFIG---------------------------
//JTAG/SWD disable
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
}


void GPIO_Configretion(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

}
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2);
EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);


  //NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

void Tim2_Init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;    //»ù±¾éèÖão·ÖÆμ, ÆμÂê, ¼Æêy·½ê½
TIM_OCInitTypeDef TIM_OCInitStructure;           //·½2¨óDD§·½ê½£¬óDD§μçÆ½£¬ê1Äü»¥21ê1Äü
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
TIM_DeInit(TIM2);

TIM_TimeBaseStructure.TIM_Period = 35999;
TIM_TimeBaseStructure.TIM_Prescaler = 7999;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

//Channe l1234 Configuration in PWM mode
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;//????????
//TIM_OCInitStructure.TIM_OutputNState =TIM_OutputNState_Enable;
  
TIM_OCInitStructure.TIM_Pulse = CCR1_val; //μ÷½úÕ¼¿Õ±è

TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_Low;//μíμçÆ½ÎaóDD§μçÆ½
//TIM_OCInitStructure.TIM_OCNPolarity =TIM_OCNPolarity_Low;

//éèÖÃêä3ö±è½Ï¿ÕÏD×′ì¬(MOE=0)
TIM_OCInitStructure.TIM_OCIdleState =TIM_OCIdleState_Set;
//TIM_OCInitStructure.TIM_OCNIdleState =TIM_OCIdleState_Reset;

TIM_OC1Init(TIM2,&TIM_OCInitStructure);  //í¨μà1

TIM_OCInitStructure.TIM_Pulse = CCR2_val;//í¨μà¶tòÔ¼°Õ¼¿Õ±è
TIM_OC2Init(TIM2,&TIM_OCInitStructure);

TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;//ËàÇøê1Äü
TIM_BDTRInitStructure.TIM_OSSIState =TIM_OSSIState_Enable;

TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
TIM_BDTRInitStructure.TIM_DeadTime = 0x75;     //ËàÇøê±¼ä1.625us
TIM_BDTRInitStructure.TIM_Break =TIM_Break_Enable;

TIM_BDTRInitStructure.TIM_BreakPolarity =TIM_BreakPolarity_High;
TIM_BDTRInitStructure.TIM_AutomaticOutput =TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM2,&TIM_BDTRInitStructure);
}


void Timx_Init(void)
{
//TIM_ClearFlag(TIM2,TIM_FLAG_Update);

//TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

// TIM_Cmd(TIM2,ENABLE);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:406423 發(fā)表于 2018-11-9 17:05 | 只看該作者
中斷優(yōu)先級(jí)配置有問題
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表