STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

IRF840 писал(а): После программирования контроллера на этой плате нужно ли отключать ST-Link ... И если надо отключить - как это сделать?
Отключать совсем не обязательно, но если хочется, то отключить очень просто - снять 2 джампера (почитайте мануал на свой дискавери, Figure 8 - если не найдете).
Все будет только лучше, в крайнем случае - хуже.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

coredumped писал(а): Отключать совсем не обязательно, но если хочется, то отключить очень просто - снять 2 джампера
Ты пробовал ? :)))
Говорю же не только джамперы - RESET надо от STLink отсоединять ...
Реклама
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Пн сен 25, 2006 17:47:10

Сообщение IRF840 »

Мне как раз отключать и не хочется (еще новые прошивки ожидаются), просто не представляю, сколько STLink "кушает".В общем, если и перемычки не снимать - на выполнение программы это не влияет?
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Здравствуйте, подскажите: Подсоединяю ТСОП1736 к СТМ32L, если подать на тсоп питание 5В все нормально,если 3 вольта прерывание нет(в контроллере),в даташите питание от 2,5В,почему неработает? ноги на контроллере неправильно выставил(хочу чтобы от одного напряжения питались).У когонибудь получалос на одно напряжение настроить?

RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
GPIOC->MODER &= ~GPIO_MODER_MODER0;//вход
GPIOC->OTYPER &= 0;//установка в пуш -ап
GPIOC->PUPDR |= GPIO_PUPDR_PUPDR0_0; // подтяжка сопротивления
GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR0;
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

разобрался -питание идет от 4,5в. Другая ошибка выскакала:

PUBWEAK HardFault_Handler
SECTION .text:CODE:REORDER(1)
HardFault_Handler
B HardFault_Handler

Это когда поставил прерывание,только на этой строчке находиться, в чем проблемма?)
и еще один вопрос частенько начал выскакивать неможет найти stm32l1xx.c и начинаеться в асемблерном коде все,как можно исправить?
Реклама
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

здравствуйте,как я понял
void HardFault_Handler(void)
{return ;
/* Go to infinite loop when Hard Fault exception occurs */
}

Это прерывание как я понял, это по неизвестным нам причинам прерывание? почему-то у меня оно идет после void EXTI0_IRQHandler(void);
как его убрать?
Реклама
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

а там нужно убрать флаг прерывания,чтобы он постоянно невозвращался?
Друг Кота
Аватара пользователя
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья

Сообщение oleg63m »

вах-вах, баня вам грозит, уважаемый.....
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

oleg63m писал(а):вах-вах, баня вам грозит, уважаемый.....

Всмысле?
можно запретить прерывание HardFault_Handler ? NVIC_DisableIRQ(-3);
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

Прчин появления HardFault может быть много, чаще всего - обращение к несуществующей области памяти.
В Вашем случае - скорее всего Вы забыли добавить вектор аппаратного прерывания в таблицу векторов. Те прерывание Вы разрешили, а обработчик прерывания подключить забыли. Копайте в этом направлении.
PS: Баня грозит за нарушение правил - низзя создавать сообщения сразу после своего же. Редактируйте свое последнее сообщение.
Все будет только лучше, в крайнем случае - хуже.
Друг Кота
Аватара пользователя
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья

Сообщение oleg63m »

спящий писал(а):Всмысле?
В том смысле баня, что Вы используете несколько постов подряд, вместо того, чтобы применять редактирование(правку).
Это является нарушением правил форума и грозит от..... вобщем помывкой в бане после предупреждения.
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

coredumped писал(а):Прчин появления HardFault может быть много, чаще всего - обращение к несуществующей области памяти.
В Вашем случае - скорее всего Вы забыли добавить вектор аппаратного прерывания в таблицу векторов. Те прерывание Вы разрешили, а обработчик прерывания подключить забыли. Копайте в этом направлении.
PS: Баня грозит за нарушение правил - низзя создавать сообщения сразу после своего же. Редактируйте свое последнее сообщение.
Я думал что таблица прерывания в файле startup_stm32l1xx_md.s жестко прикреплена,или ее надо изменять?

"обработчик прерывания подключить забыли" у меня сигнал прерывания EXTI0_IRQHandler(void); и он обробатывается в функции.
Вот еще одна интересная штука: в "пустом" проекте - где мало кода(чисто RC5 - для пульта) прерывание работает,поставил де букв побольше -непашет, хотя осталось также 2 прерывание. Тоесть программа нормально работает и через несколько секунд виснет,можно какнибудь отключить, выходить из нее,сбрасывать флаг? __enable_fiq (); - это неоно?
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

В обработчике прерывания pending flag сбрасываете (EXTI_ClearITPendingBit() )?
Если нет, то это может быть проблемой.
Еще проверьте, не разрушается ли у Вас стек. Может Вы в функциях используете локальные массивы и размера стека банально не хватает?
Все будет только лучше, в крайнем случае - хуже.
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

coredumped писал(а):В обработчике прерывания pending flag сбрасываете (EXTI_ClearITPendingBit() )?
Если нет, то это может быть проблемой.
Еще проверьте, не разрушается ли у Вас стек. Может Вы в функциях используете локальные массивы и размера стека банально не хватает?

Возможно проблемма была то что я из прерывания вызывал функцию -возможна ли проблемма?

И еще один важный для меня вопрос: Сделал устройтво ,программа в Iar как запустить чтобы он работал без программатора(diskovery), до этого нажимал зеленый треугольник.

Если точнее как чтобы без отладчика(swd),может какуюнибудь ногу надо подсоединить?чтобы при подачи питание запускалась программа.
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

Сообщение The_D »

Да как бы при подключении питания и происходит исполнение прошивки. Точнее процедуры main(по умолчанию)
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

The_D писал(а):Да как бы при подключении питания и происходит исполнение прошивки. Точнее процедуры main(по умолчанию)
Так вот когда прошиваеш при подключеном дисковере работаеш, отсоединяеш и подаеш вновь питание -неработает.Может нужен какойнибудь reset?
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

1. У Вас, возможно, стоит в опциях проекта загрузка и исполнение в RAM. Где это исправить в иар я не знаю, тк использую Кейл. Ищите в опциях проекта.
2. Еще, может быть, у Вас нога boot0 в воздухе болтается или сидит на питании - это приводит к запуску встроенного бутлоадера. Нужно притянуть boot0 к земле. Хотя, в Дискаверях по умолчанию boot0 притянут к земле, но есть перемычка. Если Вы ее не снимали, то действуйте по п.1. Но, советую проверить :)
Все будет только лучше, в крайнем случае - хуже.
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Так вот в том дело что я хочу без дескавери устройство, оно программируеться 3 проводками: тактовая частота, данные и земля, или обязательно нужен BOOT? или ресет?
В iare ненашел - никто чтоли непрошивал устройство в ИАРе?)
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

подал землю NRST -заработало,как сделать это программно? просто уже невариант переделывать устройство -возможно ли это?
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Настала и моя очередь задать чайниковский вопрос. Понадобилось использовать DAC. Пишу простейшую программу, а не работает ничего.
Спойлер

Код: Выделить всё

int main(void) {
  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_InitTypeDef DAC_InitStructure;
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
  DAC_Cmd(DAC_Channel_1, ENABLE);
  DAC_SetChannel1Data(DAC_Align_12b_R, 1024);  
  while (1)
  {
  }
}
Запускаю на STM32F103RBT6.
Конфигурировал частоту кристалла и на 72 MHz и на 24 MHz. Ничего не помогает. Несколько сэмпликов скачивал с сети - тоже нуль на выходе всегда :cry:

PS: Все оказалось просто - в STM32F103RBT6 нет DAC
Ответить

Вернуться в «ARM»