|
|
  |
STM32 – вопросы – проблемы - решения. |
|
|
|
Aug 16 2011, 20:46
|
Местный
  
Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127

|
Цитата(wedmeed @ Aug 16 2011, 15:29)  Появилась проблема - пишу для 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). Собственно ты и сам уже догадался.
|
|
|
|
|
Aug 26 2011, 08:29
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(wedmeed @ Aug 26 2011, 11:41)  Во-первых, правильно ли я понимаю - Open-drain режим - это режим подтягивания. "Режим подтягивания"? Зачем выдумывать свои термины, когда есть общепринятые? Это называется "открытый сток". Это практически то же самое, что и "открытый коллектор" ( Open collector). Цитата(wedmeed @ Aug 26 2011, 11:41)  и при подаче значения 0 эта нога со стороны контроллера висит в воздухе, т.е. выход ноги - это то самое подвешенное напряжение через резистор. При подаче значения 1 на ногу, она коммутируется на землю, и выход ноги - земля. Так ли это? Наоборот. "0" коммутирует на землю, "1" - отпускает. Цитата(wedmeed @ Aug 26 2011, 11:41)  Т.е. по идее можно повесить и 12в и 24в. Какие на самом деле ограничения? Ограничения - в даташите. Превышать 5В не положено. На входах стоят стабилитроны для защиты от статики. Цитата(wedmeed @ Aug 26 2011, 11:41)  Ну и к тому же вообще ничего не сказано о максимальном входном токе в этом режиме (в обычных режимах вроде 25мА терпит). Какой брать резистор? Здрассте. Всё сказано. 25 мА на ножку. Внимательнее читайте даташит.
|
|
|
|
|
Aug 26 2011, 09:22
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137

|
Цитата(scifi @ Aug 26 2011, 12:29)  Превышать 5В не положено. 25 мА на ножку. Спасибо. Просто надеялся что есть еще на свете халява...
|
|
|
|
|
Sep 2 2011, 13:43
|
Группа: Новичок
Сообщений: 5
Регистрация: 16-06-08
Пользователь №: 38 333

|
Играюсь с ADC и DMA на STM32f103RBT6 Возникла неприятность! Под отладчиком все работает на ура! Но когда устройство запускается без житага, ни АЦП ни ДМА не желают работать((( По адресам нули и все... В чем косяк? Может кто сталкивался! Уже и в дебаге и в релизе компилил, с оптимизацией и без... ничего не помогает( Вот код инициализации: CODE #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
|
|
|
|
|
Sep 5 2011, 13:35
|
Группа: Новичок
Сообщений: 5
Регистрация: 16-06-08
Пользователь №: 38 333

|
Всем спасибо. Нашел косяк)
|
|
|
|
|
Sep 7 2011, 08:27
|
Группа: Новичок
Сообщений: 5
Регистрация: 16-06-08
Пользователь №: 38 333

|
Будет. - ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; +ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; - ADC_ExternalTrigConvCmd(ADC1, ENABLE);
|
|
|
|
|
Oct 10 2011, 06:19
|
Группа: Новичок
Сообщений: 1
Регистрация: 13-07-09
Пользователь №: 51 203

|
Столкнулся с траблом, 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. Помогите решить проблемку.
|
|
|
|
|
Oct 21 2011, 13:10
|
Группа: Участник
Сообщений: 11
Регистрация: 5-07-11
Пользователь №: 66 069

|
Здравствуйте, коллеги!
Столкнулся со следующей проблемой: STM32F107 стоит на плате преобразователя (мостовой инвертор). Через оптроны отвязан от силовой земли. На Viper формирую кучу питаний, в том числе и отдельное-изолированное для микроконтроллера. Для контроллера стабилизатор, куча емкостей (в том числе и около самого процессора - все как надо по даташиту и феншую!!).
Хаотично, фиг знает в зависимости от каких параметров, но он периодически сгорает - коза питание-земля внутри процессора. Питание модуля АЦП остается целым. Раза четыре сгорал во время работы, один раз сгорел при включении!
Разводка впринципе правильная - старшие товарищи посмотрели.
Может кто сталкивался с таким... Или ваши соображения по данному поводу - в студию!!
|
|
|
|
|
Oct 22 2011, 08:18
|

Местный
  
Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830

|
Цитата(StAlexy @ Oct 21 2011, 16:10)  Здравствуйте, коллеги!
Столкнулся со следующей проблемой: STM32F107 стоит на плате преобразователя (мостовой инвертор). Через оптроны отвязан от силовой земли. На Viper формирую кучу питаний, в том числе и отдельное-изолированное для микроконтроллера. Для контроллера стабилизатор, куча емкостей (в том числе и около самого процессора - все как надо по даташиту и феншую!!).
Хаотично, фиг знает в зависимости от каких параметров, но он периодически сгорает - коза питание-земля внутри процессора. Питание модуля АЦП остается целым. Раза четыре сгорал во время работы, один раз сгорел при включении!
Разводка впринципе правильная - старшие товарищи посмотрели.
Может кто сталкивался с таким... Или ваши соображения по данному поводу - в студию!! Флайбэк, очевидно, если куча питаний? А стабилизация по какому питанию? Если не по контроллерному, то можно предположить, что проблема в этом. При изменении нагрузки на стабилизированом питании на остальных начинаются переходные процессы и если там потребление в данный момент небольшое, то вполне может быть превышение в несколько раз от номинала. Однонаправленный сапрессор не помешал бы для ограничения максимального уровня. Ну и, если плата силовая, не нужно забывать о емкостной связи между обмотками . ХЗ как там у вас трансформатор намотан и есть ли экранирующие обмотки. Т.е. через емкостную связь обмоток транса мощные микросекундные импульсы могут пролезть на контроллерную обмотку и далее через стабилизатор и кучу емкостей на МК. Опять таки не помешал бы TVS на выходе контроллерной обмотки (после диода параллельно кондерам) и LC-фильтр после него. Последовательно с L неплохо бы поставить силовой SMD-феррит. Что-то типа BLM18PG471SN1.
|
|
|
|
|
Oct 23 2011, 12:04
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(StAlexy @ Oct 21 2011, 15:10)  Здравствуйте, коллеги! ... Столкнулся со следующей проблемой: ... Может кто сталкивался с таким... Или ваши соображения по данному поводу - в студию!! Как Dir и предложил, на питание процессора - TVS. Если нет под рукой "правильного" TVS для 3.3V питания, отлично поработает Z-диод помощнее (1,3W и выше) где-нибудь на 3,9V, еще лучше (но реже имеются) на 3,6V. Проверено, отлично спасает: иногда сам умирает, но делает КЗ по питанию и глушит на себя регуляторы напряжения, а проц остается целехонек.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|