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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

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

Сообщение КАШАК »

Скопивал все библиотеки и заголовочные файлы в Eclipse, отключил всю оптимизацию и ... ничего не заработало. Поудалял из CooCox все библиотеки и заголовочные файлы, кроме тех, что есть в Eclipse, скомпилировал и все равно работает.

Отличия могут быть только в startup файлах, в Eclipse startup_ARMCM3.S, а в CooCox startup_stm32f10x_md_vl.c. И написано в них все совершенно разное.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

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

Сообщение Satyr »

КАШАК писал(а):Отличия могут быть только в startup файлах, в Eclipse startup_ARMCM3.S, а в CooCox startup_stm32f10x_md_vl.c. И написано в них все совершенно разное.

Ну так обзови свою функцию так, как она соответсвующая по позиции в Eclipse startup_ARMCM3.S.c называется и все
Твоя функция просто не встает в таблицу прерываний т.к. имя не то
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

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

Сообщение КАШАК »

А там, оказывается, про TIM6 вообще ничего не сказано. Ну ладно, дописал вручную

Спойлер

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

/**************************************************************************//**
 * @file     startup_ARMCM3.s
 * @brief    CMSIS Core Device Startup File for
 *           ARMCM3 Device Series
 * @version  V1.07
 * @date     30. January 2012
 *
 * @note     Version CodeSourcery Sourcery G++ Lite (with CS3)
 * Copyright (C) 2012 ARM Limited. All rights reserved.
 *
 * @par
 * ARM Limited (ARM) is supplying this software for use with Cortex-M
 * processor based microcontrollers.  This file can be freely distributed
 * within development tools that are supporting such ARM based processors.
 *
 * @par
 * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 ******************************************************************************/
/*
//-------- <<< Use Configuration Wizard in Context Menu >>> ----------
*/


/*
// <h> Stack Configuration
//   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
// </h>
*/

    .equ    Stack_Size, 0x00000400
    .section ".stack", "w"
    .align  3
    .globl  __cs3_stack_mem
    .globl  __cs3_stack_size
__cs3_stack_mem:
    .if     Stack_Size
    .space  Stack_Size
    .endif
    .size   __cs3_stack_mem,  . - __cs3_stack_mem
    .set    __cs3_stack_size, . - __cs3_stack_mem


/*
// <h> Heap Configuration
//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
// </h>
*/

    .equ    Heap_Size,  0x00000C00
   
    .section ".heap", "w"
    .align  3
    .globl  __cs3_heap_start
    .globl  __cs3_heap_end
__cs3_heap_start:
    .if     Heap_Size
    .space  Heap_Size
    .endif
__cs3_heap_end:


/* Vector Table */

    .section ".cs3.interrupt_vector"
    .globl  __cs3_interrupt_vector_cortex_m
    .type   __cs3_interrupt_vector_cortex_m, %object

__cs3_interrupt_vector_cortex_m:
    .long   __cs3_stack                 /* Top of Stack                 */
    .long   __cs3_reset                 /* Reset Handler                */
    .long   NMI_Handler                 /* NMI Handler                  */
    .long   HardFault_Handler           /* Hard Fault Handler           */
    .long   MemManage_Handler           /* MPU Fault Handler            */
    .long   BusFault_Handler            /* Bus Fault Handler            */
    .long   UsageFault_Handler          /* Usage Fault Handler          */
    .long   0                           /* Reserved                     */
    .long   0                           /* Reserved                     */
    .long   0                           /* Reserved                     */
    .long   0                           /* Reserved                     */
    .long   SVC_Handler                 /* SVCall Handler               */
    .long   DebugMon_Handler            /* Debug Monitor Handler        */
    .long   0                           /* Reserved                     */
    .long   PendSV_Handler              /* PendSV Handler               */
    .long   SysTick_Handler             /* SysTick Handler              */

    /* External Interrupts */
    .long    WDT_IRQHandler        /*  0:  Watchdog Timer            */
    .long    RTC_IRQHandler        /*  1:  Real Time Clock           */
    .long    TIM0_IRQHandler       /*  2:  Timer0 / Timer1           */
    .long    TIM2_IRQHandler       /*  3:  Timer2 / Timer3           */
    .long    MCIA_IRQHandler       /*  4:  MCIa                      */
    .long    MCIB_IRQHandler       /*  5:  MCIb                      */
    .long    UART0_IRQHandler      /*  6:  UART0 - DUT FPGA          */
    .long    UART1_IRQHandler      /*  7:  UART1 - DUT FPGA          */
    .long    UART2_IRQHandler      /*  8:  UART2 - DUT FPGA          */
    .long    UART4_IRQHandler      /*  9:  UART4 - not connected     */
    .long    AACI_IRQHandler       /* 10: AACI / AC97                */
    .long    CLCD_IRQHandler       /* 11: CLCD Combined Interrupt    */
    .long    ENET_IRQHandler       /* 12: Ethernet                   */
    .long    USBDC_IRQHandler      /* 13: USB Device                 */
    .long    USBHC_IRQHandler      /* 14: USB Host Controller        */
    .long    CHLCD_IRQHandler      /* 15: Character LCD              */
    .long    FLEXRAY_IRQHandler    /* 16: Flexray                    */
    .long    CAN_IRQHandler        /* 17: CAN                        */
    .long    LIN_IRQHandler        /* 18: LIN                        */
    .long    I2C_IRQHandler        /* 19: I2C ADC/DAC                */
    .long    TIM6_DAC_IRQHandler   /* 20: Reserved                   */
    .long    0                     /* 21: Reserved                   */
    .long    0                     /* 22: Reserved                   */
    .long    0                     /* 23: Reserved                   */
    .long    0                     /* 24: Reserved                   */
    .long    0                     /* 25: Reserved                   */
    .long    0                     /* 26: Reserved                   */
    .long    0                     /* 27: Reserved                   */
    .long    CPU_CLCD_IRQHandler   /* 28: Reserved - CPU FPGA CLCD   */
    .long    0                     /* 29: Reserved - CPU FPGA        */
    .long    UART3_IRQHandler      /* 30: UART3    - CPU FPGA        */
    .long    SPI_IRQHandler        /* 31: SPI Touchscreen - CPU FPGA */

    .size   __cs3_interrupt_vector_cortex_m, . - __cs3_interrupt_vector_cortex_m


    .thumb


/* Reset Handler */

    .section .cs3.reset,"x",%progbits
    .thumb_func
    .globl  __cs3_reset_cortex_m
    .type   __cs3_reset_cortex_m, %function
__cs3_reset_cortex_m:
    .fnstart
    LDR     R0, =SystemInit
    BLX     R0
    LDR     R0,=_start
    BX      R0
    .pool
    .cantunwind
    .fnend
    .size   __cs3_reset_cortex_m,.-__cs3_reset_cortex_m

    .section ".text"

/* Exception Handlers */

    .weak   NMI_Handler
    .type   NMI_Handler, %function
NMI_Handler:
    B       .
    .size   NMI_Handler, . - NMI_Handler

    .weak   HardFault_Handler
    .type   HardFault_Handler, %function
HardFault_Handler:
    B       .
    .size   HardFault_Handler, . - HardFault_Handler

    .weak   MemManage_Handler
    .type   MemManage_Handler, %function
MemManage_Handler:
    B       .
    .size   MemManage_Handler, . - MemManage_Handler

    .weak   BusFault_Handler
    .type   BusFault_Handler, %function
BusFault_Handler:
    B       .
    .size   BusFault_Handler, . - BusFault_Handler

    .weak   UsageFault_Handler
    .type   UsageFault_Handler, %function
UsageFault_Handler:
    B       .
    .size   UsageFault_Handler, . - UsageFault_Handler

    .weak   SVC_Handler
    .type   SVC_Handler, %function
SVC_Handler:
    B       .
    .size   SVC_Handler, . - SVC_Handler

    .weak   DebugMon_Handler
    .type   DebugMon_Handler, %function
DebugMon_Handler:
    B       .
    .size   DebugMon_Handler, . - DebugMon_Handler

    .weak   PendSV_Handler
    .type   PendSV_Handler, %function
PendSV_Handler:
    B       .
    .size   PendSV_Handler, . - PendSV_Handler

    .weak   SysTick_Handler
    .type   SysTick_Handler, %function
SysTick_Handler:
    B       .
    .size   SysTick_Handler, . - SysTick_Handler


/* IRQ Handlers */

    .globl  Default_Handler
    .type   Default_Handler, %function
Default_Handler:
    B       .
    .size   Default_Handler, . - Default_Handler

    .macro  def_irq_handler handler
    .weak   \handler
    .set    \handler, Default_Handler
    .endm

    def_irq_handler    WDT_IRQHandler
    def_irq_handler    RTC_IRQHandler
    def_irq_handler    TIM0_IRQHandler
    def_irq_handler    TIM2_IRQHandler
    def_irq_handler    MCIA_IRQHandler
    def_irq_handler    MCIB_IRQHandler
    def_irq_handler    UART0_IRQHandler
    def_irq_handler    UART1_IRQHandler
    def_irq_handler    UART2_IRQHandler
    def_irq_handler    UART3_IRQHandler
    def_irq_handler    UART4_IRQHandler
    def_irq_handler    AACI_IRQHandler
    def_irq_handler    CLCD_IRQHandler
    def_irq_handler    ENET_IRQHandler
    def_irq_handler    USBDC_IRQHandler
    def_irq_handler    USBHC_IRQHandler
    def_irq_handler    CHLCD_IRQHandler
    def_irq_handler    FLEXRAY_IRQHandler
    def_irq_handler    CAN_IRQHandler
    def_irq_handler    LIN_IRQHandler
    def_irq_handler    I2C_IRQHandler
    def_irq_handler    CPU_CLCD_IRQHandler
    def_irq_handler    SPI_IRQHandler
    def_irq_handler    TIM6_DAC_IRQHandler

    .end


Но все равно ничего не работает. Да, заметил еще одну особенность, если написана строка:

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

NVIC_EnableIRQ(TIM6_DAC_IRQn);


То отключаются вообще все таймеры, хотя может и не все, но SysTick точно. И с дописанными прерываниями и без них. В общем не знаю, что делать. Что еще посоветуете?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

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

Сообщение КАШАК »

Урааааа!!! Заработало!!! :))) Оказывается я не учел того, что в таблице прерываний все прерывания имеют свой номер, надо было сделать прерывания от TIM6 - 54 номером :))

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

    .long    SPI_IRQHandler        /* 31: SPI Touchscreen - CPU FPGA */
    .long   0,0,0,0,0,0,0,0,0,0,0
    .long   0,0,0,0,0,0,0,0,0,0,0
    .long   TIM6_DAC_IRQHandler        /* 54 */
    .long   TIM7_IRQHandler            /* 55 */


Таблица вообще соответствовала даташиту процентов на 10 :shock:
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Foks
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

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

Сообщение Foks »

Ну дык потому что стартап у Вас какой-то левый. Прикрутите правильный, от STM (тот который у Вас в coocoox), и делов-то.
Giggity giggity goo!
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

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

Сообщение The_D »

Добрый вечер.
Разрабатываю свою схему на основе СТМ. Возник вопрос по обвязке кварцевого резонатора. В техдокументации на МК не указано значение резистора и нет порядка его расчета. На моей схеме это резистор R4. Прошу помощи.


Изображение
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

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

Сообщение Солнцеворот »

The_D писал(а):Добрый вечер.
На моей схеме это резистор R4. Прошу помощи.

А там не нужен этот резистор. И кварц можно брать 8МГц, а необходимую частоту регулировать умножителями (Std_periph_lib, вроде написаны под 8МГц кварц).
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

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

Сообщение SubDia »

А если все же хотите установить этот ограничивающий резистор, то лезьте на сайт STM, ищите апноут AN2867 "Oscillator Design Guide For ST Microcontrollers", открывайте раздел 4.4.3 и считайте номинал сопротивления по формуле Rext = 1/(2πFC). Впрочем, я уже посчитал, для 12МГц выходит 885 Ом (ближайшее по стандартному ряду, пожалуй, будет 910 Ом).
Ну и старайтесь, все же, ответы в документации искать. У ST она весьма неплоха.

Солнцеворот писал(а):Std_periph_lib, вроде написаны под 8МГц кварц

0_о
Как это понимать?
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

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

Сообщение The_D »

Спасибо. Как-то не подумал что есть отдельный мануал по расчету обвязки кварцев. Искал в даташите на сам МК.
Можно конечно и 8 МГц использовать, но уже купил 12 МГц резонаторы в СМД корпусе.

0_о
Как это понимать?

Наверное частото задающие константы-делители обычно указаны под 8МГц внешний резонатор. Под 12 их или придется переписывать или любоваться разгоном камня.
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

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

Сообщение SubDia »

The_D писал(а):Спасибо.

Да было б за что. =)
The_D писал(а):Наверное частото задающие константы-делители обычно указаны под 8МГц внешний резонатор. Под 12 их или придется переписывать или любоваться разгоном камня.

Константы-делители имеют постоянную величину, и можно с одинаковым удобством работать как с резонатором на 8 МГц, так и на 12 МГц.
А сама величина HSE указывается в файле "system_stm32f10x.c", который свободно редактируется руками; затем при вызове функции SystemInit (при стартовой настройке) происходит конфигурирование системы соответственно выбранной величине.
Поэтому у меня и возник вопрос. Я не понимаю, какую связь имеет стандартная библиотека и заточка под кварц определенной частоты. Просто мысль в голову не легла, вот и спрашиваю.
ЗЫ. А разгоном камня особо не налюбуетесь. При превышении определенных величин камни от ST имеют правило просто затыкаться.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

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

Сообщение КАШАК »

А где можно заказать ARM микроконтроллеры? Просмотрел неколько сайтов, но там доставка в несколько раз дороже чем покупка выходит, либо заказ от 10 и более шт.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Пока дешевле чем на eBay не находил.
makser
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт апр 24, 2009 11:25:34
Откуда: Rus

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

Сообщение makser »

Ну доставка всегда будет не меньше 200р.
А так вот проверенные, где брал стм: http://chip-nn.ru/81.php http://www.elitan.ru/
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

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

Сообщение Солнцеворот »

SubDia писал(а):Константы-делители имеют постоянную величину, и можно с одинаковым удобством работать как с резонатором на 8 МГц, так и на 12 МГц.
А сама величина HSE указывается в файле "system_stm32f10x.c", который свободно редактируется руками; затем при вызове функции SystemInit (при стартовой настройке) происходит конфигурирование системы соответственно выбранной величине.

Да, вы правы. Я этого не знал. Документация на STM32 хорошая, а на библиотеки отвратительная.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

Солнцеворот писал(а):Документация на STM32 хорошая, а на библиотеки отвратительная.
... да файл stm32f10x_stdperiph_lib_um.chm весит всего каких нибудь 19МБ. На самом деле datasheet_a вполне хватает, чтобы вообще отказаться от stdperiph_library, но тут как говорится на вкус и цвет ....
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

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

Сообщение SubDia »

ChipKiller писал(а):datasheet_a вполне хватает, чтобы вообще отказаться от stdperiph_library

Я в первое время даже боялся приближаться к ст-шной библиотеке (не хотелось изучать и разбираться), все руками настраивал.
Потом время стал экономить. Тут уж действительно, кому как нравится. Мне, в принципе, и так нравилось, и так неплохо, просто довольно много времени экономлю с библиотекой.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

SubDia писал(а):4.4.3 и считайте номинал сопротивления по формуле Rext = 1/(2πFC). Впрочем, я уже посчитал, для 12МГц выходит 885 Ом (ближайшее по стандартному ряду, пожалуй, будет 910 Ом).

Вот только мне так и не попалось ни одного кварца с известным CL. Или оно у них всех стандартное?
В плате VL Discovery вон вообще 220 Ом стоит.
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

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

Сообщение SubDia »

uk8amk писал(а):Вот только мне так и не попалось ни одного кварца с известным CL. Или оно у них всех стандартное?

В том апноуте, который я упоминал выше, сказано, что CL1 и CL2 - это конденсаторы в обвязке кварцевого резонатора. Цепь Rext+CL2 - это простейший ФНЧ, посему в расчете учитывается именно эта емкость - если Вы изучали основы теории цепей, то это Вам и так понятно. =)
Почему же схемотехники из ST нарушают собственные рекомендации в случае с VL Discovery, я пока ответить не могу. И не уверен, что вообще когда-либо смогу ответить.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
The_D
Встал на лапы
Сообщения: 108
Зарегистрирован: Пт июл 06, 2012 14:28:17
Откуда: Россия. г.Смоленск

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

Сообщение The_D »

Потом сам пересчитал, действительно нужно было 880 Ом, к сожалению ряд СМД резисторов у меня не полный. Поставил 1кОм, надеюсь подойдет.
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

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

Сообщение SubDia »

Ну, я не думаю, что лишних 100 Ом сорвет устойчивость колебательной системы. =)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Ответить

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