2016-11-02

NuTiny-SDK-NUC505 (NUC505 QFN88) v1.4 開發板 FreeRTOS v9.0.0 移植建置

NuTiny-SDK-NUC505 (NUC505 QFN88) v1.4 開發板 FreeRTOS v9.0.0 移植建置

移植建置步驟如下:

1. 先到 FreeRTOS 官方網頁下載 FreeRTOS 的 7z 執行包,目前最新版為 9.0.0 版。
 
   官方網頁:http://www.freertos.org/
   
2. 下載完成並解壓縮後,得到一個 FreeRTOSv9.0.0 資料夾。
3. 再將把路徑 FreeRTOSv9.0.0\FreeRTOS\Source 資料夾,複製到 Keil MDK-ARM 專案中。
   路徑:
        NUC505_BSP301000\ThirdParty\FreeRTOS\Source 資料夾

4. 接著再把 NUC505_BSP301000\SampleCode\FreeRTOS 資料夾底下的 FreeRTOSConfig.h
   也複製到 2000_FreeRTOS.uvproj 專案中。
   路徑:
        NUC505_BSP301000\SampleCode\2000_FreeRTOS 資料夾    

5. 在 2000_FreeRTOS.uvproj 專案中,將路徑
    FreeRTOS\Source\include
    FreeRTOS\Source\portable\RVDS\ARM_CM4F
    及
    FreeRTOS\Demo\Common\include
    加入 Compiler include Paths 中。

6. 將 FreeRTOS\Source\portable\MemMang 的 heap_2.c 加入 2000_FreeRTOS.uvproj 專案中。

7. 將 FreeRTOS\Source\portable\RVDS\ARM_CM4F 的 port.c 加入 2000_FreeRTOS.uvproj 專案中。

8. 將 FreeRTOS\Source 資料夾底下的 4 個 *.c 檔案,加入 2000_FreeRTOS.uvproj 專案中。
    list.c
    queue.c
    tasks.c
    timers.c

9. 將原本FreeRTOS v7.4.0 使用 FreeRTOSConfig.h 文件, 
    依下述修改即可解決 FreeRTOS v9.0.0 遭遇的 Error 18 錯誤: 

    // For FreeRTOS v7.4.0
    #define configTICK_RATE_HZ    ( ( portTickType ) 1000 )
    #define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )

    改成 
    // For FreeRTOS v9.0.0
    #define configTICK_RATE_HZ              ( ( TickType_t ) 1000 )
    #define configMAX_PRIORITIES            ( 5 )

    存檔後關閉。如圖。 
   


10. 將 FreeRTOS\Demo\Common\Minimal\flash.c 文件的 
    vStartLEDFlashTasks() 中,添加
    
    // PC.3 set to output mode
    PC->MODE = 0x00000008;      // 7654-3210
                                // 0000-1000

    以便對 IO1 Green LED (PC.3) 進行控制。如圖。



11. 將 NUC505_BSP301000\SampleCode\2000_FreeRTOS\ParTest.c 文件中,
    原本 PA.5..PA.7 的相關指令均改為 PC.3。 
   
    以便對 IO1 Green LED (PC.3) 進行控制。如圖。

    
12. NUC505_BSP301000\Library\Device\Nuvoton\NUC505Series\Source\ARM\startup_NUC505Series.s
    複製至
    NUC505_BSP301000\Library\Device\Nuvoton\NUC505Series\Source\ 資料夾
    即可解決 FreeRTOS v9.0.0 遭遇的 Warning L6319W 警告訊息.


NuTiny-SDK-NUC505 (NUC505 QFN88) v1.4 開發板 LED 測試

NuTiny-SDK-NUC505 (NUC505 QFN88) v1.4 開發板 LED 測試


1) S1 (PA9), S2 (PA10), S3 (PB3) 和 S4 (PB4) 為基本 Boot select.


在 MDK-ARM Debug mode 下運行,是選用紅色選項.
若燒錄 Internal SPI 後直接運行,則是選用綠色選項.
但在紅色選項下,才能燒錄 Internal SPI.


2) 進入 MDK-ARM Debug mode, 若沒 SRAM.INI 檔會發生 Error 56.

將 Nuvoton SRAM.INI 補上即可正常載入.





2016-11-01

NuEdu-SDK-M451 (M453VG6AE) 開發板 FreeRTOS v9.0.0 移植建置

NuEdu-SDK-M451 (M453VG6AE) 開發板 FreeRTOS v9.0.0 移植建置


移植建置步驟如下:

1. 先到 FreeRTOS 官方網頁下載 FreeRTOS 的 7z 執行包,目前最新版為 9.0.0 版。
   
   官方網頁:http://www.freertos.org/
     
2. 下載完成並解壓縮後,得到一個 FreeRTOSv9.0.0 資料夾。
3. 再將把路徑 FreeRTOSv9.0.0\FreeRTOS\Source 資料夾,複製到 Keil MDK-ARM 專案中。
   路徑:
        M451_BSP301001\ThirdParty\FreeRTOS\Source 資料夾

4. 接著再把 FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK 資料夾底下的 FreeRTOSConfig.h
   也複製到 2000_FreeRTOS.uvproj 專案中。
   路徑:
        M451_BSP301001\SampleCode\2000_FreeRTOS 資料夾      

5. 在 2000_FreeRTOS.uvproj 專案中,將路徑
    FreeRTOS\Source\include
    FreeRTOS\Source\portable\RVDS\ARM_CM4F
    及
    FreeRTOS\Demo\Common\include
    加入 Compiler include Paths 中。

6. 將 FreeRTOS\Source\portable\MemMang 的 heap_2.c 加入 2000_FreeRTOS.uvproj 專案中。

7. 將 FreeRTOS\Source\portable\RVDS\ARM_CM4F 的 port.c 加入 2000_FreeRTOS.uvproj 專案中。

8. 將 FreeRTOS\Source 資料夾底下的 4 個 *.c 檔案,加入 2000_FreeRTOS.uvproj 專案中。
    list.c
    queue.c
    tasks.c
    timers.c
   
9. 將 #include "M451Series.h" 標頭檔加入到 FreeRTOSConfig.h 文件中,並將

    // For CORTEX_M4F_STM32F407ZG-SK  
    #define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 130 )
    #define configTOTAL_HEAP_SIZE           ( ( size_t ) ( 75 * 1024 ) )
   
    #define configCHECK_FOR_STACK_OVERFLOW  2
   
    改成
    // For Nuvoton NuEdu-SDK-M451 (M453VG6AE)
    #define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 50 )
    #define configTOTAL_HEAP_SIZE           ( ( size_t ) ( 8 * 1024 ) )
   
    #define configCHECK_FOR_STACK_OVERFLOW  0
   
    並多加個
    #define configUSE_QUEUE_SETS            1  

    存檔後關閉。如圖。
   
10. 將 FreeRTOS\Demo\Common\Minimal\flash.c 文件的
    vStartLEDFlashTasks() 中,添加
   
    // PB.2 set to output mode
    PB->MODE = 0x00000010;
   
    以便對 BASIC01 LED1 (PB.2) 進行控制。如圖。

11. 將 M451_BSP301001\SampleCode\2000_FreeRTOS\ParTest.c 文件中,
    原本 PA.13 的相關指令均改為 PB.2。
   
    以便對 BASIC01 LED1 (PB.2) 進行控制。如圖。
   

2016-10-29

STM32F429I-DISCO 開發板的 FreeRTOS v9.0.0 移植建置

STM32F429I-DISCO 開發板的 FreeRTOS v9.0.0 移植建置

移植建置步驟如下:

1. 先到 FreeRTOS 官方網頁下載 FreeRTOS 的 7z 執行包,目前最新版為 9.0.0 版。
 
   官方網頁:http://www.freertos.org/
   
2. 下載完成並解壓縮後,得到一個 FreeRTOSv9.0.0 資料夾。
3. 再將把路徑 FreeRTOSv9.0.0\FreeRTOS\Source 資料夾,複製到 Keil MDK-ARM 專案中。
   路徑:
        STM32F429I-Discovery_FW_V1.0.1\Utilities\Third_Party\FreeRTOS\Source 資料夾

4. 接著再把 FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK 資料夾底下的 FreeRTOSConfig.h
   也複製到 2001_FreeRTOS_TEST.uvproj 專案中。
   路徑:
        STM32F429I-Discovery_FW_V1.0.1\Projects\2001_FreeRTOS_TEST\USER 資料夾    

5. 在 2001_FreeRTOS_TEST.uvproj 專案中,將路徑
FreeRTOS\Source\include
及
FreeRTOS\Source\portable\RVDS\ARM_CM4F
加入 Compiler include Paths 中。

6. 將 FreeRTOS\Source\portable\MemMang 的 heap_1.c 加入 2001_FreeRTOS_TEST.uvproj 專案中。

2016-10-31 參考 安富萊 (ARMFLY) STM32-V6 開發板教程第54頁,將 heap_1.c 改為 heap_4.c。其差別如下:
  •  heap_1 - the very simplest, does not permit memory to be freed 
  •  heap_4 - coalescences adjacent free blocks to avoid fragmentation. Includes absolute address placement option 

7. 將 FreeRTOS\Source\portable\RVDS\ARM_CM4F 的 port.c 加入 2001_FreeRTOS_TEST.uvproj 專案中。

8. 將 FreeRTOS\Source 資料夾底下的 6 個 *.c 檔案,全部加入 2001_FreeRTOS_TEST.uvproj 專案中。
    croutine.c
    event_groups.c
    list.c
    queue.c
    tasks.c
    timers.c
 
9. 將 #include "stm32f4xx.h" 標頭檔加入到 FreeRTOSConfig.h 文件中,並將 
    #define configCHECK_FOR_STACK_OVERFLOW  2 
    改成 
    #define configCHECK_FOR_STACK_OVERFLOW  0 
    存檔後關閉。如圖。 
10. 將 #include "stm32f4xx.h" 標頭檔加入到 port.c 文件中。如圖。 

參考資料:
    STM32F4 入門教學:FreeRTOS 移植 

    

2016-10-20

Visual Studio Community 2015 找不到 SignTool.exe 簽署工具錯誤的解決之道

Visual Studio Community 2015 找不到 SignTool.exe
簽署工具錯誤的解決之道

原本 Visual Studio Community 2015 安裝在 Windows 7 64-bit
一切正常,重新安裝在 Windows 10 64-bit 後,編譯時發生
找不到 SignTool.exe 簽署工具的錯誤. 如附圖.



解決方法是加裝 ClickOnce Publishing Tools.
1) 再重新安裝 Visual Studio Community 2015, 並選定 Modify.
如附圖.


 2) 加裝 ClickOnce Publishing Tools 功能.如附圖.





2016-10-16

BOSCH BMP180 Chip ID 及校正資料讀取測試

BOSCH BMP180 Chip ID 及校正資料讀取測試

在淘寶上買 BMP180 模塊約 RMB 7.60.
其為 I2C slave device, VCC 及3.3V 腳位均需供電.
用 USBee AX I2C Controller 可簡單
進行 Chip ID 及校正資料讀取測試.

1) 先由 0xD0 location 讀取 Chip ID
其值固定為 0x55. 結果如附圖.
2) 再由 0xAA to 0xBF location 連續讀出
11 個校正係數 (共22 個 bytes).

運用 BMP180 搭配 壓高公式 (hypsometric equation) 計算海平面氣壓

運用 BMP180 搭配 壓高公式 (hypsometric equation) 計算海平面氣壓.

1) 首先依 BMP180 data sheet 第15頁公式, 逐步計算
溫度及氣壓值, 確保每個步驟的數值均與範例完全相同無誤.
(如下圖).


2) 依壓高公式 (hypsometric equation)
(0.0065 * h / (T + 273.15) + 1) ^ 5.257 = P0 / P
    分別實施三個副程式:
    
    a) float BMP180_PressureToAltitude (float fSeaLevelPressure, float fAtmophericPressure, float fTemperature);
        由海平面氣壓, 測得的大氣壓力及溫度,得出海拔高度.
        
    b) float BMP180_AltitudeToAtmospheric(float fSeaLevelPressure, float fAltitude, float fTemperature);
        由海平面氣壓, 海拔高度及溫度,得出大氣壓力.
    
    c) float BMP180_AltitudeToSeaLevel(float fAtmosphericPressure, float fAltitude, float fTemperature);
        由海拔高度, 測得的大氣壓力及溫度,得出海平面氣壓.
   
    實例驗算如下:
            Sea-level pressure   P0= 1013.25 hPa
            Atmospheric pressure P = 1009.32 hPa
            Temperature          T =   30.4  DegC
            Altitude             h =   34.53 m

    (如下圖).


3) 實測大氣壓力及溫度,得出海平面氣壓. 結果如附圖.

經詢問中央氣象局, 其答覆如下:

///////////////

測站氣壓與海平面氣壓進行轉換時,皆是使用壓高公式(Hypsometric equation)進行換算,原始公式及使用常數值如下所示,與您附件所提之公式一樣,只是形式上會略做調整,以方便作業上使用。

P=Psea/exp(gh/RT) 
P:海拔高度為h處的氣壓(測站氣壓)
Psea:海平面(高度為0)氣壓
R:氣體常數=287.05278 J/K*Kg
T:空氣層(Psea~P)的平均溫度
g:重力加速度=9.80665 m/s*s

氣象站所使用的壓高公式之形式如下所示:

Psea=P*10^m
Psea:海平面氣壓(hPa)
P:測站氣壓(hPa)
m:公式中除氣壓值以外的參數及常數值之整理值
m=h/(18400(1+aT)),h為測站高度(公尺),T為測站氣溫(度C),a為1/273

其中T應該為測站高度至海平面間的平均氣溫,依照溫度遞減率每上升1000公尺氣溫下降約5~6度,但是於計算時影響不大,因此計算上直接使用測站氣溫。

謝謝您的來信。敬祝 安康
中央氣象局 敬復


///////////////