初级会员

- 积分
- 158
- 金钱
- 158
- 注册时间
- 2016-1-18
- 在线时间
- 21 小时
|

楼主 |
发表于 2016-5-30 13:09:45
|
显示全部楼层
本帖最后由 编程菜鸟 于 2016-5-30 13:12 编辑
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // Enable ADC1 clock (12MHz)
// Initialize pins
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // Select input pull-down mode
GPIO_InitStructure.GPIO_Pin = Pin_SMPL1 | Pin_SMPL2; // Select pin
GPIO_Init(Port_SMPL1, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_SMPL3 | Pin_SMPL4 | Pin_SMPL10
| Pin_SMPL11 | Pin_SMPL12 | Pin_SMPL13; // Select pin
GPIO_Init(Port_SMPL3, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_SMPL5 | Pin_SMPL6 | Pin_SMPL7
| Pin_SMPL8 | Pin_SMPL9; // Select pin
GPIO_Init(Port_SMPL5, &GPIO_InitStructure);
ADC_DeInit(ADC1);
// ADC1 module
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent ;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
//ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1; // All 13 Channels
ADC_Init(ADC1, &ADC_InitStructure);
//ADC_RegularChannelConfig(ADC1, (u8)Channel_number_Group[Testing_data.Conversion_Channel], 1, ADC_SampleTime_13Cycles5 );
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
//ADC_SoftwareStartConvCmd(ADC1, DISABLE);
while(ADC_GetCalibrationStatus(ADC1));
ADC_ExternalTrigConvCmd(ADC1, ENABLE); //使能ADC经外部触发启动转换功能
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQChannel; //ADC1,ADC2全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //先占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4|RCC_APB2Periph_TIM1,ENABLE);
//TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TypeDef* TIMx[3];
u8 i;
TIMx[0] = TIM1;
TIMx[1] = TIM3;
TIMx[2] = TIM4;
// PWM pins
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Set mode
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH0; // Select pin
GPIO_Init(Port_PWM_CH0, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH1; // Select pin
GPIO_Init(Port_PWM_CH1, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH2; // Select pin
GPIO_Init(Port_PWM_CH2, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH3; // Select pin
GPIO_Init(Port_PWM_CH3, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH4; // Select pin
GPIO_Init(Port_PWM_CH4, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH5; // Select pin
GPIO_Init(Port_PWM_CH5, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH6; // Select pin
GPIO_Init(Port_PWM_CH6, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH7; // Select pin
GPIO_Init(Port_PWM_CH7, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH8; // Select pin
GPIO_Init(Port_PWM_CH8, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH9; // Select pin
GPIO_Init(Port_PWM_CH9, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH10; // Select pin
GPIO_Init(Port_PWM_CH10, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_PWM_CH11; // Select pin
GPIO_Init(Port_PWM_CH11, &GPIO_InitStructure);TIMx[0] = TIM1;
// Enable APB clock for TIMx
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // Enable timer 1 clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // Enable timer 3 clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); // Enable timer 4 clock
// Remap required pins - consult STM32F1 TRM Section 8.3.7 Timer alternate function remapping
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
// Initialize all timers
for(i=0; i<3; i++)
{
//Initialize TIM Base settings
TIM_TimeBaseInitStructure.TIM_Prescaler = PWM_PRESCALER1; // TIM running at frequency= TIMxCLK / (Prescaler + 1)
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // Count down from 4095 to 0
TIM_TimeBaseInitStructure.TIM_Period = PWM_PERIOD; // 72MHz / 8 = 9MHz; 9000000Hz/4095 = 35.156KHz 's period
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; // Division of the system clock frequency, 72MHz/2 = 36MHz
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; // Reserved only for TIM1_RCR register
TIM_TimeBaseInit(TIMx, &TIM_TimeBaseInitStructure); // Initialize base register
//Initialize TIM output pins
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // Use PWM mode 1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // Positive output pin enable/disable
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; // Negative output pin enable/disable
// Pulse (PWM duty) for each channel
// Channel 1
TIM_OCInitStructure.TIM_Pulse = PWM_OCP_DEFAULT; // Initial duty
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OCNIdleState =TIM_OCNIdleState_Reset ;
TIM_OC1Init(TIMx, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIMx, TIM_OCPreload_Enable); // Enable current channel output compare preload shadow register
// Channel 2
TIM_OCInitStructure.TIM_Pulse = PWM_OCP_DEFAULT; // Initial duty
TIM_OC2Init(TIMx, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIMx, TIM_OCPreload_Enable);
// Channel 3
TIM_OCInitStructure.TIM_Pulse = PWM_OCP_DEFAULT; // Initial duty
TIM_OC3Init(TIMx, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIMx, TIM_OCPreload_Enable);
// Channel 4
TIM_OCInitStructure.TIM_Pulse = PWM_OCP_DEFAULT; // Initial duty
TIM_OC4Init(TIMx, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIMx, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIMx, ENABLE); // Enable shadow register for Timer2
//Start TIM2 module
TIM_Cmd(TIMx, ENABLE);
//Enable TIM2 PWM output peripheral
TIM_CtrlPWMOutputs(TIMx, ENABLE);
}
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //Set the TIM3 master mode
TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update); // timer 3 TRGO as trigger output
TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset); //Set the TIM1 from the pattern
TIM_SelectInputTrigger(TIM1, TIM_TS_ITR2); //The timer 3 TRGO timer trigger output as a trigger reset timer 1
TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); //Set the TIM4 from the pattern
TIM_SelectInputTrigger(TIM4, TIM_TS_ITR2); //The timer 3 TRGO timer trigger output as a trigger reset timer 4
}
而且 是PWM工作的时候 AD就停止转换了 |
|