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

Кто любит RISC в жизни, заходим, не стесняемся.
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

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

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

Чтото нефига непойму,подсоединил кнопку NRST через землю,когда программатор подключен - при нажатии кнопки перегружаеться, если отключить программатор и перезапустить питание некаких действий,надо кнопку boot на землю сажать?


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

DAC 72 Mhz

Сообщение balmer »

Очередная проблема с DAC.
Не могу заставить DAC работать на STM32F107 на частотах выше 36 MHz.
Строчка RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; есть для того, чтобы APB1 работало на частоте не более 36 MHz. А все равно не работает.

При тактировании всего микроконтроллера от 36 MHz работает DAC.

В чем может быть проблема?

PS: Проблему решил, но причины не понял.

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

   DAC_Init(DAC_Channel_1, &DAC_InitStructure);
   delay_us(100); //Строчка решающая проблеммы
   DAC_Cmd(DAC_Channel_1, ENABLE);
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

Сообщение Гуня »

Подскажите пожалуйста, как называются обработчики прерываний у таймеров 6 и 7 МК stm32f103c8t6. В файле stm32f10x.h есть обработчики

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

TIM6_DAC_IRQn               = 54,     /*!< TIM6 and DAC underrun Interrupt                      */
TIM7_IRQn                   = 55      /*!< TIM7 Interrupt
но их компилятор не видит, как я предполагаю изза директив

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

#ifdef STM32F10X_LD_VL
так как эти обрабочики относятся к 100-й серии а не к 103-й! Подскажите пожалуйста я новичек в stm32

У меня МК на 64 кб флеши, тоесть серия MD Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.

Вот все обработчики моего МК, но не пойму как тогда работать с таймерами 6 и 7

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

#ifdef STM32F10X_MD
  ADC1_2_IRQn                 = 18,     /*!< ADC1 and ADC2 global Interrupt                       */
  USB_HP_CAN1_TX_IRQn         = 19,     /*!< USB Device High Priority or CAN1 TX Interrupts       */
  USB_LP_CAN1_RX0_IRQn        = 20,     /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */
  CAN1_RX1_IRQn               = 21,     /*!< CAN1 RX1 Interrupt                                   */
  CAN1_SCE_IRQn               = 22,     /*!< CAN1 SCE Interrupt                                   */
  EXTI9_5_IRQn                = 23,     /*!< External Line[9:5] Interrupts                        */
  TIM1_BRK_IRQn               = 24,     /*!< TIM1 Break Interrupt                                 */
  TIM1_UP_IRQn                = 25,     /*!< TIM1 Update Interrupt                                */
  TIM1_TRG_COM_IRQn           = 26,     /*!< TIM1 Trigger and Commutation Interrupt               */
  TIM1_CC_IRQn                = 27,     /*!< TIM1 Capture Compare Interrupt                       */
  TIM2_IRQn                   = 28,     /*!< TIM2 global Interrupt                                */
  TIM3_IRQn                   = 29,     /*!< TIM3 global Interrupt                                */
  TIM4_IRQn                   = 30,     /*!< TIM4 global Interrupt                                */
  I2C1_EV_IRQn                = 31,     /*!< I2C1 Event Interrupt                                 */
  I2C1_ER_IRQn                = 32,     /*!< I2C1 Error Interrupt                                 */
  I2C2_EV_IRQn                = 33,     /*!< I2C2 Event Interrupt                                 */
  I2C2_ER_IRQn                = 34,     /*!< I2C2 Error Interrupt                                 */
  SPI1_IRQn                   = 35,     /*!< SPI1 global Interrupt                                */
  SPI2_IRQn                   = 36,     /*!< SPI2 global Interrupt                                */
  USART1_IRQn                 = 37,     /*!< USART1 global Interrupt                              */
  USART2_IRQn                 = 38,     /*!< USART2 global Interrupt                              */
  USART3_IRQn                 = 39,     /*!< USART3 global Interrupt                              */
  EXTI15_10_IRQn              = 40,     /*!< External Line[15:10] Interrupts                      */
  RTCAlarm_IRQn               = 41,     /*!< RTC Alarm through EXTI Line Interrupt                */
  USBWakeUp_IRQn              = 42      /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ 
#endif /* STM32F10X_MD */
Ruslan-maniak
Открыл глаза
Сообщения: 40
Зарегистрирован: Вт янв 18, 2011 08:15:32

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

Сообщение Ruslan-maniak »

А исходя из даташита у МД - 4 таймера. http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00161566.pdf в конце 17-ой страницы. Или я что-то неправильно понимаю?
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

Сообщение Гуня »

Да действительно 4. Я просто читаю референс мануал на всю линейку F10x. Теперь буду еще смотреть и в даташит. Я так и понял, поэтому сделал что хотел на 4-м таймере. А вообще я теряюсь в описании на эти микроконтроллеры. С Атмелами както проще было.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Гуня писал(а): А вообще я теряюсь в описании на эти микроконтроллеры. С Атмелами както проще было.

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

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

Сообщение oleg63m »

а STM будут приходить в добрых кошмарах :))
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Аватара пользователя
balmer
Это не хвост, это антенна
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

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

Сообщение balmer »

dosikus писал(а):забудете AVR как страшный сон.


Хех, второй вечер настраиваю ADC с DMA и Dual Mode. Пока всю документацию перечитаешь - столько времени проходит. Так что парой месяцев не ограничишься.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

balmer писал(а): Так что парой месяцев не ограничишься.

Ничего удивительного - юзанье SPL увеличивает время осознания на порядок .
А предыдущий "опыт" с AVR еще более отягощает сие...
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

Сообщение Гуня »

Провёл интересный эксперимент. Дрыгаю ногой стм32ф100с4т6 и смотрю осцилографом. Хотел сравнить разницу между скоростью прямого обращения к регистрам и библиотечными функциями. Результат

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

SONAR_IO -> BSRR = SONAR_TX;
SONAR_IO -> BRR  = SONAR_TX;

получается период переключения 250 наносекунд а код

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

GPIO_SetBits(SONAR_IO, SONAR_TX);
GPIO_ResetBits(SONAR_IO, SONAR_TX);
дает период аж 1100 наносекунд! разница более чем в 4 раза! Причём не помогает добавление слова inline к описании функции, и закоментирование всего лишнего
вот код библиотечной функции

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

inline void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  //assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  //assert_param(IS_GPIO_PIN(GPIO_Pin));
 
  GPIOx->BSRR = GPIO_Pin;
}

С этого делаю вывод что буду пользоваться прямым обращением к регистрам.
zöner
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

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

Сообщение zöner »

разница более чем в 4 раза!
видимо, функции не инлайнятся. Запись параметров ф-и в регистры + вызов и возврат со сбросом конвейера - вот и набегает 4х кратная разница.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Гуня писал(а):Причём не помогает добавление слова inline к описании функции.


Что за IDE ?
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

Сообщение Гуня »

CoCoox CoIDE
Странно вообще что 250 наносекунд, это при том что частота проца 24 МГц! а 250нс период, это 4 МГц частота ноги получается..
zöner
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

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

Сообщение zöner »

покажите asm листинг. На STM32 ldr/str - по 3 такта
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

Сообщение Гуня »

Я не нашел файл ассемблера. а кокос его генерирует?

В настройках компилятора Compiler Control string нашел такую строку, там есть чтото про асемблер

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

-mcpu=cortex-m3; -mthumb; -Wall; -ffunction-sections; -g; -O0; -DSTM32F100C4; -DSTM32F10X_MD; -DUSE_STDPERIPH_DRIVER; -D__ASSEMBLY__; -I.; 
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Подскажите как можно в IAR в Си получить доступ к регистрам, а именно мне надо считать и изменить регистр счёта команд Program counter(PC)?
zöner
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

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

Сообщение zöner »

Я не нашел файл ассемблера. а кокос его генерирует?
http://www.delorie.com/djgpp/v2faq/faq8_20.html
http://stackoverflow.com/questions/1370 ... rce-in-gcc
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

Сообщение Гуня »

Не получается все равно! Пробовал добавлять в строку и -S и много еще разных команд, но оно или не компилится, или компилится, но заветный файл.s не появляется. Генерируются файлы hex, bin, map, elf. Может быть это изза ограничений кокоса, а может я просто не умею его готовить =)

Может быть отзовётся ктото, у кого получилось это сделать в CoIDЕ.

Обнаружил, если запускаеш отладку, то справа появляется окно с открытым ассемблерным листингом))))

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

SONAR_IO->BSRR = SONAR_TX;
08000748:   ldr r3, [pc, #28]       ; (0x8000768 <TIM7_IRQHandler+48>)
0800074a:   mov.w r2, #2
0800074e:   str r2, [r3, #16]
SONAR_IO->BRR  = SONAR_TX;
08000750:   ldr r3, [pc, #20]       ; (0x8000768 <TIM7_IRQHandler+48>)
08000752:   mov.w r2, #2
08000756:   str r2, [r3, #20]
zöner
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

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

Сообщение zöner »

проверяйте оптимизацию. у меня компилится как положено, в 2 команды str:

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

   GPIOA->BSRR = GPIO_Pin_13;
 8000956:   61a5         str   r5, [r4, #24]
   GPIOA->BRR = GPIO_Pin_13;
 8000958:   8525         strh   r5, [r4, #40]   ; 0x28
Аватара пользователя
Гуня
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Сб мар 21, 2009 23:46:25

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

Сообщение Гуня »

Оптимизация помогла, скорость переключения стала 100 наносекунд (10 МГц). Но тут новая засада! С оптимизацией перестал работать юарт! У меня он настроен на приём и передачу по прерываниям, без оптимизации все работает, а с оптимизацией, любым из предложенных вариантов получаю нерабочий юарт. Пока не разобрался в чем дело, просто у меня устройство отвечало эхом на все байты, а теперь не отвечает.
Ответить

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