- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- ищу пример использования 4 и более канала ADC в stm32f105/107
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- ищу пример использования 4 и более канала ADC в stm32f105/107
ищу пример использования 4 и более канала ADC в stm32f105/107
- super_puper
- Автор темы
- Посетитель
11 года 6 мес. назад #4331
от super_puper
super_puper ответил в теме Re: ищу пример использования 4 и более канала ADC в stm32f105/107
спасибо) теперь буду знать как с дма ещё делается) но я сделал без дма, работает:
//VVVVVVVVVVVVVVVV ADC VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
//vvvvvvvvv работа до 4х каналов АЦП1 одновременно vvvvvvv
void up_to_4_chanel_ADC1_Configuration(void){
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );
// Конфигурация АЦП1
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //We will convert single channel only
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//we will convert many times
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //select no external triggering
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //right 12-bit data alignment in ADC data register
ADC_InitStructure.ADC_NbrOfChannel = 2;//single channel conversion
ADC_Init(ADC1, &ADC_InitStructure);//load structure values to control and status registers
//wake up temperature sensor
//ADC_TempSensorVrefintCmd(ENABLE);
ADC_InjectedSequencerLengthConfig(ADC1, 2);
// Измеряем канал №7 при помощи АЦП1
//ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_13Cycles5);
//ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_13Cycles5);
/* ADC1 injected external trigger configuration */
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);
/* Enable automatic injected conversion start after regular one */
ADC_AutoInjectedConvCmd(ADC1, ENABLE);
// Разрешаем АЦП1
ADC_Cmd(ADC1, ENABLE);
// Сбрасываем калибровку АЦП1
ADC_ResetCalibration(ADC1);
// Ждём окончания процедуры сброса калибровки АЦП1
while(ADC_GetResetCalibrationStatus(ADC1));
// Калибруем АЦП1
ADC_StartCalibration(ADC1);
// Ждём окончания калибровки
while(ADC_GetCalibrationStatus(ADC1));
// Запускаем АЦП1
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
// пример считывания:
//temper = ADC1->JDR1; //прочитать результат первого преобразования (канал 16)
//adc7 = ADC1->JDR2; //прочитать результат второго преобразования (канал 7)
//tmp = ADC1->JDR3; //прочитать результат третьего преобразования (в нашем случае канал 5)
//tmp = ADC1->JDR4; //прочитать результат четвертого преобразования (в нашем случае канал 6)
// ADC_TempSensorVrefintCmd(ENABLE); //подключить температурный сенсор с каналу 16
u32 get_ADC1_ch_N(u8 nchanel){// возвращает данные с ацп канала 1-4
u32 adc_data;
switch (nchanel)
{
case 1: adc_data = ADC1->JDR1;return adc_data;
case 2: adc_data = ADC1->JDR2;return adc_data;
case 3: adc_data = ADC1->JDR3;return adc_data;
case 4: adc_data = ADC1->JDR4;return adc_data;
}
return 0xFFFF;
}
//^^^^^^^^^^^^ работа до 4х АЦП1 одновременно ^^^^^^^^^^^^^^
//VVVVVVVVVVVVVVVV ADC VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
//vvvvvvvvv работа до 4х каналов АЦП1 одновременно vvvvvvv
void up_to_4_chanel_ADC1_Configuration(void){
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );
// Конфигурация АЦП1
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //We will convert single channel only
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//we will convert many times
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //select no external triggering
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //right 12-bit data alignment in ADC data register
ADC_InitStructure.ADC_NbrOfChannel = 2;//single channel conversion
ADC_Init(ADC1, &ADC_InitStructure);//load structure values to control and status registers
//wake up temperature sensor
//ADC_TempSensorVrefintCmd(ENABLE);
ADC_InjectedSequencerLengthConfig(ADC1, 2);
// Измеряем канал №7 при помощи АЦП1
//ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_13Cycles5);
//ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_13Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_13Cycles5);
/* ADC1 injected external trigger configuration */
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);
/* Enable automatic injected conversion start after regular one */
ADC_AutoInjectedConvCmd(ADC1, ENABLE);
// Разрешаем АЦП1
ADC_Cmd(ADC1, ENABLE);
// Сбрасываем калибровку АЦП1
ADC_ResetCalibration(ADC1);
// Ждём окончания процедуры сброса калибровки АЦП1
while(ADC_GetResetCalibrationStatus(ADC1));
// Калибруем АЦП1
ADC_StartCalibration(ADC1);
// Ждём окончания калибровки
while(ADC_GetCalibrationStatus(ADC1));
// Запускаем АЦП1
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
// пример считывания:
//temper = ADC1->JDR1; //прочитать результат первого преобразования (канал 16)
//adc7 = ADC1->JDR2; //прочитать результат второго преобразования (канал 7)
//tmp = ADC1->JDR3; //прочитать результат третьего преобразования (в нашем случае канал 5)
//tmp = ADC1->JDR4; //прочитать результат четвертого преобразования (в нашем случае канал 6)
// ADC_TempSensorVrefintCmd(ENABLE); //подключить температурный сенсор с каналу 16
u32 get_ADC1_ch_N(u8 nchanel){// возвращает данные с ацп канала 1-4
u32 adc_data;
switch (nchanel)
{
case 1: adc_data = ADC1->JDR1;return adc_data;
case 2: adc_data = ADC1->JDR2;return adc_data;
case 3: adc_data = ADC1->JDR3;return adc_data;
case 4: adc_data = ADC1->JDR4;return adc_data;
}
return 0xFFFF;
}
//^^^^^^^^^^^^ работа до 4х АЦП1 одновременно ^^^^^^^^^^^^^^
- super_puper
- Автор темы
- Посетитель
11 года 6 мес. назад - 11 года 6 мес. назад #4337
от super_puper
super_puper ответил в теме Re: ищу пример использования 4 и более канала ADC в stm32f105/107
а в какой строчке выбирается источник Vref? а понятно.. его просто нет..
Последнее редактирование: 11 года 6 мес. назад пользователем .
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- ищу пример использования 4 и более канала ADC в stm32f105/107
Время создания страницы: 0.033 секунд