Перейти к содержанию
    

STM32 – вопросы – проблемы - решения.

Появилась проблема - пишу для STM32F100, так симулятор вообще ни под каким видом работать не хочет, хоть бабой ягой девайс в таргетах обзови. Увижн 4.2. Что делать?

 

И вообще, я в даташитах описания толкового не нашел - как получается в реальных камнях так, что они на 0х08000000 перепрыгивают? И зачем? Почему не как обычно - с нуля таблица векторов прерываний, а где-нить вдалеке все бутлоадеры и прочее?

 

И еще, я правильно понимаю - в железяке процу всегда видно два куска одинаковой памяти - с 0х08000000 и ее отображение начиная с 0х00000000

Тут уже намек был, что надо ставить не 100, а 101 или 103 камень. Сотки KEIL в дебагере не поддерживает.

Хотя STM32F1XXC4T6 любой не поддерживает. Так что всегда ставь STM32F103RET6 - этот точно везде заработает.

Опять же "не поддерживает" - это не совсем верно, поскольку в окне view ( в режиме дебагера ) Sistem viewer появляется вся вся перефирия. Правда родные KEIL-овские гуда приятнее.

Что касаемо запуска, то, таблица векторов устроена так: Первые 4 байта всегда являются адресом стека. Вторые 4 байта адресом запуска.

То что ты видиш в 0 и в 08000000H одно и то же - так и должно быть. Область Flash "подставляется" в 0 адрес или подставляется загрузчик по COM1 (BOOT Loader). Собственно ты и сам уже догадался.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Форумчане, еще вопрос.

Во-первых, правильно ли я понимаю - Open-drain режим - это режим подтягивания. То есть к ноге через резистор подтягиваю какое-то напряжение, и при подаче значения 0 эта нога со стороны контроллера висит в воздухе, т.е. выход ноги - это то самое подвешенное напряжение через резистор. При подаче значения 1 на ногу, она коммутируется на землю, и выход ноги - земля. Так ли это?

Во-вторых, никак не могу найти ограничений на подвешиваемое питание. Ноги 5в-совместимые, т.е. до пяти вольт можно вешать спокойно. Но на рисунке в даташите этот режим показан полевыми транзисторами. Т.е. по идее можно повесить и 12в и 24в. Какие на самом деле ограничения?

Ну и к тому же вообще ничего не сказано о максимальном входном токе в этом режиме (в обычных режимах вроде 25мА терпит). Какой брать резистор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во-первых, правильно ли я понимаю - Open-drain режим - это режим подтягивания.

"Режим подтягивания"? Зачем выдумывать свои термины, когда есть общепринятые? Это называется "открытый сток". Это практически то же самое, что и "открытый коллектор" (Open collector).

 

и при подаче значения 0 эта нога со стороны контроллера висит в воздухе, т.е. выход ноги - это то самое подвешенное напряжение через резистор. При подаче значения 1 на ногу, она коммутируется на землю, и выход ноги - земля. Так ли это?

Наоборот. "0" коммутирует на землю, "1" - отпускает.

 

Т.е. по идее можно повесить и 12в и 24в. Какие на самом деле ограничения?

Ограничения - в даташите. Превышать 5В не положено. На входах стоят стабилитроны для защиты от статики.

 

Ну и к тому же вообще ничего не сказано о максимальном входном токе в этом режиме (в обычных режимах вроде 25мА терпит). Какой брать резистор?

Здрассте. Всё сказано. 25 мА на ножку. Внимательнее читайте даташит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Превышать 5В не положено.

25 мА на ножку.

Спасибо. Просто надеялся что есть еще на свете халява...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Играюсь с ADC и DMA на STM32f103RBT6

 

Возникла неприятность!

Под отладчиком все работает на ура! Но когда устройство запускается без житага, ни АЦП ни ДМА не желают работать(((

По адресам нули и все...

В чем косяк? Может кто сталкивался! Уже и в дебаге и в релизе компилил, с оптимизацией и без... ничего не помогает(

 

Вот код инициализации:

  
 #define ADC1_DR_Address    ((uint32_t)0x4001244C)

 RCC_ADCCLKConfig(RCC_PCLK2_Div8);                 // Enable DMA1 clock
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);// Enable ADC1 and TIM1 Periph clock
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

 // Configure ADC Channel14 as analog input
 GPIO_InitTypeDef GPIO_InitStructure;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
 GPIO_Init(GPIOA, &GPIO_InitStructure);

 // DMA1 Channel configuration
 DMA_InitTypeDef           DMA_InitStructure;
 DMA_DeInit(DMA1_Channel1);
 DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
 DMA_InitStructure.DMA_BufferSize = 1;
 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
 DMA_InitStructure.DMA_Priority = DMA_Priority_High;
 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
 DMA_Init(DMA1_Channel1, &DMA_InitStructure);
 DMA_Cmd(DMA1_Channel1, ENABLE);
 // ADC1 configuration
 ADC_InitTypeDef           ADC_InitStructure;
 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
 ADC_InitStructure.ADC_ScanConvMode = DISABLE;
 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
 ADC_InitStructure.ADC_NbrOfChannel = 1;
 ADC_Init(ADC1, &ADC_InitStructure);

 ADC1->CR2 |=((uint32_t)0x00800000);
 ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_71Cycles5); 

 ADC_InjectedSequencerLengthConfig(ADC1, 1); // Set injected sequencer length
 ADC_InjectedChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_55Cycles5); // ADC1 injected channel Configuration
 ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);     // ADC1 injected external trigger configuration
 ADC_AutoInjectedConvCmd(ADC1, ENABLE);      // Enable automatic injected conversion start after regular one

 ADC_DMACmd(ADC1, ENABLE);                   // Enable ADC1 DMA
 ADC_ExternalTrigConvCmd(ADC1, ENABLE);      // Enable ADC1 external trigger
 ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE);    // Enable JEOC interupt
 ADC_Cmd(ADC1, ENABLE);                      // Enable ADC1
 ADC_ResetCalibration(ADC1);                 // Enable ADC1 reset calibaration register
 while(ADC_GetResetCalibrationStatus(ADC1)); // Check the end of ADC1 reset calibration register
 ADC_StartCalibration(ADC1);                 // Start ADC1 calibaration
 while(ADC_GetCalibrationStatus(ADC1));      // Check the end of ADC1 calibration
 ADC_SoftwareStartConvCmd(ADC1, ENABLE);     // Start ADC1 conversion

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо. Нашел косяк)

Как вы считаете, а сам "косяк" озвучить в данной теме не будет ли соответствовать хорошим манерам?

Кто-то же вчитывался в ваш код, искал "косяк". Оказывается, всё зря?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будет.

- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;

+ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

- ADC_ExternalTrigConvCmd(ADC1, ENABLE);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Столкнулся с траблом, Eclipse выдаёт :

Warn : Error: start and end sectors must be on a 2 sector boundary

Error: failed setting protection for areas 0 to 4 (-901)

 

и далее не прошивается STM32F107 через JTAG. Помогите решить проблемку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, коллеги!

 

Столкнулся со следующей проблемой:

STM32F107 стоит на плате преобразователя (мостовой инвертор). Через оптроны отвязан от силовой земли. На Viper формирую кучу питаний, в том числе и отдельное-изолированное для микроконтроллера. Для контроллера стабилизатор, куча емкостей (в том числе и около самого процессора - все как надо по даташиту и феншую!!).

 

Хаотично, фиг знает в зависимости от каких параметров, но он периодически сгорает - коза питание-земля внутри процессора. Питание модуля АЦП остается целым.

Раза четыре сгорал во время работы, один раз сгорел при включении!

 

Разводка впринципе правильная - старшие товарищи посмотрели.

 

Может кто сталкивался с таким... Или ваши соображения по данному поводу - в студию!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, коллеги!

 

Столкнулся со следующей проблемой:

STM32F107 стоит на плате преобразователя (мостовой инвертор). Через оптроны отвязан от силовой земли. На Viper формирую кучу питаний, в том числе и отдельное-изолированное для микроконтроллера. Для контроллера стабилизатор, куча емкостей (в том числе и около самого процессора - все как надо по даташиту и феншую!!).

 

Хаотично, фиг знает в зависимости от каких параметров, но он периодически сгорает - коза питание-земля внутри процессора. Питание модуля АЦП остается целым.

Раза четыре сгорал во время работы, один раз сгорел при включении!

 

Разводка впринципе правильная - старшие товарищи посмотрели.

 

Может кто сталкивался с таким... Или ваши соображения по данному поводу - в студию!!

 

Флайбэк, очевидно, если куча питаний?

А стабилизация по какому питанию?

Если не по контроллерному, то можно предположить, что проблема в этом. При изменении нагрузки на стабилизированом питании на остальных начинаются переходные процессы и если там потребление в данный момент небольшое, то вполне может быть превышение в несколько раз от номинала. Однонаправленный сапрессор не помешал бы для ограничения максимального уровня.

Ну и, если плата силовая, не нужно забывать о емкостной связи между обмотками . ХЗ как там у вас трансформатор намотан и есть ли экранирующие обмотки. Т.е. через емкостную связь обмоток транса мощные микросекундные импульсы могут пролезть на контроллерную обмотку и далее через стабилизатор и кучу емкостей на МК. Опять таки не помешал бы TVS на выходе контроллерной обмотки (после диода параллельно кондерам) и LC-фильтр после него. Последовательно с L неплохо бы поставить силовой SMD-феррит. Что-то типа BLM18PG471SN1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, коллеги!

...

Столкнулся со следующей проблемой:

...

Может кто сталкивался с таким... Или ваши соображения по данному поводу - в студию!!

Как Dir и предложил, на питание процессора - TVS. Если нет под рукой "правильного" TVS для 3.3V питания, отлично поработает Z-диод помощнее (1,3W и выше) где-нибудь на 3,9V, еще лучше (но реже имеются) на 3,6V. Проверено, отлично спасает: иногда сам умирает, но делает КЗ по питанию и глушит на себя регуляторы напряжения, а проц остается целехонек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...