Sök…


Anmärkningar

Det här avsnittet ger en översikt över vad stm32 är, och varför en utvecklare kanske vill använda den.

Det bör också nämna alla stora ämnen inom stm32 och länka till relaterade ämnen. Eftersom dokumentationen för stm32 är ny kan du behöva skapa initialversioner av relaterade ämnen.

Vad är STM32?


STM32 är en 32-bitars Flash-mikrokontrollerfamilj utvecklad av ST Microelectronics. Det är baserat på ARM® Cortex®-M-processor och erbjuder ett 32-bitars produktsortiment som kombinerar mycket hög prestanda, realtidsfunktioner, digital signalbehandling och lågspänning, lågspänningsdrift.

En detaljerad beskrivning av varje serie, utvecklingsverktyg och avkodning av artikelnummer finns på Wikipedia .

Produktserie

Cortex-M0 / -M0 + Cortex-M3 Cortex-M4 Cortex-M7
Hög prestanda: STM32F2 STM32F4 STM32F7 , STM32H7
Vanliga: STM32F0 STM32F1 STM32F3
Ultra-low-power: STM32L0 STM32L1 STM32L4

Utvecklingsbrädor

STM32 Nucleo ( mbed aktiverat ) Upptäcktsatser Utvärderingsnämnder
Typiskt användningsfall: Flexibel prototypning, gemenskap Prototyper, kreativa demonstrationer Fullständig utvärdering av funktionen
Förlängningsmöjligheter: +++ ++ ++
Anslutningar: Arduino ™, ST, Morpho ST ST

versioner

Version Utgivningsdatum
1.0.0 2016/11/01

Första gången installation med blinkande LED-exempel med SW4STM32 och HAL-biblioteket

( Observera: Det finns många IDE, verktygskedja och bibliotek som är färdiga att använda med STM32. Följande installation kräver minimal ansträngning för att få det att fungera, men det är bara en av de många. Känn dig fri att utforska andra, det är inte syftet med detta exempel att tvinga vem som helst att använda de verktyg som kommer att användas här.)


IDE-installation

Systembänk för STM32 : gratis IDE på Windows, Linux och OS X. Den har byggts av AC6 och kan laddas ner efter registrering från OpenSTM32 Community: s webbplats .

IDE själv är baserad på Eclipse, men kommer med några extra för STM32-utveckling som:

  • Ac6 STM32 MCU GCC-verktygskedja
  • OpenOCD och GDB (arm-none-eabi-gdb) med automatiskt genererade felsökningskonfigurationer beroende på måltavlan
  • Inbyggda alternativ för att programmera eller radera chip

För att börja med STM32 innan du skapar ditt eget kort, rekommenderas det att experimentera med en Discovery , en Nucleo eller en Eval-kort , som kommer med en inbyggd SWD (Serial Wire Debug) programmerare / debugger som heter ST-Link.

Skapa ett projekt

I det här exemplet används ett STM32F4 Discovery-kit , som har en STM32F407VG-mikrokontroller. (Vilket annat bräde som helst kan också användas.)

  1. Öppna SW4STM32 och skapa ett nytt C-projekt: File → New → C Project

  2. Ge det ett namn som "STM32F4_Discovery-Blinky" och från Project Type listan välja den körbara / AC6 STM32 MCU Project. Som standard är den enda tillgängliga verktygskedjan Ac6 STM32 MCU GCC . Klicka på Nästa.

    ange bildbeskrivning här

  3. Nästa steg är Felsöknings- / släppinställningar , kan hoppas över nu genom att klicka på Nästa.

  4. Val av styrelse . Befintliga kort kan väljas som i detta exempel STM32F4 Discovery eller nya anpassade kort kan läggas till.

    ange bildbeskrivning här

  5. Nästa steg är Project Firmware-konfiguration . Välj mellan Inget firmware , Standard Peripheral Library (SPL) eller Hardware Abstraction Layer (HAL). Det ifrågasätts vilken som är mer lämpad för utveckling, men denna fråga ligger utanför ramen för detta exempel. Detta exempel kommer att använda HAL-biblioteket eftersom det för närvarande stöds av ST Microelectronics. Ytterligare tillgängligt mjukvaruverktyg för HAL är STM32CubeMX , som är en initialiseringskodgenerator. Dessutom finns flera exempelapplikationer tillgängliga av programvarupaket STM32CubeFx eller STM32CubeLx. Ladda ner målarfirman om den saknas och det rekommenderas att välja "Lägg till drivrutiner på låg nivå i projektet" och "Som källor i applikationen" . Klicka till slut på Slutför.

    ange bildbeskrivning här

Eftersom detta projekt har skapats med en STM32F4 Discovery, finns det redan flera färdiga att använda funktioner under / STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery / projektmappen som kan användas för att gränssnitta Discovery-kitens kringutrustning (accelerometer, ljud , Lysdioder, tryckknapp). I det här exemplet kommer void BSP_LED_Init(Led_TypeDef Led) och void BSP_LED_Toggle(Led_TypeDef Led) att användas från filen stm32f4_discovery.c för att blinka den gröna lysdioden, som är LED4 . För att bestämma vilken LED som använder schemat i Discovery-kitet .

ange bildbeskrivning här

De faktiska #define och enum är redan dolda av vissa #define och enum , använd Ctrl + Klicka för att spåra dem.

  1. Inne i main anropar HAL_Init() funktion som återställer all kringutrustning, initierar Flash-gränssnittet och Systick. (Systick används för att generera fördröjning för att blinka.)
  2. Systemklockan måste konfigureras. Det kan göras med hjälp av STM32CubeMX-klockkonfigurationsfunktionen eller med referenshandboken. I det här exemplet matas systemklockan av den interna PLL (Phase Locked Loop), som kommer från en extern 8 MHz kristalloscillator (HSE). Förskalare har ställts in för att uppnå den maximala tillgängliga frekvensen, som är 168 MHz i fallet med F4 Discovery.
  3. Initiering av kringutrustning, i detta fall en GPIO-stift.
  4. Inuti en oändlig slinga, ring LED-växling och HAL_Delay() -funktionen. HAL_Delay() använder Systick och genererar en försening i milisekunder.

Hela koden är följande:

#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
            
void SystemClock_Config(void);

int main(void)
{
    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* Configure the system clock */
    SystemClock_Config();

    /* Initialize one of the LED GPIO pin */
    BSP_LED_Init(LED4);

    while(1)
    {
        BSP_LED_Toggle(LED4);
        HAL_Delay(1000);       // in miliseconds
    }
}

/**
 * @brief  System Clock Configuration
 *         The system Clock is configured as follow :
 *            System Clock source            = PLL (HSE)
 *            SYSCLK(Hz)                     = 168000000
 *            HCLK(Hz)                       = 168000000
 *            AHB Prescaler                  = 1
 *            APB1 Prescaler                 = 4
 *            APB2 Prescaler                 = 2
 *            HSE Frequency(Hz)              = HSE_VALUE
 *            PLL_M                          = (HSE_VALUE/1000000u)
 *            PLL_N                          = 336
 *            PLL_P                          = 2
 *            PLL_Q                          = 7
 *            VDD(V)                         = 3.3
 *            Main regulator output voltage  = Scale1 mode
 *            Flash Latency(WS)              = 5
 * @param  None
 * @retval None
 */
void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  // Enable Power Control clock
  __PWR_CLK_ENABLE();

  // The voltage scaling allows optimizing the power consumption when the
  // device is clocked below the maximum system frequency, to update the
  // voltage scaling value regarding system frequency refer to product
  // datasheet.
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  // Enable HSE Oscillator and activate PLL with HSE as source
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

  // This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
  // your case, you have to recompute these PLL constants.
  RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
  // clocks dividers
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
      | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}

Bygg med hammaren ange bildbeskrivning här , och ladda ner applikationen genom att högerklicka på projektmappen och välja alternativet Mål → Programchip ...

Ett annat sätt att ladda ner är att använda felsökning . Klicka på pilen bredvid felikonen ange bildbeskrivning här i verktygsfältet och öppna menyn Debug Configuration .... Skapa en ny Ac6 STM32-felsökningskonfiguration och om C / C ++ -applikationsfältet är tomt, fyll i följande:

Debug \ STM32F4_Discovery-Blinky.elf

Andra felsökningsparametrar som OpenOCD-konfigurationsfilen och de använda Telnet- och GDB-portarna genereras automatiskt och fylls i av ramverket. Klicka till slut på felsökningsknappen.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow