Отговори на тема  [ 13 мнения ] 
STR7 & STM32 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение STR7 & STM32
Помогнете ми да се ориентирам малко с тия ST-та ;-)
Имам малко въпросчета, за които ми трябва съвсем кратки отговори без подробности....

Въпрос 1: Има ли периферии, които се ползват в повече от една фамилия (STR7, F1, F2, F4) и кои. Примерно в Атмел PIO контролера е един и същ за всички фамилии. Има периферии пък които за АРМ7 са едни, за всички куртекси други. Има естествено и периферии само за конкретна фамилия.

Тая информация ми трябва за да си структурирам правилно директориите и файловете. Значи за всяка периферия дето ползвам, си правя хедър за регистрите и отделно някакво драйверче. Но е важно къде ще ги сложа тия хедъри и драйвери, защото имам някаква организация за условно компилиране според производител/серия/фамилия/чип...

Въпрос 2: GPIO ремапването - аз ли не мога да го разбера или просто си е каша?
При всички останали мапинга се прави в PIO контролера и е универсално, демек ако един пин може да има 8 функции ще има 3 бита за избор и тия 3 бита ги има за всеки пин и винаги са на определен адрес/офсет. Така ако правя да кажем UART драйвер му давам една структура за TX пина и той може да си го конфигурира когато трябва. При ST e някаква боза дето не мога да схвана как да я направя универсална...


Въпрос 3: GPIO прекъсвания - как работи тая боза ?!


Чет Дек 15, 2011 12:48 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение Re: STR7 & STM32
Здравей! Аз пък немога да се ориентирам точно какъв тип отговор търсиш, ама лаф да става, ако мога ще помагам. :)

1. За STR7 нямам наблюдения, но относто F1,L1,F2 перифериите са едни и същи. Има си малки допълнения в по-новите серии, примерно и в режим на изход към пина можеш да включиш вътрешен резистор към PullUp или Down. Самата структура на регистрите за всяка една периферия е подредена и последователна и там няма произволни разхвърляния из адресното пространство - виж stm32f1xx.h, stm32l1xx.h ...
2. Това е по-дълга тема...
3. Разрешаваш клока към съответния GPIO, конфигурираш режима на съответния пин или група пинове за съответна функция - вход,
изход, алтернативна функция. Конфигурираш му типа на изхода и PullUp или Down резистор или го изключваш.
Ако STM-ката от L1 серията, пускаш клок на "SYSCFG" блока. Следва свързване през този блок на съответното прекъсване от избран външен пин.
Следва конфигуриране на EXTI блока за съответното прекъсване там активираш определената линия, режим, начин на прекъсване, и го разрешаваш.
Последното е запускането на самия контролер на прекъсването. Там конфигурираш за избраното прекъсване приоритета и разрешаваш прекъсването.


Код:
    /* Enable GPIOA clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOА | RCC_APB2Periph_AFIO, ENABLE);
   
       /* Configure PA7 as inpit - "FLOATING" mode */
    GPIO_StructInit(&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource7);
   
    EXTI_StructInit(&EXTI_InitStructure);
    EXTI_InitStructure.EXTI_Line = EXTI_Line7;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
//    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    EXTI_ClearITPendingBit(EXTI_Line7);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority    =    0x0F;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority          =    0x0F;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
   
   
   .
   .
   .
   
   
void EXTI9_5_IRQHandler(void)
{

     if(EXTI_GetITStatus(EXTI_Line7) != RESET)
     {

       /* Clear the Key Button EXTI line pending bit */
        EXTI_ClearITPendingBit(EXTI_Line7);
     }
}   


За L1 серията:
Код:
     /* Enable GPIOB clock */
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
     /* Configure PB1 pin as input floating */
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
     GPIO_Init(GPIOB, &GPIO_InitStructure);

     /* Enable SYSCFG clock */
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

     /* Connect EXTI1 Line to PB1 pin */
     SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource1);

     /* Configure EXTI1 line */
     EXTI_InitStructure.EXTI_Line = EXTI_Line1;
     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
     EXTI_Init(&EXTI_InitStructure);

     /* Enable and set EXTI1 Interrupt to the lowest priority */
     NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
    
    
     .
     .
     .
    
void EXTI1_IRQHandler(void)
{

   if(EXTI_GetITStatus(EXTI_Line1) != RESET)
   {
      // Clear the EXTI line 1 pending bit //
      EXTI_ClearITPendingBit(EXTI_Line1);


   }
}


Последна промяна fan на Съб Дек 17, 2011 8:06 am, променена общо 3 пъти



Чет Дек 15, 2011 3:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: STR7 & STM32
Аз да ти кажа - ако си свикнал с Atmel, ST ще ти се видят ужасна боза.

Обратното е също 100% валидно.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Чет Дек 15, 2011 3:49 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: STR7 & STM32
определено изглежда като голяма боза...

Въпросът е прост - или може да се ползва по универсален начин или не... Примерен код как се сетва някакъв пин не ми помога. Поне не и директно, щото трябва да се ровя в стойности на константи и т.н.

Универсален начин ще рече пинът да може да е променлива и кодът да не звиси от това за кой точно пин става дума.

Примерно при атмел един порт има до 32 пина и всички регистри са 32 битови. Бит 0 от всички регистри е за пин 0 от съответния порт. Бит 1 съответства на пин 1 и т.н. Ако искам да включа пулъпи на пинове 1 и 5 съответно трябва да запиша 1-ци в битове 1 и 5 (=0x22) на Pull-up Enable Register. Aко искам да разреша прекъсване от 3-ти пин пиша 1-ца в 3-ти бит на регистъра за рарешаване на прекъсвания. Като получа прекъсване пък гледам кой битове са вдигнати - ако 7-ми бит е 1, значи 7-пин е генерирал прекъсване.

Просто е и винаги има съответствие бит-пин и обратно.

При ST гледам портовете са 16 пина - ОК. Прекъсванията не са към GPIO контролера ами на майната си в някакъв евънт... ремапванията в друг модул. Три модула вместо един -ОК, три пъти ще разрешаваме, три пъти ще клокваме...
Но това не е толкова зле, колкото връзките - примерно прекъсванията са 20 бита, а пиновете 16. Хайде ще го преживеем - сложили са още 4 прекъсвания не където им е мястото, ама кво толкова.
Обаче тия 16 бита дето уж са пинове, не са за тия пинове дето си мисля май? Нормално човек би очаквал че ако първи бит в статуса на първия модул е вдигнат, значи има промяна на първи бит от първи порт. Да, ама НЕ! Промяната наистина е по някой първи пин, ама кой порт ебали му мамата... Трябва да правиш справка в мапинга, а там да направиш справка си е....

Е, честно като минавах от Атмел към Луминари имах чувството че се връщам в първи клас, ама като гледам със ST май ще трябва да се върна там където съм бил на две отделни клетки още...


Чет Дек 15, 2011 5:51 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение Re: STR7 & STM32
Е що пък трагедията ти се вижда голяма, нямаш нужда да им знаеш адресите - имаш библиотека с дефиниции.
искаш да нулираш пин:
GPIOB->BSRRH = GPIO_Pin_1

... да сетнеш:
GPIOB->BSRRL = GPIO_Pin_1

има си изходен и за двете операции - GPIOx_ODR.
Трябва ти само основната библиотека с дефинициите и структурите stm32f1xx.h, stm32l1xx.h ... и тази с дефинициите на съответната периферия.
Все негодуваш от тия и ония! :)


Чет Дек 15, 2011 6:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: STR7 & STM32
fan,
работата ми е да правя добри основи за софтуера... Следният цитат описва доста точно в какво се състои тая работа:

Цитат:
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to build bigger and better idiots. So far, the universe is winning."
Rick Cook


Спецификата на проектите ни е такава, че има една част да го кажем "ниво приложение", която е доста сложничка и я пишем в продължение на години. Междувременно хардуерът се променя, примерно намерили сме по-добър дисплей, флаш или нещо друго. Но приложението продължава да се поддържа и за стария хардуер на полето и за новия.
Естествено би било безумие приложение със стотици сорс файла да му правим различна версия за всяка хардуерна модификация. Основната част никога не я дублираме. Ако има нещо променливо то е в ОС-а или няколко прости библиотечки, които се портват за тоя или оня хардуер.
Тоя концепция е добре позната при компютрите... нали не си представяш М$ да тръгнат да пишат различна версия на офис пакета за всеки монитор на пазара. И не само компютрите... по принцип това е правилният начин да се правят нещата.

Само че като почнат да се разхвърлят нещата по библиотеки има значение дали ползваш run time, compile time или design time алгоритми. В случая функционалността на ST е кофти щото според пина, който ползваш може да се наложи да променяш кода още на ниво дизайн. А при компилация със сигурност има разлики. Демек голям проблем за библиотечене!

А за капсулиране в драйвер направо не ми се мисли...


Чет Дек 15, 2011 11:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: STR7 & STM32
продължавам с тъпите въпроси - само до 16 пина едновременно могат да правят прекъсване?

и то не кои да е 16... баси тва не мой да е истина?


Чет Дек 15, 2011 11:54 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение Re: STR7 & STM32
Действително, до 16 пина едновременно могат да бъдат навързани към външно прекъсване при това точно определени
а именно - всички портове с еднакъв индекс са мултиплексирани към аналогичнaта линия на прекъсване.
PA0, PB0... PI0 - към EXTI0 ... PA15, PB15 ... PI15 към EXTI15.
Отделни са векторите на прекъсване за EXTI0 до EXTI4 a останалите са обединени в други два - EXTI9_5 и EXTI15_10.
Това важи за всички микроконтролери от сериите L1, F1, F2 и F4.


Пет Дек 16, 2011 6:46 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: STR7 & STM32
мда... трябва да се чете дребния шрифт :evil:


Пет Дек 16, 2011 10:40 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: STR7 & STM32
остава ми "само" алтернативния ремапинг... На първо четене го разбирам, но тук коментирахте някакви проблеми - какви бяха?


Пет Дек 16, 2011 1:03 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение Re: STR7 & STM32
Там проблеми съм нямал(важно е да не се забравя включването на клока към AFIO :) ), само трябва при конфигуриране да си отваря очите човек на 4 и да чете както казваш и дребния шрифт, примерно като:
"To optimize the number of peripherals available for the 64-pin or the 100-pin or the 144-pin
package, it is possible to remap some alternate functions to some other pins..." или
"The external interrupt/event function is not remapped. PD0 and PD1 cannot be used for external interrupt/event generation on 36-, 48- and 64-pin packages." ...


Пет Дек 16, 2011 1:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: STR7 & STM32
И чети ератите, че имаше някой "особенности" в ремапването. Бъгове чисти - ако това е ремапнато така, онова не може да се ползва и прочие дивотии. То за теб не би трябвало да е проблем де, щото това са си чисти бъгове в желязото, т.е. проблем на потребителя на продукта е да мисли за това. Така си мисля де.

Аз малко му загубих връзката, ама върху какво работиш сега? RTOS + плъгини за куртекс ли?

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пет Дек 16, 2011 3:54 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: STR7 & STM32
портвам оса за ST-тата... макар че засега повече умувам, отколкото върша работа ;-)


Пет Дек 16, 2011 4:20 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни