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

 
 
> STM32F100C6T6 и 1-wire, не отладить в IAR EWARM v6.30.4
ivainc1789
сообщение Jan 21 2012, 19:58
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



К STM32F100C6T6 подключен DS18B20. Со времен AVR есть отлаженные исходники для 1-wire bus. Думалось, что все будет просто при наладке портированных исходников, но затык случился конкретный: отладить и проверить работу подключенного DS18B20 практически не удалось. Разбор полетов указал на... странную работу портов и решения или ошибки что-то никак не увидел. Пришлось упростить до одного файла main.c, в котором приведены два упражнения (примера). Как вывести из IAR (Win7 64) с русскими комментами вместо крякозябр - не знаю, потому см. аттач.
Прикрепленный файл  main.pdf ( 26.04 килобайт ) Кол-во скачиваний: 603

Разочарований в STM32F100 два:
1. При частоте HCLK 24MHz максимальная частота ногодрыгания ~1.78Mhz. При макс оптимизации! Это катастрофа! Возможно, что-то сделано не так в системе тактирования? Неужели STM32 такие медленные?
2. Отладить простую процедуру сброса 1-wire не смог! Осциллом смотрю - все очень безоблачно: сначала вижу отриц импульс на 500us, потом проц освобождает шину, датчик ждет 35us и удерживает ее в нуле еще на 60-120us, т. е. с момента окончания отриц импульса до момента получения значения состояния шины я заложил 80us - вполне достаточно. Каково же было мое удивление, когда выяснилось, что проц читает это состояние как 1, хотя судя по осциллу явно должен быть 0. Проверил отладкой в EWARM через J-Link Ultra, что если вручную перед чтением установить на шине 0, то это состояние софтом читается правильно. Все дело в скорости чтения... Проц почему-то не может получить значение пина за несколько us. Стало ясно, почему и прочие процедуры чтения ключа и т. п. не работали... Попытки отключить USE_FULL_ASSERT, манипуляции оптимизацией ни к чему не привели, библиотечные функции проверены. Система тактирования проверена частично через вывод на пин MCO - Fhclk=24MHz. Нужна помощь...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ivainc1789
сообщение Jan 23 2012, 05:33
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата
Это вы программно делаете 1-wire?
Ну да. А что в этом такого? Это этакий старт в рамках изучения STM32 )))
Цитата
Но всегда была 1
Вот вот... Пока я считаю, что виновата неадекватная реализация задержек... Почему не получилось использовать SysTick надеюсь кто-нить подскажет. И еще в вашем примере довольно странное управление пином... Конфигурацию его нужно делать один раз в режим output open drain и далее принимать инфу через IDR регистр а выставлять на шину через BSRR. И как у вас реализована функция delay_us(1)? И что там за переменная DS?
Далее... Читал доки. Вроде заранее узнать длительность выполнения последовательности команд в Cortex-M3 не так то просто как например в AVR. Возможно ли реально это увидеть в IAR EWAVR при подключении через J-link? У меня складывается ощущение, что формировать тайминги на 1-wire в случае STM32 нужно максимально задействовав периферию (EXTI и таймеры). Так может получиться проще и круче ))))
Go to the top of the page
 
+Quote Post
lexanet
сообщение Jan 23 2012, 06:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 6-04-11
Пользователь №: 64 159



Цитата(ivainc1789 @ Jan 23 2012, 08:33) *
И еще в вашем примере довольно странное управление пином... Конфигурацию его нужно делать один раз в режим output open drain и далее принимать инфу через IDR регистр а выставлять на шину через BSRR. И как у вас реализована функция delay_us(1)? И что там за переменная DS?


Код
#define DS (GPIOC->IDR & GPIO_IDR_IDR6)

void DevTIM2 (void)
{
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    TIM2->CR1 = 0;                                    
    TIM2->CR2 = 0;
    TIM2->CR1 |= TIM_CR1_OPM | TIM_CR1_ARPE;
}

void delay_us (uint32_t us)
{
    TIM2->PSC = 23;
    TIM2->ARR = us;
    TIM2->CR1 |= TIM_CR1_CEN;
    while (TIM2->CR1 & TIM_CR1_CEN);
    return;
}

void delay_ms( uint16_t ms )
{
    int i;
    for (i=0; i < ms; i++){
        delay_us (1000);
    }
}


Нет, пин нужно настраивать и на ввод и на вывод (вроде во всех основоположниках от макса и атмель так делается). В зависимости от ситуации. Я свой код с stm32 абсолютно без изменений (кроме заголовочного файла и настроек пина и таймера) перенес на lpc1768 и у меня все заработало строго по временным диаграммам из даташита.
У меня 0 при резете ловился стабильно, только если задержку между опусканием шины и освобождением делать не более 50 мкс. И было это уже не резет, а 1. А вот стоит задержку увеличить до штатных не менее 480 мкс, все, тишина. А без резета все остальное не работает.

Сообщение отредактировал lexanet - Jan 23 2012, 06:14
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ivainc1789   STM32F100C6T6 и 1-wire   Jan 21 2012, 19:58
- - Aner   1-wire bus довольно жесткий к времянке, не каждый ...   Jan 21 2012, 23:53
- - ivainc1789   Цитата(Aner @ Jan 22 2012, 03:53) 1-wire ...   Jan 22 2012, 00:30
- - Aner   Без опыта преждних разработок и внимательного пони...   Jan 22 2012, 14:42
|- - sparcmaster   Цитата(Aner @ Jan 22 2012, 18:42) Все из ...   Jan 23 2012, 04:35
- - zoddy   не знаю, что у Вас там не получается... но у меня ...   Jan 22 2012, 15:56
- - skripach   ЦитатаВсе из себя 32 битные. Но вот как только дел...   Jan 22 2012, 16:44
- - ivainc1789   Цитата(Aner @ Jan 22 2012, 18:42) Без опы...   Jan 22 2012, 17:28
|- - maksimp   Цитата(ivainc1789 @ Jan 22 2012, 21:28) п...   Jan 23 2012, 05:54
- - lexanet   Я тоже так и не смог подключить DS18B20 к дисковер...   Jan 23 2012, 03:17
- - ivainc1789   ЦитатаМожно, дёргая какую-нибудь ногу до и после, ...   Jan 23 2012, 08:05
|- - maksimp   Цитата(ivainc1789 @ Jan 23 2012, 12:05) И...   Jan 23 2012, 08:45
- - lexanet   Для проверки живости датчика и работоспособности п...   Jan 23 2012, 08:19
- - ivainc1789   ЦитатаДостаточно на глаз настроить...а если частот...   Jan 23 2012, 08:32
|- - lexanet   Цитата(ivainc1789 @ Jan 23 2012, 11:32) а...   Jan 23 2012, 10:06
|- - maksimp   Цитата(lexanet @ Jan 23 2012, 14:06) то ж...   Jan 23 2012, 13:04
|- - lexanet   Цитата(maksimp @ Jan 23 2012, 16:04) Такт...   Jan 23 2012, 13:33
|- - maksimp   Цитата(lexanet @ Jan 23 2012, 17:33) Такт...   Jan 23 2012, 18:33
|- - lexanet   Цитата(maksimp @ Jan 23 2012, 21:33) Убер...   Jan 24 2012, 02:59
|- - maksimp   Цитата(lexanet @ Jan 24 2012, 06:59) Подт...   Jan 24 2012, 05:32
- - ivainc1789   Провел серию экспериментов как вы советовали... В ...   Jan 23 2012, 19:26
- - ivainc1789   Уже здесь возникают вопросы... Такой цикл выдает н...   Jan 24 2012, 08:19
|- - maksimp   Цитата(ivainc1789 @ Jan 24 2012, 12:19) Т...   Jan 24 2012, 09:00
- - ivainc1789   ЦитатаПрерывания разрешены или запрещены? Если раз...   Jan 24 2012, 11:14
|- - maksimp   Цитата(ivainc1789 @ Jan 24 2012, 15:14) т...   Jan 24 2012, 12:34
- - shista   Почитал дискусиию и решил проверить действительно ...   Jan 24 2012, 17:39
|- - lexanet   Цитата(shista @ Jan 24 2012, 20:39) Кому ...   Jan 25 2012, 04:55
- - ivainc1789   КодПочитал дискусиию и решил проверить действитель...   Jan 25 2012, 07:05
|- - maksimp   Цитата(ivainc1789 @ Jan 25 2012, 11:05) П...   Jan 26 2012, 05:28
|- - ivainc1789   Цитата(maksimp @ Jan 26 2012, 09:28) Заме...   Jan 26 2012, 07:17
- - shista   ЦитатаМое неудачное портирование исходников 1-wire...   Jan 25 2012, 13:52
- - ivainc1789   ЦитатаА можно весь проект? Конечно. Все подготовил...   Jan 25 2012, 17:27
- - shista   Посмотреть смогу не раньше пятницы, в четверг в ко...   Jan 25 2012, 19:01
|- - ivainc1789   Цитата(shista @ Jan 25 2012, 23:01) Посмо...   Jan 25 2012, 23:30
- - ivainc1789   Ну и наконец, из-за особенностей регистра VAL SysT...   Jan 26 2012, 13:26
|- - Сергей Борщ   QUOTE (ivainc1789 @ Jan 26 2012, 15:26) Н...   Jan 31 2012, 11:01
|- - maksimp   Цитата(Сергей Борщ @ Jan 31 2012, 14:01) ...   Jan 31 2012, 11:39
|- - Сергей Борщ   QUOTE (maksimp @ Jan 31 2012, 13:39) Непр...   Jan 31 2012, 12:05
- - EugenyAM   Когда-то делал на AVR асинхронный обмен по 1-wire ...   Jan 31 2012, 09:06
- - iPKM   При копировании функции _delay_loop из архива Bli...   Feb 2 2012, 10:15
- - shista   Замените Кодasm("BNE loop \n"...   Feb 2 2012, 14:47
- - toweroff   Я делал 1-wire на lpc2103 через SSP с длиной, помн...   Feb 2 2012, 17:01
- - smk   У STM есть особенность настройки выводов портов, о...   Feb 3 2012, 06:25


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

 


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


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