Приветствую всех.
Возникла странная проблема, есть 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 порт С как вход при этом работает нормально.
А что за платы,кто производитель? Опорное напряжение проверяли?
Как вы думаете в чем может быть проблема. При запуске дэбагера выдает следующее.
Код
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
Nov 6 2013, 11:15
не встречал еще чтоб переферия не работала, либо порты выгорали в STM32. Если на первой плате все ОК работает, то играем в игру найти 10 отличий. от программы до проверки напряжений на всех ногах питания. может гдето непропай
Еще дебагер может попрсту глючить, как ведет себя проц без отладки?
Пины проверили все в порядке, везде есть напряжение где надо. (аналогично с первой платой)
Прошивка на платы заливается идентичная.
Отличия в них только в том что одна программируется через JTAG другая SWD
Harbour
Nov 7 2013, 07:50
Если не работает та что шилась через SWD, так может быть что SWD пин пересекается с DAC/ADC. Для этого в _init() вставляется что-то типа :
Код
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
и незабыть сделать poweroff/poweron cycle
на плате через SWD
к сожалению строчка не помогла, и DAC по прежнему отказывается выдавать сигнал(
Harbour
Nov 7 2013, 11:11
ok, если прошить первую плату через SWD, а вторую через JTAG - "неисправность" переходит ?
P.S. assuming что камни и паршивка одинаковые - если нет, то дело в паршивке, однозначно
Первая плата поддерживает 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
Nov 7 2013, 13:55
вот и ответ на вопрос - дело не в камне. правьте код
Через SWD с одинаковой прошивкой результаты те же, на второй плате АЦП/ЦАП не работают.
Harbour
Nov 7 2013, 16:24
ни фига непонятно

дано:
- плата-1 (swd/jtag), паршивка-1 (рабочая)
- плата-2 (swd), паршивка-2 (не рабочая)
я так понял - если шьем паршивку-2 в плату-1, то не работает из чего понятно, что дело в паршивке-2. я бы еще прошил паршивку-1 в плату-2 и проверил результат - тогда тупая логика все расставит на свои места.
Прошивка одинаковая, в этом вся беда.
Если бы разная была, то понятно что в коде проблема...
Harbour
Nov 7 2013, 16:48
оk, теперь понятно что прошивка1 = прошивка2. тогда озвучьте результат прошивки шитой по SWD в плату-1. Также интересно чем шьем (jlink ?) и приведите лог прошивки первой и второй плат.
Прошивка на плате-1 работает нормально(DAC/ADC), шьем аналогом st-link.
Лог результата закачки прошивки будет завтра.
Harbour
Nov 7 2013, 17:19
если лог одинаковый, то все незадача все равно в прошиве. походу на плате 2 есть некая причина, которая вызывает клин STM32. это скорей всего не связано с DAC/ADC и просто совпадает по времени - нужно последовательно исключать блоки программы, оставляя только DAC/ADC часть. Весьма частая причина клина STM32 - непрочитанная errata на камень
Так программа не виснет и вполне дебагается, но на выходе с DAC 0.
Falkon_99
Nov 8 2013, 09:23
Странно очень, а DAC на других пинах интересно работает?
Цитата(anubis @ Nov 5 2013, 12:02)

Проверял DAC 1/2, ацп 1/2 (второй канал ацп не проходит калибровку - в дебаггере не идет дальше)
Везде пусто.
ps порт С как вход при этом работает нормально.
сори, походу не работает на других пинах
Harbour
Nov 8 2013, 09:26
я бы написал/взял простой пример для DAC и прошил в обе платы, а так можно гадать долго
Доброго времени!
Заливаем на плату 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
Nov 8 2013, 13:20
навскидку :
- не проинициализирован полностью GPIO_InitStructure - нужно или вызывать GPIO_StructInit() или заполнять все поля
- не включен клок RCC_APB2Periph_AFIO для DAC
VREF на второй плате думаю проверяли.
anubis
Nov 14 2013, 12:28
Спасибо большое! Harbour и другие
проблема была в "висящих" ножках + подача Vref от внешнего источника
Помогите разобраться с ЦАП и АЦП, возможно ли их сделать биполярными?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.