新手入门
- 积分
- 13
- 金钱
- 13
- 注册时间
- 2015-8-29
- 在线时间
- 5 小时
|
25金钱
我原本是想要通过一个定时器TIM3的PA6脚(推挽输出)输出一个50HZ的PWM波,然后通过捕获的方式输进PA7脚(浮空输入),然后再捕获上下沿的值通过相减得到PWM高电平的时间,但是失败鸟。于是试着退一步看我的中断函数到底能不能发生,下面这个函数我是想要得到某几个参数的值,在不加入NVIC初始化的那一段时,这些得到的参数在LCD上显示全为0,当加了NVIC的一段初始化时,LCD就不工作了,我在想是不是定时器的优先级比LCD的高导致的呀?求大神解答////////////////////这是主函数///////////////////////////////////////////
extern u16 temp_cnt1,temp_cnt1_2,
temp_cnt2,temp_cnt2_2,
temp_cnt3,temp_cnt3_2,
temp_cnt4,temp_cnt4_2;
extern T_RC_Data Rc_Data;
int main(void)
{
u16 temp;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
Tim_Pwm_In_Init();
LED_Init();
delay_init();
uart_init(500000);
LCD_Init();
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Mini STM32");
LCD_ShowString(30,70,200,16,16,"MPU6050 TEST");
while(1)
{
POINT_COLOR=BLUE;
TIM_SetCompare1(TIM3,5);
temp =temp_cnt1_2;
LCD_ShowNum(30+48+40,260,temp*1000,8,16);
delay_ms(1000);
TIM_SetCompare1(TIM3,80);
temp =temp_cnt1 ;
LCD_ShowNum(30+48+40,240,temp*1000,8,16);
delay_ms(100);
TIM_SetCompare1(TIM3,120);
temp =Rc_Data.THROTTLE ;
LCD_ShowNum(30+48+40,220,temp*10000,8,16);
delay_ms(100);
TIM_SetCompare1(TIM3,150);
temp =temp_cnt1;
LCD_ShowNum(30+48+40,200,temp*100,8,16);
delay_ms(100);
}
}
//////////////////////这是定时器函数//////////////////////////////////
#include "tim4.h"
#include "stm32f10x.h"
#include "1.h"
#include "delay.h"
u16 temp_cnt1,temp_cnt1_2,
temp_cnt2,temp_cnt2_2,
temp_cnt3,temp_cnt3_2,
temp_cnt4,temp_cnt4_2;
u16 Rc_Pwm_In[4];
T_RC_Data Rc_Data;//1000~2000
static void Rc_DataAnl(void)
{
Rc_Data.THROTTLE = Rc_Pwm_In[1];
Rc_Data.YAW = Rc_Pwm_In[0];
Rc_Data.ROLL = Rc_Pwm_In[3];
Rc_Data.PITCH = Rc_Pwm_In[2];
}
void Rc_GetValue(T_RC_Data *temp)
{
temp->THROTTLE = Rc_Data.THROTTLE; //youmen
temp->YAW = Rc_Data.YAW; //y
temp->ROLL = Rc_Data.ROLL; //x
temp->PITCH = Rc_Data.PITCH; //y
}
void Tim_Pwm_In_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure2;
NVIC_InitTypeDef NVIC_InitStruct;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure2);
//////////////////////////////////////////////////////////////////
NVIC_InitStruct.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStruct);
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period = 199;
TIM_TimeBaseStructure.TIM_Prescaler =7199;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_SetCompare1(TIM3,5);
/////////////////////////////////////////////////////
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM3, &TIM_ICInitStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM3, &TIM_ICInitStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM3, &TIM_ICInitStructure);
/* TIM enable counter */
TIM_CtrlPWMOutputs(TIM3,ENABLE);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
/* Enable the CC1 Interrupt Request */
TIM_ITConfig(TIM3, TIM_IT_CC1|TIM_IT_Update, ENABLE);
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3, TIM_IT_CC1|TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update);
temp_cnt1_2=2;
temp_cnt1=TIM_GetCapture1(TIM3);
Rc_Data.THROTTLE=5;
LED0=0;
delay_ms(5000);
}
}
|
|