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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Родился
Сообщения: 13
Зарегистрирован: Вт окт 04, 2011 09:51:33

Сообщение fff_br »

a5021 писал(а):Несколько сложно понять ваши объяснения, но если я их понял правильно, то вам требуется нечто наподобие функции itoa(), которая существует в различных вариантах языка Си, но которой нет в IAR-е. Вопрос этот пользователи IAR-а задавали уже неоднократно и в интернетах можно найти самописные реализации этой функции.
itoa это из int в массив... да похоже, я делаю так:
переменная s (uint8_t) и адрес у которой 0x2000004b
преобразую в строку :
sprintf(nnnn,"%02x",(char*)&s); , где nnnn это char nnnn[8]; (в nnnn теперь "2000004b")
затем, полученное значение я записываю в массив
uint8_t *k,*h;
k=str[0][0];
h=nnnn;
while (*h!=0) *k++=*h++; т.е. адрес переменной в массиве, а вот теперь не доходит, как организовать запись в переменную ( т.е. надо из char[] преобразовать в int и записать по этому адресу число)
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Зачем вообще это всё делать?!
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

fff_br, была когда-то такая задача (работа со строками). Слепил из того что было :) . Может пригодится

А зачем вообще указатель сохранять как строку ?
Вложения
Utils.c
(2.22 КБ) 177 скачиваний
Иван Сусанин - первый полупроводник :solder:
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Я вот как-то тоже не въехал, отчего прекратил выдачу бесполезных советов на этот счет.

Если для каких-то надобностей нужно хранить адрес переменной, то почему бы его не хранить сразу в двоичной форме, без всяких конвертаций в строку и обратно?
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

Был один косяк у меня с адресами регистров NVIC, но появилась странность в работе приоритетов - если они оба по 0, то более приоритетное прерывание не прерывает менее приоритетное, если задать приоритет отличный от 0, хотя бы для одного из них - то все работает как надо. Почему так? Ведь если приоритет не задан в регистрах, то он, согласно документации, определяется по номеру прерывания.
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

Alexey_N писал(а):Почему так?
Потому что :)
When the processor is executing an exception handler, the exception handler is preempted
if a higher priority exception occurs.
If an exception occurs with the same priority as the
exception being handled, the handler is not preempted, irrespective of the exception
number.
However, the status of the new interrupt changes to pending.
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Сообщение Alexey_N »

А во как. Внимательнее прочитал этот пункт 2.3.5, который вы привели, и понял, что это действительно так :)
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

как задать приоритеты прерываний в cube ? Вот хочу чтоб самый главный был tim3. как правильно сделать ?
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Alex_Golubev писал(а):как задать приоритеты прерываний в cube ?
Изображение
0 - наивысший приоритет
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

почему у меня таймер не работает хотя прерывание стоит тоже наивысшее. В cube установил высокий приоритет HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); у всех остальных HAL_NVIC_SetPriority(x, 0, 1);
Вот код:

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

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
counter_time ++;
switch (counter_time)
{
case 1:
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
break;

case 2: HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, GPIO_PIN_SET); flag_1 = 1; break;

case 3: HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET); break;

case 4: HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET); counter_time =0;break;

}
}

void MX_TIM3_Init(void)
{

TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;

htim3.Instance = TIM3;
htim3.Init.Prescaler = 83;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 20;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim3);

sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);

}
Смотрел осциллографом GPIO_PIN_3. Все болтается (разное время между импульсами. ) такое ощущение что что-то выполняет какие то операции и не дает сразу перейти на вектор но что не понятно.
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

у всех остальных HAL_NVIC_SetPriority(x, 0, 1);
наверное должно быть у всех остальных HAL_NVIC_SetPriority(x, 1, 0);

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

/**
  * @brief  Sets the priority of an interrupt.
  * @param  IRQn: External interrupt number .
  *         This parameter can be an enumerator of IRQn_Type enumeration
  *         (For the complete STM32 Devices IRQ Channels list, please refer to stm32l0xx.h file)
  * @param  PreemptPriority: The preemption priority for the IRQn channel.
  *         This parameter can be a value between 0 and 3.
  *         A lower priority value indicates a higher priority
  * @param  SubPriority: the subpriority level for the IRQ channel.
  *         with stm32f0xx devices, this parameter is a dummy value and it is ignored, because 
  *         no subpriority supported in Cortex M0 based products.   
  * @retval None
  */
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Сообщение Alex_Golubev »

Я вот так выставил прерывания в cube.
Вложения
Безымянный.png
(171.89 КБ) 521 скачивание
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

трудно что либо разобрать на рисунке, пользую в основном STM32F0 там subpriority нет
Родился
Сообщения: 13
Зарегистрирован: Вт окт 04, 2011 09:51:33

Сообщение fff_br »

Myp3ik писал(а):Может пригодится
, Спасибо.
a5021,menzoda,
Идея была в асинхронном конвейере обработки данных от RS232, где отправка/прием/первичная обработка данных, организованы отдельной функцией, без использования глобальных переменных. В качестве параметров функции передаются n-ое кол-во указателей на char[], которые могут использоваться как просто наборы символов, или как указатель на переменную, или как селектор выбора алгоритма первичной обработки данных.
Родился
Сообщения: 5
Зарегистрирован: Пн июл 23, 2007 21:22:15

Сообщение M@T_F@Q »

M@T_F@Q писал(а):Добрый день товарищи.... Вот решил взяться за ум... и тут же столкнулся с проблемой.. Скачал последнюю версию STM32CubeMX, скачал KEIL5 (WINDOWS8... пробовал KEIL4 - не хочет работать на WINDOWS8). Смотрел много примеров где правят ручками.... также смотрел где вообще ничего не правят ручками... Собственно вопрос - Почему STM32CubeMX не хочет компилировать проект?

Также сделал скрины настроек.

Заранее спасибо.

Изображение Изображение Изображение Изображение Изображение
Товарищи... вопрос еще в силе... подскажите пожалуйста...
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

Не совсем понимаю, в чём проблема, на основе примеров STM написать десять строчек кода просто на Си.
Контактная информация:
Родился
Сообщения: 5
Зарегистрирован: Пн июл 23, 2007 21:22:15

Сообщение M@T_F@Q »

GARMIN писал(а):Не совсем понимаю, в чём проблема, на основе примеров STM написать десять строчек кода просто на Си.
Я пересмотрел кучу примеров... в нескольких примерах показано как прописать ручками эти самые 10 строчек... как получается по примерам - совсем не 10 строчек и совсем в других программах. я до этого писал на BASIC'е (AVR) поэтому те самые 10 строчек немного непонятно какие и куда.... в нескольких видео было проще: С помощью STM32CubeMX создавали проект и сразу же его открывали в той же самой среде KEIL5... и используя подключенные библиотеки, по ним посмотрев какие функции используются можно понять что к чему... а учитывая что проект ручками собирать для новичка это очень сложно поэтому и хочу в первую очередь добиться чтобы готовые программы работали....
Контактная информация:
Открыл глаза
Сообщения: 44
Зарегистрирован: Сб окт 09, 2010 08:45:42

Сообщение lionberger »

https://yadi.sk/d/jQnfLlx7pCJHX Может поможет. Это моя проба STM.
Родился
Сообщения: 5
Зарегистрирован: Пн июл 23, 2007 21:22:15

Сообщение M@T_F@Q »

lionberger писал(а):https://yadi.sk/d/jQnfLlx7pCJHX Может поможет. Это моя проба STM.
Спасибо большое.... изучаю....
Контактная информация:
Открыл глаза
Сообщения: 44
Зарегистрирован: Сб окт 09, 2010 08:45:42

Сообщение lionberger »

https://yadi.sk/d/A63yymIdpCxEw Добавил проект STM32F103 LCD 16*2 HAL с русским шрифтом
Ответить

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