Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проверка работоспособности stm32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
anubis
Приветствую всех.
Возникла странная проблема, есть 2 платы с stm32f107.
На первой все в порядке, а вот на второй плате не работают DAC/ADC.

Инициализация DAC
Код
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4 );
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
  DAC->CR |= DAC_CR_BOFF1;
  DAC->CR |= DAC_CR_EN1;


Проверял DAC 1/2, ацп 1/2 (второй канал ацп не проходит калибровку - в дебаггере не идет дальше)
Везде пусто.
ps порт С как вход при этом работает нормально.
BvDV
А что за платы,кто производитель? Опорное напряжение проверяли?
anubis
Проблемная плата:
http://www.kosmodrom.com.ua/el.php?name=ST...10X-ETH-HB-LITE
Vcc от программатора +3.3V
anubis
Как вы думаете в чем может быть проблема. При запуске дэбагера выдает следующее.

Код
Reading symbols from C:\CooCox\CoIDE\workspace\General_Project_1\General_Project_1\Debug\bin\General_Project_1.elf...done.
file "C:/CooCox/CoIDE/workspace/General_Project_1/General_Project_1/Debug/bin/General_Project_1.elf"
file "C:/CooCox/CoIDE/workspace/General_Project_1/General_Project_1/Debug/bin/General_Project_1.elf"
set tdesc filename C:/CooCox/CoIDE/bin/target_desc/arm-with-m.xml
target remote 127.0.0.1:2009
Default_Reset_Handler () at C:\CooCox\CoIDE\workspace\General_Project_1\cmsis_boot\startup\startup_stm32f10x_cl.c:222
222    {
tbreak main
continue
Temporary breakpoint 4 at 0x8000666: file C:\CooCox\CoIDE\workspace\General_Project_1\main.c, line 43.

Temporary breakpoint 4, main () at C:\CooCox\CoIDE\workspace\General_Project_1\main.c:43
43    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
Falkon_99
не встречал еще чтоб переферия не работала, либо порты выгорали в STM32. Если на первой плате все ОК работает, то играем в игру найти 10 отличий. от программы до проверки напряжений на всех ногах питания. может гдето непропай


Еще дебагер может попрсту глючить, как ведет себя проц без отладки?
anubis
Пины проверили все в порядке, везде есть напряжение где надо. (аналогично с первой платой)
Прошивка на платы заливается идентичная.

Отличия в них только в том что одна программируется через JTAG другая SWD
Harbour
Если не работает та что шилась через SWD, так может быть что SWD пин пересекается с DAC/ADC. Для этого в _init() вставляется что-то типа :

Код
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);


и незабыть сделать poweroff/poweron cycle wink.gif
anubis
на плате через SWD
к сожалению строчка не помогла, и DAC по прежнему отказывается выдавать сигнал(

Harbour
ok, если прошить первую плату через SWD, а вторую через JTAG - "неисправность" переходит ?

P.S. assuming что камни и паршивка одинаковые - если нет, то дело в паршивке, однозначно
anubis
Первая плата поддерживает SWD/JTAG
http://www.ebay.com/itm/Core107V-STM32F107...=item3a7996f954

Вторая только SWD
http://www.kosmodrom.com.ua/pic/STM32F10X-ETH-HB-LITE.jpg

Идентичная прошивка и на второй не работает. Если первую прошивать SWD/JTAG результат тот же.
Harbour
вот и ответ на вопрос - дело не в камне. правьте код
anubis
Через SWD с одинаковой прошивкой результаты те же, на второй плате АЦП/ЦАП не работают.
Harbour
ни фига непонятно wink.gif

дано:

- плата-1 (swd/jtag), паршивка-1 (рабочая)
- плата-2 (swd), паршивка-2 (не рабочая)

я так понял - если шьем паршивку-2 в плату-1, то не работает из чего понятно, что дело в паршивке-2. я бы еще прошил паршивку-1 в плату-2 и проверил результат - тогда тупая логика все расставит на свои места.
anubis
Прошивка одинаковая, в этом вся беда.
Если бы разная была, то понятно что в коде проблема...
Harbour
оk, теперь понятно что прошивка1 = прошивка2. тогда озвучьте результат прошивки шитой по SWD в плату-1. Также интересно чем шьем (jlink ?) и приведите лог прошивки первой и второй плат.
anubis
Прошивка на плате-1 работает нормально(DAC/ADC), шьем аналогом st-link.
Лог результата закачки прошивки будет завтра.
Harbour
если лог одинаковый, то все незадача все равно в прошиве. походу на плате 2 есть некая причина, которая вызывает клин STM32. это скорей всего не связано с DAC/ADC и просто совпадает по времени - нужно последовательно исключать блоки программы, оставляя только DAC/ADC часть. Весьма частая причина клина STM32 - непрочитанная errata на камень wink.gif
anubis
Так программа не виснет и вполне дебагается, но на выходе с DAC 0.
Falkon_99
Странно очень, а DAC на других пинах интересно работает?

Цитата(anubis @ Nov 5 2013, 12:02) *
Проверял DAC 1/2, ацп 1/2 (второй канал ацп не проходит калибровку - в дебаггере не идет дальше)
Везде пусто.
ps порт С как вход при этом работает нормально.

сори, походу не работает на других пинах
Harbour
я бы написал/взял простой пример для DAC и прошил в обе платы, а так можно гадать долго
anubis
Доброго времени!

Заливаем на плату 1 и 2 след прошивку. Прошу прощение за закорючки, это CoIDE, CooCox последней версии отображает кириллицу. пока чет это не пофиксили. Тем не менее обе через SWD. Первая выдает белый шум с PA4 вторая с того же порта "молчит".

Код
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

int main(void) {
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
  /* Включаем РїРѕСЂС‚ Рђ */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  /* Включаем ЦАП */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  /* Включаем таймер 6 */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

  /* Настраиваем РЅРѕРіСѓ ЦАПа */
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Настраиваем таймер так чтоб РѕРЅ тикал почаще */
  TIM6->PSC = 0;
  TIM6->ARR = 500;
  TIM6->CR2=TIM_CR2_MMS_1; /* Таймер будет источником событий для ЦАПа */
  TIM6->CR1 |= TIM_CR1_CEN; // Начать отсчёт!

  /* Включить DAC1 */
  DAC->CR |= DAC_CR_TEN1; /* Преобразование РїРѕ возникновению события ... */
  DAC->CR &= ~DAC_CR_TSEL1; /* ... РѕС‚ таймера 6*/
  DAC->CR |= DAC_CR_WAVE1_0; /* Генерация шума */
// DAC->CR |= DAC_CR_WAVE1_1; /* Генерация сигнала треугольной формы */
  DAC->CR |= DAC_CR_MAMP1; /* Максимальная амплитуда */
  DAC->CR |= DAC_CR_EN1; /* Включить ЦАП1 */

  /* Бесконечный цикл */
  while (1)
  {
  }
}
Harbour
навскидку :

- не проинициализирован полностью GPIO_InitStructure - нужно или вызывать GPIO_StructInit() или заполнять все поля
- не включен клок RCC_APB2Periph_AFIO для DAC

VREF на второй плате думаю проверяли.
anubis
Спасибо большое! Harbour и другие

проблема была в "висящих" ножках + подача Vref от внешнего источника


Помогите разобраться с ЦАП и АЦП, возможно ли их сделать биполярными?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.