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

 
 
> 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 25 2012, 07:05
Сообщение #2


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

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



Код
Почитал дискусиию и решил проверить действительно ли такие траблы...

Если вы внимательно читали, то понимаете, что суть темы не в том, чтобы подключить датчик DS18B20 к STM32F100 как таковой - он у меня уже давно работает именно на софтовых задержках, реализации которых в принципе достаточно для большинства проектов. Я бы даже сказал, что нет необходимости эту реализацию задержек как-то переделывать, т. к. на время работы с шиной 1-wire все равно придется приостанавливать большинство других софтверных задач, т. к. времянка слишком жесткая...
Мое неудачное портирование исходников 1-wire на STM32F100 было связано с попыткой использования для счета задержек systick таймера ядра. Опять же, я осознаю, что это излишне и не нужно - по сути ничего не дает, но поведение этого таймера на счете "мелких" задержек вызвало мое непонимание его работы. Вот это и напрягает... Я был бы признателен тому, кто смог бы выделить время и проверить, в чем тут может быть проблема...
Повторюсь, в чем проблема... После счета задержки на основе этого таймера состояние шины 1-wire не может быть достоверно прочитано в рамках, например, сброса/проверки этой шины:
Код
//  генератор  прецизионных  таймингов  для  1wire (Tmax[sec]=2^24/Fhclk)
__INLINE void Delay1wire(unsigned int Ticks){
  SysTick->LOAD  =  Ticks - 1;// возможна подстройка для точности
  SysTick->CTRL  =  0x00000005;//  запуск  таймера
  while(!BITCHK(SysTick->CTRL,SysTick_CTRL_COUNTFLAG));// пока не установится COUNTFLAG
  SysTick->CTRL  =  0x00000004;// останов таймера
}

//  пин  C15  настроен  как  GPIO_Mode_Out_OD ( эмуляция  1-wire)
//  к  пину  C15  припаян  внешний  pull-up 5k с датчиком DS18B20
//  пин  A11  тестовый ,  настроен  как  GPIO_Mode_Out_PP
Work:
  GPIOC->BRR=GPIO_BRR_BR15;//  сбросить  С15 (шина в состояние "0")
  Delay1wire(500*us);
  __istate_t s = __get_interrupt_state();
  __disable_interrupt();
  GPIOC->BSRR=GPIO_BSRR_BS15;//  установить  C15  (шина в состояние "1")
  Delay1wire(80*us);
  tmp=(GPIOC->IDR >> 15)&1;// получить текущее состояние шины(должен быть "0" при испр датчике
  __set_interrupt_state(s);
  GPIOA->BSRR=tmp?GPIO_BSRR_BS11:GPIO_BSRR_BR11;//  тестовый  пин(при подкл исправном датчике) всегда  = 1 = ошибка !!!!!!
  Delay1wire(420*us);
  goto Work;

В вышеприведенном коде не удается правильно прочитать состояние шины. Далее, для поиска возможной ошибки, я упростил процедуру максимально:
Код
//  пин  C15  настроен  как  GPIO_Mode_Out_OD ( эмуляция  1-wire)
//  к  пину  C15  припаян  внешний  pull-up 5k с датчиком DS18B20
Work:
  GPIOC->BRR=GPIO_BRR_BR15;//  сбросить  С15
  Delay1wire(500*us);
  GPIOC->BSRR=GPIO_BSRR_BS15;//  установить  C15  
  Delay1wire(80*us);
  Delay1wire(420*us);
  goto Work;

По идее, этот код должен давать на С15 сигнал импульс/пауза 500us/500us. У меня он почему-то дает 600us/400us. Естественно все прерывания запрещены.
Хотелось бы понять причину такого несоответствия... Возможно, это поможет понять почему исходно не читается правильно состояние шины...
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
- - 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
|- - 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 Текстовая версия Сейчас: 28th July 2025 - 14:31
Рейтинг@Mail.ru


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