Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp
- Committer:
- pinofal
- Date:
- 2020-02-10
- Revision:
- 3:307e8b3d4968
- Parent:
- 2:0db92723d44f
- Child:
- 4:3a3ba27a08ee
File content as of revision 3:307e8b3d4968:
#include "mbed.h" #include "stm32f4xx_hal_flash.h" #if 1 #define DEBUG_PRINTF pc.printf #else #define DEBUG_PRINTF(...) #endif // tempo in secondi dl Ticker #define SECPERTICK 5 // numero di volte che il programma entra nella funzione Ticker int nCountTick; int nOldCountTick; // variabili contenenti le tensioni lette con gli ADC float fOut; float fPiezo; float fBatt; // indice per i cicli int nIndex; Ticker TimeTick; namespace { Serial pc(USBTX, USBRX); //STM32F411.C/E(DM00119316.pdf p.43 Table 4) const struct { uint8_t sector; uint32_t addr; } FLASH_SECTOR[] = { { FLASH_SECTOR_0, (uint32_t)0x08000000 /* Base address of Sector 0, 16 Kbytes */ }, { FLASH_SECTOR_1, (uint32_t)0x08004000 /* Base address of Sector 1, 16 Kbytes */ }, { FLASH_SECTOR_2, (uint32_t)0x08008000 /* Base address of Sector 2, 16 Kbytes */ }, { FLASH_SECTOR_3, (uint32_t)0x0800c000 /* Base address of Sector 3, 16 Kbytes */ }, { FLASH_SECTOR_4, (uint32_t)0x08010000 /* Base address of Sector 4, 64 Kbytes */ }, { FLASH_SECTOR_5, (uint32_t)0x08020000 /* Base address of Sector 5, 128 Kbytes */ }, { FLASH_SECTOR_6, (uint32_t)0x08040000 /* Base address of Sector 6, 128 Kbytes */ }, { FLASH_SECTOR_7, (uint32_t)0x08060000 /* Base address of Sector 7, 128 Kbytes */ } }; /** @brief 内蔵FLASHへのbyte書込み(セクタ消去有り) * * @param[in] addr 書込み先アドレス(ADDR_FLASH_SECTOR_x) * @param[in] pData 書き込みデータ * @param[in] Len 書き込みデータサイズ */ void programByte(int sector, const uint8_t *pData, uint8_t Len) { HAL_StatusTypeDef ret; /* flash control registerへのアクセス許可 */ HAL_FLASH_Unlock(); DEBUG_PRINTF("Unlocked\n\r"); /* 消去(電圧 [2.7V to 3.6V]) */ FLASH_Erase_Sector(FLASH_SECTOR[sector].sector, FLASH_VOLTAGE_RANGE_3); DEBUG_PRINTF("Erased\n\r"); /* 書込み(4byte単位) */ uint32_t addr = FLASH_SECTOR[sector].addr; DEBUG_PRINTF("Writing\n\r"); for (int lp = 0 ; lp < Len; lp++) { //DEBUG_PRINTF("addr:0x%08x data=%02x\n", addr, *pData); ret = HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, addr, *pData); if (ret != HAL_OK) { //trouble!! DEBUG_PRINTF("Fail\n\r"); while (true) {} } addr++; pData++; } /* flash control registerへのアクセス禁止 */ HAL_FLASH_Lock(); } const uint8_t *getFlash(int sector) { return (const uint8_t *)FLASH_SECTOR[sector].addr; } } void TimeTickFunction() { // indice di tick nCountTick++; // leggo i valori dagli ADC fOut++; fPiezo++; fBatt++; // visualizza i valori pc.printf("\r\n-- Nel ticker --\r\n"); pc.printf("Seconds= %d; fOut = %.3f; fPiezo = %.3f; fBatt = %.3f\n\r", (nCountTick*SECPERTICK), fOut, fPiezo, fBatt); // scrive linea completa } int main() { nCountTick=0; nOldCountTick =-1; char caLineToWrite[]="Seconds= 1800; fOut = 4.531; fPiezo = 19.872; fBatt = 3.523"; //uint8_t str[]="Seconds= 0000; fOut = 00000; fPiezo = 000000; fBatt = 00000000"; uint8_t str[8000]; long nIndexFlash=0; fOut = 4.531; fPiezo = 9.872; fBatt = 3.523; // resetta array for(nIndex=0; nIndex < 8000; nIndex++) { str[nIndex] =0; } TimeTick.attach(&TimeTickFunction,SECPERTICK); while(true) { if(nCountTick != nOldCountTick) { nOldCountTick = nCountTick; sprintf(caLineToWrite, "Seconds= %d; fOut = %.3f; fPiezo = %.3f; fBatt = %.3f", (nCountTick*SECPERTICK), fOut, fPiezo, fBatt); // scrive linea completa for(nIndex =0; nIndex < strlen(caLineToWrite); nIndex++) // trasferisce linea completa in formato leggibile da programByte { str[nIndex] = caLineToWrite[nIndex]; } //str[nIndex++] = NULL; //pc.printf("%s\n\r", caLineToWrite); //DEBUG_PRINTF("%s\n\r", caLineToWrite); programByte(4, str, sizeof(str)); wait(1); DEBUG_PRINTF("%s\n\r", getFlash(4)); } } /* programByte(4, str, sizeof(str)); DEBUG_PRINTF("success[%s]\n\r", getFlash(4)); */ /* uint8_t str[] = "t:hh:mm:Ss;P=19.2;B=3.2;O=3.1"; DEBUG_PRINTF("%s\n", str); programByte(4, str, sizeof(str)); while(true) { DEBUG_PRINTF("success[%s]\n\r", getFlash(4)); DEBUG_PRINTF("success[%s]\n\r", getFlash(7)); wait(4); } */ }