|
STM32F100C6T6 и 1-wire, не отладить в IAR EWARM v6.30.4 |
|
|
|
Jan 21 2012, 19:58
|

Профессионал
    
Группа: Свой
Сообщений: 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. Нужна помощь...
|
|
|
|
|
 |
Ответов
|
Jan 23 2012, 08:32
|

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

|
Цитата Достаточно на глаз настроить... а если частота тактирования Fhclk изменится (в другом проекте)??? Опять настраивать? Цитата ...И в бесконечном цикле ждем пока на ноге появиться 0 Конечно, так делать не стоит. Любая помеха на шине будет воспринята как присутствие девайса. Хотя потом его ROM код все равно не прочитается )))) ....
|
|
|
|
|
Jan 23 2012, 10:06
|
Участник

Группа: Участник
Сообщений: 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 не тот режим пина ?
|
|
|
|
|
Jan 23 2012, 13:04
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(lexanet @ Jan 23 2012, 14:06)  то же код на stm32f100 - не работает: В чем же проблема ? Какие еще тайные знания нужны ? Может в stm не тот режим пина ? Тактирование разрешено? Код RCC->APB2ENR |= RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN; Тоже, как я выше писал, добавьте дрыгание ещё одной ногой и осциллографом таким образом проверьте величины задержек.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|