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

 
 
> 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, 08:32
Сообщение #2


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

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



Цитата
Достаточно на глаз настроить...
а если частота тактирования Fhclk изменится (в другом проекте)??? Опять настраивать?
Цитата
...И в бесконечном цикле ждем пока на ноге появиться 0
Конечно, так делать не стоит. Любая помеха на шине будет воспринята как присутствие девайса. Хотя потом его ROM код все равно не прочитается )))) ....
Go to the top of the page
 
+Quote Post
lexanet
сообщение Jan 23 2012, 10:06
Сообщение #3


Участник
*

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



Цитата(ivainc1789 @ Jan 23 2012, 11:32) *
а если частота тактирования Fhclk изменится (в другом проекте)??? Опять настраивать?
Конечно, так делать не стоит. Любая помеха на шине будет воспринята как присутствие девайса. Хотя потом его ROM код все равно не прочитается )))) ....


Нет, никакого проекта, все это исключительно для проверки, так сказать, первого подхода в жизни к 1-wire.


Блин, сложности какие то с простейшим датчиком. Вся работа с ним должна реализовываться начальными знаниями. Достаточно человеку уметь зажечь/погасить светодиод и прочитать состояние пина и все, ничего более.
Вот рабочий код LPC1768 (рабочий - значит работает):
Код
char ow_reset (void)
{
    char ret = 10;

    LPC_GPIO2->FIODIR |= (1<<1); //Pin 2.1 - OUT
    LPC_GPIO2->FIOSET |= (1<<1); //Pi 2.1 - "1"
    delay_us (1);                    
    LPC_GPIO2->FIOCLR |= (1<<1); //Pin 2.1 - "0"                              
    delay_us (480);
    LPC_GPIO2->FIODIR &= ~(1<<1); //Pin 2.1 - IN
    delay_us (80);
    if (LPC_GPIO2->FIOPIN & 2)          //Если через 80 мкс все еще на пине "1", датчика нет
    {
        ret = 0;
    }
    else
    {
        ret = 1;
    }
    delay_us (400);                          //Ждем окончания тайм-слота
    return ret;
}


то же код на stm32f100 - не работает:

Код
#define Set_PortC_Pin_6_output ((GPIOC->CRL |= 0x3000000)|(GPIOC->CRL &= ~0xC000000))
#define Set_PortC_Pin_6_input ((GPIOC->CRL &= ~0x3000000)|(GPIOC->CRL |= 0x4000000))

char ow_reset (void)
{
    char ret = 10;

    Set_PortC_Pin_6_output; // OUT
    GPIOC->BSRR = GPIO_BSRR_BS6; // "1"
    delay_us (1);                    
    GPIOC->BSRR = GPIO_BSRR_BR6; // "0"                              
    delay_us (480);
    Set_PortC_Pin_6_input; // IN
    delay_us (80);
    if (GPIOC->IDR & GPIO_IDR_IDR6)          //Если через 80 мкс все еще на пине "1", датчика нет
    {
        ret = 0;
    }
    else
    {
        ret = 1;
    }
    delay_us (400);                          //Ждем окончания тайм-слота
    return ret;
}


В чем же проблема ? Какие еще тайные знания нужны ? Может в stm не тот режим пина ?
Go to the top of the page
 
+Quote Post
maksimp
сообщение Jan 23 2012, 13:04
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(lexanet @ Jan 23 2012, 14:06) *
то же код на stm32f100 - не работает:
В чем же проблема ? Какие еще тайные знания нужны ? Может в stm не тот режим пина ?

Тактирование разрешено?
Код
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN;

Тоже, как я выше писал, добавьте дрыгание ещё одной ногой и осциллографом таким образом проверьте величины задержек.
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   ЦитатаЭто вы программно делаете 1-wire?Ну да. А чт...   Jan 23 2012, 05:33
|- - lexanet   Цитата(ivainc1789 @ Jan 23 2012, 08:33) И...   Jan 23 2012, 06:12
- - ivainc1789   ЦитатаМожно, дёргая какую-нибудь ногу до и после, ...   Jan 23 2012, 08:05
|- - maksimp   Цитата(ivainc1789 @ Jan 23 2012, 12:05) И...   Jan 23 2012, 08:45
- - lexanet   Для проверки живости датчика и работоспособности п...   Jan 23 2012, 08:19
|- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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