реклама на сайте
подробности

 
 
> libopencm3 + stm32f4, ADC
Ekka
сообщение Apr 13 2018, 12:39
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Привет всем. Битый час сижу, не могу понять ПОЧЕМУ у меня в отладке значение с АЦП считывается нормально (0-4090),
а как только я запускаю программу - там 42.
Подозреваю, конечно, что в отладке я медленнее код прохожу. Может, я настраиваю не правильно,
или флаг не тот сбрасываю или проверяю? Что я делаю не так?

Код
void adc_init(void)
{
    rcc_periph_clock_enable(RCC_ADC1);
    gpio_mode_setup(PLC_AIN1_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_PULLDOWN, PLC_AIN1_PIN);

    nvic_set_priority(NVIC_ADC_IRQ, 0);
    nvic_enable_irq(NVIC_ADC_IRQ);

    rcc_periph_clock_enable(RCC_ADC1);
    adc_power_off(ADC1);
    adc_enable_scan_mode(ADC1);
    adc_enable_eoc_interrupt(ADC1);
    adc_set_right_aligned(ADC1);
    adc_set_sample_time_on_all_channels(ADC1, ADC_SMPR_SMP_3CYC);

    adc_set_continuous_conversion_mode(ADC1);
    adc_power_on(ADC1);

    my_delay(800000);

    channel_array[0] = 1;
    adc_set_regular_sequence(ADC1,2,channel_array);
    adc_start_conversion_regular(ADC1);
}

uint32_t adc1_result=0;
void adc_isr(void)
{
    if(adc_eoc(ADC1) == 1)
    {
        ADC_SR(ADC1) &= ~ADC_SR_EOC;
        adc1_result = adc_read_regular(ADC1);
    }
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ekka
сообщение Apr 16 2018, 09:55
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Понимаю, что такой корявенькой libopencm3 особо никто не пользуется, просто заводской проект под нее написан.
Уже все просмотрено, никак не возьму в ум, почему в отладке есть значение, а в режиме работы - нет.
Проект делался по примерам.

Никто не пользовался LIBOPENCM3? Может, у кого-то просто возникала такая же проблема с другой библиотекой?
Go to the top of the page
 
+Quote Post
Ekka
сообщение Apr 16 2018, 11:20
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Может, есть у кого-то пример работы АЦП с прерыванием? Ну или хотя бы просто рабочий пример для STM32F4 - то, что в екземплах библиотеки - работает не так(


Цитата(esaulenka @ Apr 16 2018, 11:21) *
libopencm3 для АЦП не использовал, но...

1) Константа ADC_SMPR_SMP_3CYC выбрана осознанно?
2) (некритично, но некрасиво) enable NVIC лучше делать в конце, когда всё настроено.
3) флажок статуса EOC сбрасывается самостоятельно, после чтения data register


1) А что с ней не так?


Немного изменены настройки по аналогии с SPL - в ней так работало((

Код
void adc_init(void)
{
    rcc_periph_clock_enable(RCC_ADC1);
    gpio_mode_setup(PLC_AIN1_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, PLC_AIN1_PIN);

    rcc_periph_clock_enable(RCC_ADC1);

    adc_power_off(ADC1);

    adc_set_clk_prescale(ADC_CCR_ADCPRE_BY2);
    adc_disable_scan_mode(ADC1);
    adc_set_right_aligned(ADC1);
    adc_set_resolution(ADC1,ADC_CR1_RES_12BIT);
    adc_enable_eoc_interrupt(ADC1);

    adc_set_sample_time_on_all_channels(ADC1, ADC_SMPR_SMP_3CYC);
    adc_set_continuous_conversion_mode(ADC1);
    adc_power_on(ADC1);

    my_delay(800000);

    nvic_set_priority(NVIC_ADC_IRQ, 0);
    nvic_clear_pending_irq(NVIC_ADC_IRQ);
    nvic_enable_irq(NVIC_ADC_IRQ);

    adc_set_regular_sequence(ADC1,1,channel_array);
    adc_start_conversion_regular(ADC1);
}

uint32_t adc1_result=0;
void adc_isr(void)
{
    ADC1_SR &= ~(ADC_SR_EOC);
    adc1_result = adc_read_regular(ADC1);
}

Go to the top of the page
 
+Quote Post
Ekka
сообщение Apr 20 2018, 13:34
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Прошу прощения. Нашлась моя ошибка, как всегда просто ..... тактирование.... rcc_periph_clock_enable(RCC_ADC1);

А кто-то пробовал с библиотекой libremodbus настраивать модбас?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 05:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016