2015年11月16日 星期一

Nordic Global Tech Tour 2015 (Taipei)

1. 今天一早去台大參加Nordic的研討會.

2. 參加者可以得到一塊免費的開發板.

3. 會後寄出了今天上課的投影片檔案.












2015年11月15日 星期日

STM32F401/411 HID Test(Keyboard + Mouse + HidRaw)

1. 本範例是利用stm32f401 discovery board來實做出usb keyboard/mouse/hidraw等裝置, 並送出簡
    單的測試資料來驗證是否正確.


2. 程式完整範例下載連結:
    STM32F401_411_HID_TestCode

3. main flow:

  • 程式用來切換hid or vcp的設定在stm32f401_discovery.h中, 由於現在要測試的是HID, 因此我們預設使用HID, 而底下的KeyBoardTest/MouseTest/HidRawTest等3個define, 則是決定可以進行哪些項目的測試, 可以全部一起打開, 也可以只打開其中一個.
  • main loop主要在執行button scan, 當確認到user有按下user button後, 根據不同的define去送出不同的資料.
  • 特別需要注意的是當keyboard/mouse放開時, 需送出release key的event, 否則會看到連發key的情形出現, 而hidraw則不需要.
4. Test Flow:
  • keyboard test: 可以先開啟一個空白文字檔來測試, 當按下user button時, 會送出一個小寫(in lowercase letters)的a出現, 放開即馬上停止輸出.



  • mouse test: 當按下user button時, 滑鼠鼠標會朝右上方移動, 放開即馬上停止輸出.


  • hidraw test: 測試時, 可先安裝Bus Hound tool, 接著接上stm32f401 discovery board, 若成功則可以看到我們新增出來的usb device(ex: [32]USB輸入裝置).

  • 當按下user button即可看到我們輸出的資料, 放開不需做其它處理即會自行停下.

2015年11月14日 星期六

2015-11-14-康寧附幼-幼綠班-運動會

    今天陪著大女兒一起參加運動會, 比起去年的表現, 今年真的是進步不少, 希望明年能順便一起參加小女兒的運動會啊.







2015年11月13日 星期五

Wii Remote Control + ASR + Melody Recognition + ROBONOVA-I

1. 今天整理資料突然看到以前在學校拍的影片, 以前比較瘦啊, 真是令人懷念.......XD


2. 記得當時使用的MCU是Generalplus的GPCE061A 16Bit Micro-Controller.


2015年11月12日 星期四

STM32F401/411 Virtual Com-Port(VCP) Two Way Test

1. 此測試程式是利用stm32f401 discovery board實做出virtual com port function(vcp), 並透過vcp
    接收一個binary file, 並於接收完畢後, 將整個binary file透過vcp顯示出來.

2. 完整範例和測試檔案下載連結:
    STM32F401_411_VCP_TwoWay_TestCode

    GPIO_IOToggle.bin

3. 硬體電路連結方式如下, 將stm32f401 discovery board的mini usb(stlink)和micro usb(usb slave)
    與電腦連接.
 


 4. 安裝stm32 virtual com port driver, link: stm32_vcp_driver

5. main flow:

  • 目前usb的設定預設值是使用virtual com port, 之後會再解釋hid.
  • 當程式開始執行且USB Init成功之後, 可以在裝置管理員的地方看到STMicroelectronics Virtual COM Port(COMx)的裝置.



  • main.c的流程只有兩個function, 第一個是一直在等待vcp接收bin file, 第二個是將接收完成的bin file打印在vcp顯示出來. 


  • vcp rx function:  目前接收的上限是設定在50kbytes, 如果是使用stm32f411 discovery board的話, 則可以設定到100kbytes.
  • vcp tx function:  只需要將要傳送出去的buffer帶進來即可.


6. Test flow:

  • 選用一個可以send file的terminal tool(ex: Tera Term or Terminal_v1.93b.....).
  • 接下來使用Tera Term來測試如何傳送及顯示一個binary file.
  • 開啟後設定Tera Term去開啟stm32 virtual com port(ex: COM7), 設定可以參考下圖.




  • 當設定成功後, 可以看到下圖畫面, 代表已經連線.




  • 此時點選File -> Send file:



  • 選定一個要傳送的test binary file(ex: GPIO_IOToggle.bin), 並按下開啟即會開始傳送, 傳送過程中, LED4 & LED5會一直閃爍, 當停止閃爍恆亮時, 代表STM32F401接收完成.




  • 當接收完畢後, 程式即會自動將接收的binary file透過vcp傳送出去, 因此可以在Tera Term上的視窗看到如下畫面.




  • 我們可以使用UltraEdit開啟GPIO_IOToggle.bin來簡單比對一下是否相同, 以下截取開始和結尾的畫面來簡單比較, 看來應該是沒有差異, 代表傳送接收皆正確.























2015年11月9日 星期一

How to get code version from binary file on IAR EWARM?

1. 當在與客戶開發專案的時候, 雙方的hex或是bin檔案可能都會來來回回寄個幾十個版本,
    而大部分皆是直接在檔名上修改個版號(ex: 001.bin....), 或是在程式中修改版號, 當程式跑
    起來後, 透過類似I2C/UART/SPI....等的溝通得到目前的版號.

2. 而往往出錯的皆是類似像上述的方式, 可能忘了改檔名或是為了快點修改Bug,而忘了修改
    程式中的版號, 導致許多問題產生, 因此如果有可以直接從build出來的binary來得到版號的
    話,應該可以減少一些無謂的時間浪費.

3. 現在要介紹的是利用vector_table中的reserved area來放版本號的方式:


  • 開啟IAR Project後, 先在程式中新增一個CodeVersion.h檔案.

  • 先輸入一個預設的版號, ex: 0x12345678
  • 開啟startup_stm32f401xx.s檔案, 並include CodeVersion.h, 且在reserved area中放入我們預設的版號.
  • 若是直接build code的話, 一定會有error, 因為我們在組語的部份加入CodeVersion.h的路徑給程式知道.
  • 輸出檔案的部份, 可以先使用binary來輸出.

  • 當程式編譯過後, 可以在輸出的目錄下找到Template.bin
4. 我們可以使用可以開啟binary檔案的編譯器來觀察, 例如使用Ultraedit來開啟Template.bin, 開
    啟後可以看到我們之前設定的版號0x12345678, 且位置均固定, 因此再也不需要等待程式跑
    起來後才能去得知版本號了.


5. Test Platform: STM32F401 Discovery Board.

6. 完整測試檔案連結如下:













2015年11月6日 星期五

How to run ble_app_uart project with IAR Debugging Mode?

1.     最近發現有時候在使用IAR EWARM Debug Mode進行Nordic Ble相關開發的時候, 會有程
    式跑不起來或是跑飛的情況發生, 但如果將build出來的檔案透過mergehex or nRFgo studio直
    接燒錄進去又可以正常執行.最後查了一下原來主要是需要在IAR的Option下需要新增一項
    Extra Option才會正常.

2.    This can be worked around by adding this line under "Options > Debugger > Extra Options > Command line options": --drv_vector_table_base=0x0


3. Linker configuration: