Jump to content
ART_ME

STM32 для чайника

Recommended Posts

H3c8d9e25cf884cc0ac306d23b6107e2dZ.jpg

сотни чего рублей?.Рабочая плата.В HAL е работает.Все прерывания.Я купил за 230 гривень.А Это немного больше умножить в два если рублей.

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

@Ivan Rusev У меня есть такая плата без деталей, я бы купил сам глючный чип, просто ради интереса. Я знаю что вы из Украины (хакнул вашу почту), но я писал не вам.

Share this post


Link to post
Share on other sites

Высокая надежность SiC! Как они этого добились?

За несколько лет кропотливых исследований и совершенствования технологии компания Infineon смогла довести показатели надежности и стабильности параметров высоковольтных и быстродействующих карбид-кремниевых транзисторов линейки CoolSiC практически до уровня их кремниевых собратьев.

Подробнее

30.12.2019 в 13:47, Электронщик сказал:

Так не эти светики, а отдельно подпаянные к GPIO

А второй вывод светика к чему? К земле или к Vcc?

Share this post


Link to post
Share on other sites

Материалы вебинара: МЭМС-датчики ST для работы со звуком – новые возможности

На вебинаре мы рассказали о микрофонах, их топологиях применения и возможностях, а так же о новых мультирежимных широкодиапазонных микрофонах с нижним портом и PDM-интерфейсом для систем с батарейным питанием. Вы можете посмотреть видеозапись вебинара, ознакомиться с презентацией и ответами на вопросы.

Подробнее

Использование экосистемы STMicroelectronics: подключение датчиков к STM32G4

В статье описаны основные составляющие экосистемы STMicroelectronics для работы с микроконтроллерами STM32, а также приведен пример ее практического применения: создание проекта на базе STM32G4 с подключением датчиков и использованием отладочной платы NUCLEO-G474RE и платы расширения X-NUCLEO-IKS01A2.

Подробнее

1 час назад, Darth_Vader сказал:

А второй вывод светика к чему?

Ну человек же пишет что 1 раз делает BSSR включается, второй раз делает то же самое - выключается.

Какая разница к чему. Вопрос что у него выводы как toggle работают якобы через регистр. Значит либо не верно проверяет, либо мистика)) Либо где то в коде что то есть еще)

Share this post


Link to post
Share on other sites

я думаю учителя скорее всего в коде или в компиляторе.У меня таких две платы от разных производителей.А если в камне.То какой контроллер тогда вы мне посоветуете? если cortexm3 он у меня есть там всё как часы.

Есть проект можете посмотреть.

Share this post


Link to post
Share on other sites

MasterElectric чудеса были из за плохой пайки стороны выводов чипа которые идут на кварц, вот и были чудеса, а как чип к плате придавил, а потом и пропаял, и дисплей запустился сразу и светики нормально работают и тактирование и задержки. Паял его пол года назад на скорую руку, так было проверил тогда какой-то кусок кода он работал, а потом эту плату закинул, а тут понадобилось и чудеса пошли), причем два дня угробил, и анализатор подключал и дебагером смотрел все вроде работает, но тот же дисплей не запускался, так как задержки не те были и т.д..

Share this post


Link to post
Share on other sites

Нет тут другое .Ацп работает  в основном цикле.А в прерывании в майне прописываю ADC1->CR2|= ADC_CR2_SWSTART;  и все прерывания перестают работать .Почему? Значить я что то не то делаю. Может проблема с тактированием.А может не всё я прописал.Вообще С Новым 2020 годом!

Share this post


Link to post
Share on other sites
On 12/29/2019 at 10:45 PM, Ivan Rusev said:

void adc_IRQhanler(void)

Нельзя Новый год начинать с незаконченными делами. Обработчик не правильно назван, надо типа

void ADC_IRQHandler(void) с учетом регистра

Share this post


Link to post
Share on other sites

void adc_IRQhanler(void) в этом вся причина спасибо я потерял бдительность .С НОВЫМ ГОДОМ! ПРЕРЫВАНИЕ ЗАРАБОТАЛО.Я ВАМ БЛАГОДАРЕН,УКРАИНА ВСЕГДА БУДЕТ С РОССИЕЙ ВМЕСТЕ,БОЛЬШОЕ ВАМ СПАСИБО.

void ADC_IRQHandler(void) Вот так правильно.

Извините  я ученик.

Share this post


Link to post
Share on other sites

MasterElectric Классное пожелание, тем более что с кодом всегда много проблем))), даже бывает сто раз код пишешь и уже до этого натыкался на грабли, и все равно ту да же наступаешь, особенно из - за невнимательности, или когда кодишь ночью.

Share this post


Link to post
Share on other sites

Я учился в ftmel Studio avr. Там меньше но тоже есть.А СТМ тут полный атас.

Share this post


Link to post
Share on other sites

У меня мастера паяльника возникла проблема есть прерывание по ацп инжектированных каналов  я или неправильно делаю что в хале что в ручную прерывание  работает после нажатия reset как в одну так и в другу сторону.Диод загорается как в одну так и в другу гаснет после ресета.

/*
 * main.c
 *
 *  Created on: 8 лист. 2019 р.
 *      Author: Ivan
 */


#include"main.h"
#include "stm32f4xx.h"
#include "stm32f407xx.h"
volatile unsigned int pauza=0;
volatile unsigned char flag=0;
volatile unsigned char n=0;
volatile unsigned int adc_data=0;
void EXTI1_IRQHandler(void)
{
    EXTI->PR |=EXTI_PR_PR1;
    n++;
}
void ADC_IRQHandler(void)
{
     if(ADC1->SR & ADC_SR_JEOC) //ждем пока первое преобразование завершится
     {
                        ADC1->SR &=~ ADC_SR_JEOC;
                          adc_data = ADC1->JDR1;

                           if(adc_data > 2024)
                         {

                               GPIOC->BSRR |= GPIO_BSRR_BS13;
                         }
                         else
                         {

                             GPIOC->BSRR |= GPIO_BSRR_BR13;
                         }
     }
}
void TIM3_IRQHandler (void)
{
  if(TIM3->SR & TIM_SR_UIF)
  {
    TIM3->SR &= ~ TIM_SR_UIF;
    pauza++;
    if(pauza>20)
    {
          GPIOC-> BSRR |=GPIO_BSRR_BS0;
    }
    if(pauza>40)
    {
         GPIOC-> BSRR |=GPIO_BSRR_BR0;
        pauza=0;
    }
   }
    //TIM2->SR &= ~ TIM_SR_UIF;
}
void EXTI_Init(void)
{

     // RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
      GPIOA->MODER &=~ GPIO_MODER_MODER1_1;
      GPIOA->MODER &=~ GPIO_MODER_MODER1_0;
      GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1_1; //бит1
     GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR1_0;
       GPIOA->PUPDR &=~GPIO_PUPDR_PUPDR1_1;
        GPIOA->PUPDR |= GPIO_PUPDR_PUPDR1_0;
        RCC->APB2ENR |=RCC_APB2ENR_SYSCFGEN ;
        SYSCFG->EXTICR[1] |= SYSCFG_EXTICR1_EXTI1_PA;
        EXTI->IMR|=EXTI_IMR_MR1;
        EXTI->RTSR|=EXTI_RTSR_TR1;
        EXTI->FTSR&=~EXTI_FTSR_TR1 ;
        NVIC_EnableIRQ (EXTI1_IRQn);
      //  SYSCFG->EXTICR[3] |= SYSCFG_EXTICR1_EXTI1_PB;
 //RCC->AHB1ENR |=
}

void adc_init(void)
{
 //RCC->AHB1ENR|=
        // RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
         // GPIOA->MODER |= GPIO_MODER_MODER0;
          RCC->APB2ENR|=RCC_APB2ENR_ADC1EN;
          ADC1->CR2 |=ADC_CR2_CONT;//включить АЦП
               ADC1->CR2|=ADC_CR2_JEXTSEL;
                  ADC1->CR2 |=ADC_CR2_JEXTEN;

          ADC1->SMPR2 &=~ ADC_SMPR2_SMP1_0; //1
         ADC1->SMPR2&=~ADC_SMPR2_SMP1_1; //1
          ADC1->SMPR2 &=~ ADC_SMPR2_SMP1_2; //1

          ADC1->JSQR &=~ADC_JSQR_JSQ1;
           //  ADC1->SQR3   &=~ADC_SQR3_SQ1_0;   //1 IN1
          //      ADC1->SQR3   &= ~ ADC_SQR3_SQ1_1;     //0
          //      ADC1->SQR3   &= ~ADC_SQR3_SQ1_2;   //0
          //      ADC1->SQR3   &=~  ADC_SQR3_SQ1_3;     //0
          //      ADC1->SQR3   &= ~ADC_SQR3_SQ1_4;

}
void GPIO_init(void)
{
        RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
              GPIOA->MODER |= GPIO_MODER_MODER0;
              GPIOA->MODER |= GPIO_MODER_MODER1;
           RCC->AHB1ENR|=RCC_AHB1ENR_GPIOCEN;

               // GPIOC->MODER &=~ GPIO_MODER_MODER13;
                   GPIOC->MODER &=~ GPIO_MODER_MODER13_1;
                   GPIOC->MODER |= GPIO_MODER_MODER13_0;
                   GPIOC ->OTYPER &=~GPIO_OTYPER_OT13;
                   //бит0 определяет скорость работы GPIO
                    GPIOC->OSPEEDR &=~ GPIO_OSPEEDER_OSPEEDR13_1; //бит1
                    GPIOC->OSPEEDR &=~ GPIO_OSPEEDER_OSPEEDR13_0;
                   GPIOC->PUPDR |=GPIO_PUPDR_PUPDR13_1;
                     GPIOC->PUPDR &=~ GPIO_PUPDR_PUPDR13_0;
                    GPIOC->MODER &=~ GPIO_MODER_MODER0_1;
                        GPIOC->MODER |= GPIO_MODER_MODER0_0;
                        GPIOC ->OTYPER &=~GPIO_OTYPER_OT0;
                                                 //бит0 определяет скорость работы GPIO
                     GPIOC->OSPEEDR &=~ GPIO_OSPEEDER_OSPEEDR0_1; //бит1
                    GPIOC->OSPEEDR &=~ GPIO_OSPEEDER_OSPEEDR0_0;
                    GPIOC->PUPDR |= GPIO_PUPDR_PUPDR0_1;
                    GPIOC->PUPDR &=~ GPIO_PUPDR_PUPDR0_0;
                    GPIOC->MODER &=~ GPIO_MODER_MODER0_1;
                   GPIOC->MODER &=~ GPIO_MODER_MODER0_1;
                                          GPIOC->MODER |= GPIO_MODER_MODER2_0;
                                          GPIOC ->OTYPER &=~GPIO_OTYPER_OT2;
                                                                   //бит0 определяет скорость работы GPIO
                                       GPIOC->OSPEEDR &=~ GPIO_OSPEEDER_OSPEEDR2_1; //бит1
                                      GPIOC->OSPEEDR &=~ GPIO_OSPEEDER_OSPEEDR2_0;
                                      GPIOC->PUPDR |= GPIO_PUPDR_PUPDR2_1;
                                      GPIOC->PUPDR &=~ GPIO_PUPDR_PUPDR2_0;
                                      GPIOC->MODER &=~ GPIO_MODER_MODER2_1;

}
void init_systimer(void)
{
  SysTick->LOAD|=1000 - 1;
  SysTick->VAL=0;
  //SysTick->CTRL|=CLKSOURCE;


}
void timer_3_init(void)
{


      RCC->APB1ENR |=RCC_APB1ENR_TIM3EN;
      //NVIC_SetPriority(TIM3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));

      //  TIM3->CNT=0;
       // TIM3->CR1=0;
      //TIM3->CR1&=~ TIM_CR1_CEN;
       TIM3->PSC=3500 - 1; // Настраиваем делитель что таймер тикал 1000 раз в секунду
           TIM3->ARR  = 100;


        TIM3->DIER = TIM_DIER_UIE;
        TIM3->EGR = TIM_EGR_UG ;


         TIM3->CR1|=   TIM_CR1_CEN;
         NVIC_EnableIRQ(TIM3_IRQn);
}

int main(void)
{
               GPIO_init();
               // EXTI_Init();
               timer_3_init();
              adc_init();
              ADC1->CR1|= ADC_CR1_JEOCIE;
                   ADC1->CR2 |=  ADC_CR2_ADON;
                     NVIC_EnableIRQ ( ADC_IRQn);
                     ADC1->CR2 |= ADC_CR2_JSWSTART;
    while(1)
    {
        //if(n==1)
    //    {
        // GPIOC-> BSRR |=GPIO_BSRR_BS13;
        //}
        //if(n==2)
        //{
        //          GPIOC-> BSRR |=GPIO_BSRR_BR13;
        //          n=0;
        //}
                           //      if(adc_data > 2024)
                          //   {

                           //        GPIOC->BSRR |= GPIO_BSRR_BS13;
                           //  }
                           //  else
                          //   {

                            //     GPIOC->BSRR |= GPIO_BSRR_BR13;
                            // }
    }
}
извените за назойливость.

Share this post


Link to post
Share on other sites
Posted (edited)

Вообщем что-то по ходу сдох мой чип STM32F407, который запаивал, половину проги написал все работало, а потом раз и что-то случилось с тактированием, и опять на Delay застряет в отладчике посмотрел. при этом на кварце никаких шевелений, менял и кварц, и внутреннее тактирование бред какой-то, все прозвонил и пропаял 5 раз ничего, чип  брал в РКС еще у него 7 ног были на половину отрезаны с магазина и даже жалобу оставлял, но без толку, решил на эту плату подкинуть F745, и тут вопрос по поводу тактирования, вот 745 максимум 216МГц, я в основном и юзаю на предельных частотах, так вот вопрос: к примеру в кубе кварц можно выбирать в пределах до 26МГц, с каким кварцем лучше  будет работать чип с 8МГц или с 20МГц, или с 24МГц, 25МГц? Или это не принципиально, к примеру у меня есть F769, там кварц на 25МГц стоит, при этом чип максимум 216МГц.

Edited by Электронщик

Share this post


Link to post
Share on other sites

не плате стоит 8 но у меня нет настройки тактирования. я пишу в опциях    parths and symbol HSE_VALUE 25000000U.И у меня файле system c отключается внешнее тактирование.

хотя в хале  там всё автоматом но прерывания по инжектируемого ацп  оно также работает не так.

Share this post


Link to post
Share on other sites
Posted (edited)
16 часов назад, Электронщик сказал:

с каким кварцем лучше  будет работать чип с 8МГц или с 20МГц, или с 24МГц, 25МГц

для PLL никакой разницы. Главное чтобы в диапазон по ДШ входил и распаян правильно. Емкости компенсирующие я имею в виду. Для 8 и для 25 они будут разные. Про это в ДШ кстати тоже написано

Edited by mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Share this post


Link to post
Share on other sites
29.12.2019 в 22:45, Электронщик сказал:

Получается камень поддельный? Или сам IAR? Вы в чем пишите в IAR? А есть кусок кода с тактированием? Чтобы помигать светиком проверить есть ли инверсия, и что с тактированием

Актуально ещё? Могу поэкспериментировать.

Share this post


Link to post
Share on other sites

Тактирование я не настраивал 

5 часов назад, Ivan Rusev сказал:

parths and symbol HSE_VALUE 25000000U

только прописываю в Atolic Truestudio.Инверсия есть только после нажатия RESET.B Halтоже самое.

Share this post


Link to post
Share on other sites

всем привет. появилась необходимость в проекте использовать usb virtual com port, чтобы не использовать внешний чип преобразователь решил юзать хардварный usb чипа stm32f407.
подскажите какую то библиотеку, реализующую данную функцию. (а то сам попытался освоить под это дело куб и хал - остался крайне недоволен, куча глюков всплывает при кубовой реализации).

Share this post


Link to post
Share on other sites

Всем привет!   Контора закупила EasyMx Pro v7 от Микроэлектроника. Может быть кто-то пользовался и подскажет: будет ли эта плата работать с StmCube mx и IAR  ?  Или надо пользоваться прогами от Микроэлектроники? (я так понимаю, что их МикроСи не очень популярен). Не хотелось бы тратить время на изучение того, что не пригодится.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...