Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   92 / 176
(#) kapu48 válasza vargham hozzászólására (») Máj 26, 2017 /
 
Kíváncsiságból telepítettem az EmBitz-et.
Első betekintésre jónak tűnik!

Amit nem találok elsőre. Hol lehet a programozónak beállítani az ST-Linket?
A létrehozott projectben nem találom az alap megszakítás rutinok létrehozását? (Vagy ez már házi feladat?)
(#) vargham válasza kapu48 hozzászólására (») Máj 26, 2017 / 1
 
"Amit nem találok elsőre. Hol lehet a programozónak beállítani az ST-Linket?"
F8, és indítja a debug-ot.

Ha csak programozni akarsz, debug nélkül:

1. Install ST-LINK utility

2. EmBitz:

Project / Properties... Build targets tab, check Generate Hex file

Tools / Configure tools... Add

Name:
Flash with ST Link

Executable:
  1. C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe


Parameters:
  1. -c SWD -P "${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.hex" 0x08000000 -Q -V -Rst -Run


Directory:
  1. ${PROJECT_DIR}
A hozzászólás módosítva: Máj 26, 2017
(#) kapu48 válasza vargham hozzászólására (») Máj 26, 2017 /
 
Köszönöm ez megvan.

De, Sajnos nem sikerül a fordítás!

Beraktam az: #include "stm32f4xx_gpio.h"
Ott vannak benne a definíciók. :
#define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */

És mégis kapok rakat hasonló hibaüzenetet:
104. sor: #define LED4_PIN GPIO_PIN_12

.\inc\stm32f4_discovery.h|104|error: 'GPIO_PIN_12' undeclared here (not in a function)|
A hozzászólás módosítva: Máj 26, 2017
(#) csabeszq válasza vargham hozzászólására (») Máj 26, 2017 /
 
Azért nagyon remélem, hogy tud ST-Link-kel debuggolni.

Este majd kipróbálom.

(#) kapu48 válasza vargham hozzászólására (») Máj 26, 2017 /
 
Más!

Telepítve:
Plugins: uVision Project Loader
És nem látja a Keil5-ös: Project.uvprojx ???
Nem is ismeri!!

Ez sem egy telepítem, és működik IDE verzió!
A hozzászólás módosítva: Máj 26, 2017
(#) Lucifer válasza csabeszq hozzászólására (») Máj 26, 2017 /
 
Tud debugolni, openocd-t használ.
Nagy dolgot ne várj, egy Eclipse alapú IDE, kb. azt tudja mint az általad említett " Eclipse + openocd + gnuarmeclipse pugin" kombó, csak általában működik OOTB.

C++ projekttől szétesik a kódkiegészítés, és az indexelés. Bár vannak olyanok akik írták, hogy megy, tehát ez akár regresszió is lehet.
(#) kapu48 válasza Lucifer hozzászólására (») Máj 26, 2017 /
 
Ezek szabvány C projekttek:
  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f4_discovery.c
  4.   * @author  MCD Application Team
  5.   * @version V2.1.1
  6.   * @date    12-January-2016
  7.   * @brief   This file provides set of firmware functions to manage Leds and
  8.   *          push-button available on STM32F4-Discovery Kit from STMicroelectronics.
  9.   ******************************************************************************
  10.   */
  11. /* Includes ------------------------------------------------------------------*/
  12. #include "stm32f4_discovery.h"
  13.  
  14. ...

Mégis szétesik?
(#) csatti2 válasza kapu48 hozzászólására (») Máj 26, 2017 /
 
Mi az, hogy szabvány C projekt? Ahány IDE, annyiféleképpen tárolják a projektet. A demo programokhoz adnak 3 féle projekt fájlt. Ezekkel a progikkal könnyebb a fordítás, mivel az összes környezeti változó, linkelt könyvtár, stb. be lett állítva. EmBitz-hez ezeket neked kell beállítanod. A dolgot bonyolítja, hogy az ST nem képes eldönteni milyen formában adja is oda a progikat. Pl.: Az SPL könyvtár alapú projekteket alapból létre tud hozni az EmBitz (csak csináld végig a varázslót). A demo-k persze valami köztes könyvtárakat tartalmaznak, ami se nem CubeMX se nem SPL (és most épp egy harmadik fajtát fejlesztenek...). Ez nem az EmBitz hibája, hanem az ST hülyesége.
A hozzászólás módosítva: Máj 26, 2017
(#) kapu48 válasza csatti2 hozzászólására (») Máj 26, 2017 /
 
EmBitz-ben létrehoztam új project-et, STM32F407VG-nek.
Eddig OK.

Most ebbe bele másoltam és hozzá adtam az ST fájlokat: stm32f4_discovery.c *.h
Kiszedtem a headerekből a C++ illesztéseket:
#ifdef __cplusplus
extern "C" {
#endif


F7
És nem látja egy részét, amiket bele raktam!
Mit rontok el?
(#) csatti2 válasza kapu48 hozzászólására (») Máj 26, 2017 / 1
 
Nem tudom. Nem vagyok ott nálad.
(#) cimopata válasza csatti2 hozzászólására (») Máj 26, 2017 /
 
Próbálkoztam a netről példát szedni a HAL könyvtárral de egyenlőre nem úgy tűnik hogy lementi az adatot bárhova is:

Ezt csináltam:
  1. #define adat_ADR_0 0x08007C00 //"adat_ADR_0" az adat regiszter cím neve //aram_preset
  2. #define adat_ADR_1 0x08007C01 //"adat_ADR_1" az adat regiszter cím neve //fesz_on_preset
  3. #define adat_ADR_2 0x08007C02 //"adat_ADR_2" az adat regiszter cím neve //fesz_off_preset
  4. uint16_t * const adat_stored_0 = (uint16_t *) adat_ADR_0; // "adat_stored_0" a konstans pointer neve
  5. unsigned short volatile * const adat_stored_1 = (uint16_t *) adat_ADR_1; // "adat_stored_1" a konstans pointer neve
  6. unsigned short volatile * const adat_stored_2 = (uint16_t *) adat_ADR_2; // "adat_stored_2" a konstans pointer neve
  7.  
  8.  
  9. data_to_flash=aram_preset;
  10. address=adat_ADR_0;
  11. flash_write();
  12.                                                                        
  13.  
  14. void flash_write()
  15. {
  16.                 HAL_FLASH_Unlock();
  17.                 HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, data_to_flash);
  18.                 HAL_FLASH_Lock();
  19. }
(#) csatti2 válasza cimopata hozzászólására (») Máj 26, 2017 /
 
Ez egy fejlesztői kártya, amit programozol? Ha igen, tettél már rá előtte másik programot (ami használta ezt a területet 0x08007C00)? Ha nem vagy benne biztos, nézd meg az ST-Link Utility-vel mi van a flash ezen területén. Ha már használtad, akkor az írás előtt mindenképp törölni kell a területet tartalmazó flash lapot.
A hozzászólás módosítva: Máj 26, 2017
(#) kapu48 válasza kapu48 hozzászólására (») Máj 26, 2017 /
 
Sajnos nincsen rá több idöm!
Delette, EmBitz ment a levesbe!
(#) kiborg válasza gtk hozzászólására (») Máj 26, 2017 /
 
0,0
Ez mit befolyásol egy már működő procinál?
Fut a progi, lehúzom a programozó egy vezetékét és megáll.
Bár ahogy nézem, nem az egész áll meg, hanem csak az RTC, a multiplexálás fut.
De ha áramtalanítom, akkor a multiplexálás sem indul el.
Vbat-ra 3,3V kötve vagyon.
(#) csabeszq hozzászólása Máj 26, 2017 /
 
Az EmBitz-ről nekem ellentétes véleményem alakult ki.

- fél óra alatt ment a debug, a printf, minden ST-Link-kel

Amit szerettem volna, arra elég. Tud debuggolni, látom a változókat, megy a printf, nem is foglal 600 MByte-ot, nekem tetszik, bejött.
(#) kapu48 válasza csabeszq hozzászólására (») Máj 26, 2017 /
 
Közben én is találtam tanítást hozzá:
Bővebben: Link

Azt hiszem, még egyszer neki veselkedek a project építésnek!

Kisebb lépéssekkel.
A hozzászólás módosítva: Máj 26, 2017
(#) cimopata válasza csatti2 hozzászólására (») Máj 26, 2017 /
 
Köszi ez jó ötlet, szoktam használni programozásra de eszembe sem jutott azzal ránézni a flash-re.


Rájöttem hogy a 32k csak 0x08002160 az utolsó cím így a használt 0x08007C01 sok volt.

Azt átírtam így ez lett:
  1. #define adat_ADR_0 0x08002150
  2. #define adat_ADR_1 0x08002152
  3. #define adat_ADR_2 0x08002154
  4. uint16_t * const adat_stored_0 = (uint16_t *) adat_ADR_0; //
  5. uint16_t * const adat_stored_1 = (uint16_t *) adat_ADR_1; //
  6. uint16_t * const adat_stored_2 = (uint16_t *) adat_ADR_2; //


Most szépen le is tudom menteni az adatot de az a baj, hogy csak 1x. Utána már nem írja felül. Miért van ez?
A hozzászólás módosítva: Máj 26, 2017
(#) csabeszq válasza cimopata hozzászólására (») Máj 26, 2017 /
 
A flash úgy működik, hogy az 1-es bitet képes vagy 0-ra állítani. Visszafelé nem megy, 0 bitet nem tudsz 1-re állítani.

ARM alatt van egy utasítás, ami egy teljes page-et töröl, tehát minden bit 1-lesz, 0xFF-bájtok.

Miután kitöröltél mindent, utána újraírhatod a page-et.

A page mérete mikrovezérlőtől függ, STM32F103 alatt 1k-byte-os.

Tehát, ha egy bitet akarsz módosítani, beolvasod a teljes page-et, átírod a bitet, törlöd a page-t (erase) és visszaírsz mindent.

Talán HAL_FLASHEx_Erase ami téged érdekel, nem használtam még HAL-t...
A hozzászólás módosítva: Máj 26, 2017
(#) csabeszq válasza csabeszq hozzászólására (») Máj 26, 2017 /
 
Én a legutolsó page-et használom config tárolásra, a programot nem írom felül.
(#) kapu48 válasza csabeszq hozzászólására (») Máj 27, 2017 /
 
Helo Valaki!

Már csak 2 hibám van az EmBitz projectben.
Amire nem találom a javítást!
A kod részlet:
  1. #if (__MPU_PRESENT == 1)
  2. /**
  3.   * @brief  Disables the MPU
  4.   * @retval None
  5.   */
  6. __STATIC_INLINE void HAL_MPU_Disable(void)
  7. {
  8.   /* Disable fault exceptions */
  9.   SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
  10.  
  11.   /* Disable the MPU */
  12.   MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;
  13. }
  14.  
  15. /**
  16.   * @brief  Enables the MPU
  17.   * @param  MPU_Control: Specifies the control mode of the MPU during hard fault,
  18.   *          NMI, FAULTMASK and privileged access to the default memory
  19.   *          This parameter can be one of the following values:
  20.   *            @arg MPU_HFNMI_PRIVDEF_NONE
  21.   *            @arg MPU_HARDFAULT_NMI
  22.   *            @arg MPU_PRIVILEGED_DEFAULT
  23.   *            @arg MPU_HFNMI_PRIVDEF
  24.   * @retval None
  25.   */
  26. __STATIC_INLINE void HAL_MPU_Enable(uint32_t MPU_Control)
  27. {
  28.   /* Enable the MPU */
  29.   MPU->CTRL   = MPU_Control | MPU_CTRL_ENABLE_Msk;
  30.  
  31.   /* Enable fault exceptions */
  32.   SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
  33. }
  34. #endif /* __MPU_PRESENT */

És a hiba jelzés:
...
.\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h|418|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'|
.\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h|438|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'|
.\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h|418|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'|
.\STM32F4xx_HAL_Driver\Inc\stm32f4xx_hal_cortex.h|438|error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'|
||=== Build finished: 4 errors, 25 warnings (0 minutes, 12 seconds) ===|

Esetleg valaki tudja értelmezni?
(#) cimopata válasza csabeszq hozzászólására (») Máj 27, 2017 /
 
Értem már. Elolvastam a ref manual ide eső részét + találtam a végén examplet a page erase dologra.

Visszaírtam a menteni kívánt adatok címét
0x08007C00
0x08007C02
0x08007C04

Ez a ref manual szerint a page 31 mivel 1k -egy page.

felhasználtam a example kódot amit beraktam a main-be de nem törli a memóriát. STM utulityvel megnéztem érintetlen a 3 cím. Még az az azadt van benne amit korábban beállítottam.

Nem lenne jó az erase kód?
  1. /* (1) Set the PER bit in the FLASH_CR register to enable page erasing */
  2. /* (2) Program the FLASH_AR register to select a page to erase */
  3. /* (3) Set the STRT bit in the FLASH_CR register to start the erasing */
  4. /* (4) Wait until the BSY bit is reset in the FLASH_SR register */
  5. /* (5) Check the EOP flag in the FLASH_SR register */
  6. /* (6) Clear EOP flag by software by writing EOP at 1 */
  7. /* (7) Reset the PER Bit to disable the page erase */
  8. FLASH->CR |= FLASH_CR_PER; /* (1) */
  9. FLASH->AR = 0x08007C00 ; /* (2) */
  10. FLASH->CR |= FLASH_CR_STRT; /* (3) */
  11. while ((FLASH->SR & FLASH_SR_BSY) != 0) /* (4) */
  12. {
  13. /* For robust implementation, add here time-out management */
  14. }
  15. if ((FLASH->SR & FLASH_SR_EOP) != 0) /* (5) */
  16. {
  17. FLASH->SR |= FLASH_SR_EOP; /* (6)*/
  18. }
  19. else
  20. {
  21. /* Manage the error cases */
  22. }
  23. FLASH->CR &= ~FLASH_CR_PER; /* (7) */
A hozzászólás módosítva: Máj 27, 2017
(#) kapu48 válasza cimopata hozzászólására (») Máj 27, 2017 /
 
És ha igy definiálnád a cimet?:
  1. FLASH->AR = ((uint32_t)0x08007C00U) ;


Tudná a fordító, hogy unsigned az értéked!
A hozzászólás módosítva: Máj 27, 2017
(#) kapu48 válasza cimopata hozzászólására (») Máj 27, 2017 /
 
Nem jól csinálod!

Itt egy komplet rutin:
Read/Write Flash
(#) icserny válasza kapu48 hozzászólására (») Máj 27, 2017 / 1
 
Gondolom, a __STATIC_INLINE nem tetszik a fordítónak.
(#) kapu48 válasza icserny hozzászólására (») Máj 27, 2017 /
 
Köszönöm!

Ebben a formában elfogadta:
  1. static __inline ...

(#) csabeszq válasza kapu48 hozzászólására (») Máj 27, 2017 /
 
A __STATIC_INLINE nem része a szabványos C++-nak.

A 4xx-et még nem próbáltam ki, de 1xx alatt a core_cm3.h-ban deklarálva van:

  1. #elif defined ( __GNUC__ )
  2.   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
  3.   #define __INLINE         inline                                     /*!< inline keyword for GNU Compiler       */
  4.   #define __STATIC_INLINE  static inline


Gondolom egy #include hiányzik, ami felkapja a core_cm3.h-t, vagy ilyesmit.
A hozzászólás módosítva: Máj 27, 2017
(#) csabeszq válasza kapu48 hozzászólására (») Máj 27, 2017 /
 
Nem tiszta, hogy miért akarjátok újra megcsinálni a kereket.

  1. #include <stm32f10x_flash.h>
  2.  
  3.         FLASH_Unlock();
  4.         FLASH_ErasePage( CONFIG_ADDRESS );
  5.  
  6.         for(unsigned i=0; i < sizeof(buf); i+=2)
  7.         {
  8.                 uint16_t hword = buf[i];
  9.                 hword |= (uint16_t)(buf[i+1]) << 8;
  10.  
  11.                 FLASH_ProgramHalfWord(CONFIG_ADDRESS+i, hword);
  12.         }
  13.  
  14.         FLASH_Lock();


Megírtak már mindent helyettetek. Nem kell túlzásba vinni a munkát.
(#) cimopata válasza kapu48 hozzászólására (») Máj 27, 2017 /
 
Hiányzott a Lock / Unlock függvény előtte utána. Azzal már működik szépen.
(#) cimopata hozzászólása Máj 27, 2017 /
 
Flash írás olvasás sikerült megcsinálni jól működik, köszönöm a segítséget.

Másik kérdésem lenne.
USART kommunikációban hogyan oldjátok meg hogy a két fél tudja mit küld fogad éppen? Pl oda vissza akarok küldeni több féle adatot beállítást honnan tudja majd a poci, hogy én éppen az áram értékét küldtem és nem mondjuk a feszültség értékét. Ha Pl a 8 bit-ből az első 4-et használom pl valamiféle kódra amiről beazonosítja a fogadó fél hogy a kapott adat tulajdonképpen micsoda az jó irányelv? Vagy ti ezt hogy szoktátok. Most nem kódra vagyok kíváncsi csupán az elméletére hogy hogyan szoktátok.
A hozzászólás módosítva: Máj 27, 2017
(#) kapu48 válasza cimopata hozzászólására (») Máj 27, 2017 /
 
Sorosporton szövegesen kommunikálunk, karaktereket küldünk.

Kitalálunk 1 formátum szabályt, amit a túloldalon már tudsz értelmezni.
Pl.: Volt, 12, mAmper, 800, …
Erre kell írni szöveg értelmezőt.
Következő: »»   92 / 176
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem