Eri valmistajien ARM-mikrokontrollerit

  • Keskustelun aloittaja Keskustelun aloittaja JKAVS
  • Aloitettu Aloitettu
Liittynyt
22.10.2016
Viestejä
1 161
Mielessä on muutamakin projekti, jotka vaativat perus-AVR:ää enemmän suorituskykyä. ARM lienee oikea valinta, mutta minkä valmistajan tuotteisiin kannattaisi sekaantua?

Itse mikrokontrollerit lienevät hyvin paljon toisiaan vastaavia ja erot tulevat kehitysympäristössä, fokumentaatiossa, ohjelmointilaitteissa ym. Onko kokemuksia tai suosituksia eri valmistajien tuotteista.
 
STM32 Nucleo / Discovery on helposti ja edullisesti saatavissa, vaihtoehtoja löytyy.

Mukana kortissa tulee debuggeripuoli, siihen pääsee OpenOCD:llä kiinni. Toki laite näkyy ihan muistikorttina tietokoneelle, niin onnistuu ihan kopioimalla ohjelman päivityskin.

Itse olen käyttänyt tätä niin että on konffannut timerit/dma:t/interruptit mukana tulevalla stm32cubemx (tms) javahärpäkkeellä ja muokatulla Makefilellä kääntänyt sitten kääntänyt gcc-toolchainia käyttäen (jostain kumman syystä tuo ei osaa suoraan exportata projektia gcc-makefile muodossa, joten vähän jumppaa tiedossa).

Nopeemmin pääsee koodia vääntämään mbed-kehitysympäristöllä, mutta se tulee nopeasti tielle jos pitää tehdä jotain rautaläheistä..
 
Näitä halpoja STM32(blue pill) moduuleja on tullut tilattua:
STM32F103C8T6 ARM STM32 Minimum System Development Board Module-in Integrated Circuits from Electronic Components & Supplies on Aliexpress.com | Alibaba Group


Moduulilla voi kehitellä Arduino IDEllä USB:in kautta, kunhan ensin lataa USB bootloaderin UART:n kautta sisään.
Ohjelmointiin voi myös hankkia tälläisen ST Link V2 modulin:

CFsunbitd 1PCS ST LINK Stlink ST Link V2 Mini STM8 STM32 Simulator Download Programmer Programming With Cover-in Wireless Adapter from Consumer Electronics on Aliexpress.com | Alibaba Group

Kehitysympäristö ja kääntäjävaihtoehtoja on paljon STM32:lle. Käyttökokemuksia ei vielä itsellä ole juurikaan, muuta kuin yksikertaisen LED vilkuttelu demon lataamisesta Arduinolla moduliin.
 
STM32 Armit ovat kivoja mutta ihan erilaisia kuin Arduinot. Arduinon foorumilla voi kysyä mitä tahansa tyhmääkin ja usein saa fiksun vastauksen. STM32 foorumilla oletetaan eli vaaditaan enemmän. STM32 MCUs Forum | STMicroelectronics Community
Arduino kortissa esimerkiksi AD muunnin piikki on aina se sama ja piste. Ainakin noissa STM Armeissa voit aika paljon valita mihin piikkiin mitäkin haluat. Hanki myös Cube mx softa millä voit säätää lisää. STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics
Keil Ide on ilmainen ja ihan oikea kehitysympäristö. Myönnän kyllä, että jos saat Arduinon kirjastot toimimaan Armissa säästät aikaa ja vaivaa.
 
Tilasin noita tuotteita, joita @LaturiLewis suositteli ja saapuivat nyt. Vaikuttavat hyviltä tarpeisiini.
Eroavuus Arduinosta ei haittaa, kun AVR-sovelluksetkin olen yleensä koodannut Atmel Studiolla ja ohjelmoinut Avrispillä.
 
Nyt oli aikaa perehtyä tarkemmin noihin moduuleihin, mutta laihoin tuloksin.
Seurasin tätä ohjetta, mutta mitään ledin vilkuntaa ei syntynyt. Onko suosituksia jostain hyvästä ja toimivasta tutoriaalista alkuun pääsemiseksi?
 
Blue Pill - STM32duino wiki linkin ohjeilla sain muistaakseni Windows 8.1 PC:llä USB bootloaderin ladattua sisään, jolloin LED(PC13) alkoi vilkkua USBin tahtiin.
Siis tämä USB bootloaderi toimii Arduino IDE:n kanssa , kun kirjastot ja driverit on ladattu.
Tämän USB bootloaderin lataus onnistuu joko UART pinneistä USB UART sovittimella tai STLinkV2 sovittimella levyn päässä olevasta piikkirimasta.
Linuxin kanssa en ole pelannut, enkä Eclipse pohjaisen IDE:n kanssa.
Jos halua parempaa ilmaista IDE:a , niin ehkä ST:n nykyään omistama Atollic ilmeisesti hyvä vaihtoehto.
Arduino for STM32 - Index page foorumilla löytyy paljon mielenkiintoisia projekteja.
Sain mm. linkin Miniscope v2c - open source PC USB oscilloscope using STM32F103 miniskoopin toimimaan lataamalla binäärit Blue Pilliin ja PC:lle tuo USB skooppi sovelluksen. Mutta muistaakseni tämä kadotti STM32duino USB bootloaderin tai ainakin meni USB skooppi tilaan.
 
Googlaamalla STM32F103 GPIO tai stm32f103 gpio tutorial löytyy ehkä käyttällesi prossulle ja idelle jotain.
Itse käytän edelleen ST cuben softaa ja esimerkkejä
STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics
Tuolta löytyy esimerkit ST:n omille korteille
STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics

F4:lle löytyi tuollainen esimerkki. F1:lle ei löytynyt juuri tuota samaa.
Koodi:
/**
  ******************************************************************************
  * @file    GPIO/GPIO_IOToggle/Src/main.c
  * @author  MCD Application Team
  * @brief   This example describes how to configure and use GPIOs through
  *          the STM32F4xx HAL API.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/** @addtogroup STM32F4xx_HAL_Examples
  * @{
  */

/** @addtogroup GPIO_IOToggle
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static GPIO_InitTypeDef  GPIO_InitStruct;

/* Private function prototypes -----------------------------------------------*/
static void SystemClock_Config(void);


/* Private functions ---------------------------------------------------------*/

/**
  * @brief  Main program
  * @param  None
  * @retval None
  */
int main(void)
{
  /* This sample code shows how to use GPIO HAL API to toggle LED1, LED2, LED3 and LED4 IOs
    in an infinite loop. */

  /* STM32F4xx HAL library initialization:
       - Configure the Flash prefetch
       - Systick timer is configured by default as source of time base, but user
         can eventually implement his proper time base source (a general purpose
         timer for example or other time source), keeping in mind that Time base
         duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
         handled in milliseconds basis.
       - Set NVIC Group Priority to 4
       - Low Level Initialization
     */
  HAL_Init();

  /* Configure the system clock to 100 MHz */
  SystemClock_Config();
 
  /* -1- Enable GPIO Clock (to be able to program the configuration registers) */
  LEDx_GPIO_CLK_ENABLE();

  /* -2- Configure IO in output push-pull mode to drive external LEDs */
  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;

  GPIO_InitStruct.Pin = LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN;
  HAL_GPIO_Init(LEDx_GPIO_PORT, &GPIO_InitStruct);

  /* -3- Toggle IO in an infinite loop */
  while (1)
  {
    HAL_GPIO_TogglePin(LEDx_GPIO_PORT, LED1_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100);
    HAL_GPIO_TogglePin(LEDx_GPIO_PORT, LED2_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100);
    HAL_GPIO_TogglePin(LEDx_GPIO_PORT, LED3_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100);
    HAL_GPIO_TogglePin(LEDx_GPIO_PORT, LED4_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100);
  }
}

/**
  * @brief  System Clock Configuration
  *         The system Clock is configured as follow :
  *            System Clock source            = PLL (HSE)
  *            SYSCLK(Hz)                     = 100000000
  *            HCLK(Hz)                       = 100000000
  *            AHB Prescaler                  = 1
  *            APB1 Prescaler                 = 2
  *            APB2 Prescaler                 = 1
  *            HSE Frequency(Hz)              = 8000000
  *            PLL_M                          = 8
  *            PLL_N                          = 200
  *            PLL_P                          = 2
  *            PLL_Q                          = 7
  *            PLL_R                          = 2
  *            VDD(V)                         = 3.3
  *            Main regulator output voltage  = Scale1 mode
  *            Flash Latency(WS)              = 3
  * @param  None
  * @retval None
  */
static void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;
  HAL_StatusTypeDef ret = HAL_OK;

  /* Enable Power Control clock */
  __HAL_RCC_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;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 200;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  RCC_OscInitStruct.PLL.PLLR = 2;
  ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
 
  if(ret != HAL_OK)
  {
    while(1) { ; }
  }

  /* 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_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
  if(ret != HAL_OK)
  {
    while(1) { ; }
  }
}


#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/**
  * @}
  */

/**
  * @}
  */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Edit: Pitää kai muistuttaa, että tuo vaatii ST:n Cuben ja sen kirjastot/paketit. Ja se toimii vain F4 levyllä.
Edit2: ja nuo linkit ovat tosiaan samoja. Kaikki löytyy samasta linkistä
 
Viimeksi muokattu:
Nyt oli aikaa perehtyä tarkemmin noihin moduuleihin, mutta laihoin tuloksin.
Seurasin tätä ohjetta, mutta mitään ledin vilkuntaa ei syntynyt. Onko suosituksia jostain hyvästä ja toimivasta tutoriaalista alkuun pääsemiseksi?

Mastering STM32 book - Carmine Noviello - A blog about programming and electronics
Itse olen hommannut kyseisen e-kirjan, tällä pääsee hyvin alkuun.

ST osti muutama kuukausi sitten TrueSTUDIO IDE:n, nyt se on täysin ilmainen ja tulevaisuutta ajatellen voisi olla viisasta aloittaa käyttämään sitä. Aiemmin lisenssi taisi olla ~50€/kk.
TrueSTUDIO - Atollic - ST

TrueStudio pohjautuu käsittääkseni myös Eclipseen ja GCC:n jota kirja myös käsittelee.
 
Nyt oli aikaa perehtyä tarkemmin noihin moduuleihin, mutta laihoin tuloksin.
Seurasin tätä ohjetta, mutta mitään ledin vilkuntaa ei syntynyt. Onko suosituksia jostain hyvästä ja toimivasta tutoriaalista alkuun pääsemiseksi?

Vilkaise tätä--> Patrick Hood-Daniel


Sen vaan sanon, että tuubissa STM32 ei ole kovin suosittu ja en ihmettele yhtään, kun koodi on kovin kapulaista. Arduino IDE:ssä on STM32:lle kirjastoa, että voi lediä vilkuttaa.
 
STM32 on hankalampi kuin Arduino joo. Kun on vaikka ioportteja ja ne voi säätää mihin piirin piikkiin ne tulee. Kun katsoo piirin tarkan tyypin ja mittaa yleismittarilla mikä piikki on vaikka ledissä kiinni, niin olen saanut piikit toimimaan. Yleismittarilla ja ledillä. Cube on hyvä juuri siinä, että se antaa softaa juuri tietyn piirin tietylle kotelolle. Lisää ohjeita löytyy netistä jos englanti sujuu. En usko että mikään muu Arm olisi helpompi tai että tukea löytyy helpommalla. Kaiken pitää vaan olla kunnossa. Kortin, Eclipsen ja oman koodin. En tiedä mitään helppoa kehitysympäristöä, ellei nyt sitten Arduino IDE ja STM32. Itse käytän Keil uVision5 demoa. Kaiken pitää vaan olla just oikein ja pitää olla vitun tarkka.
 

Uusimmat viestit

Statistiikka

Viestiketjuista
261 846
Viestejä
4 549 001
Jäsenet
74 856
Uusin jäsen
Acceli

Hinta.fi

Back
Ylös Bottom